[SkipList] Added random-lvel generators for max height 32/24/16
[libcds.git] / test / stress / main.cpp
index 82ddec816009316a8227dcd3df3923258fb9a660..ee8bcf9db370a143edae981e9d1641d7dd651c5e 100644 (file)
@@ -1,7 +1,7 @@
 /*\r
     This file is a part of libcds - Concurrent Data Structures library\r
 \r
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016\r
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017\r
 \r
     Source code repo: http://github.com/khizmax/libcds/\r
     Download: http://sourceforge.net/projects/libcds/files/\r
 #   include <cds/urcu/general_buffered.h>\r
 #   include <cds/urcu/general_threaded.h>\r
 #   include <cds/urcu/signal_buffered.h>\r
-#   include <cds/urcu/signal_threaded.h>\r
+#endif\r
+\r
+#ifdef CDS_ENABLE_HPSTAT\r
+#   include <cds_test/stat_hp_out.h>\r
+#   include <cds_test/stat_dhp_out.h>\r
+#   include <iostream>\r
 #endif\r
 \r
 int main( int argc, char **argv )\r
@@ -49,8 +54,7 @@ int main( int argc, char **argv )
         // Read test config file\r
         cds_test::init_config( argc, argv );\r
 \r
-        // Get detail level for stress test\r
-        cds_test::stress_fixture::init_detail_level( argc, argv );\r
+        std::cout << "Hardware concurrency: " << std::thread::hardware_concurrency() << "\n";\r
 \r
         // Init Google test\r
         ::testing::InitGoogleTest( &argc, argv );\r
@@ -58,13 +62,15 @@ int main( int argc, char **argv )
         cds_test::config const& general_cfg = cds_test::stress_fixture::get_config( "General" );\r
 \r
         // Init SMR\r
-        cds::gc::HP hzpGC( general_cfg.get_size_t( "hazard_pointer_count", 16 ));\r
-        hzpGC.setScanType( general_cfg.get( "HZP_scan_strategy", "inplace" ) == "inplace" ? cds::gc::HP::scan_type::inplace : cds::gc::HP::scan_type::classic );\r
+        cds::gc::HP hzpGC( \r
+            general_cfg.get_size_t( "hazard_pointer_count", 16 ),\r
+            general_cfg.get_size_t( "hp_max_thread_count", 0 ),\r
+            general_cfg.get_size_t( "hp_retired_ptr_count", 0 ),\r
+            general_cfg.get( "hp_scan_strategy", "inplace" ) == "inplace" ? cds::gc::HP::scan_type::inplace : cds::gc::HP::scan_type::classic\r
+        );\r
 \r
         cds::gc::DHP dhpGC(\r
-            general_cfg.get_size_t( "dhp_liberate_threshold", 1024 ),\r
-            general_cfg.get_size_t( "dhp_init_guard_count", 16 ),\r
-            general_cfg.get_size_t( "dhp_epoch_count", 16 )\r
+            general_cfg.get_size_t( "dhp_init_guard_count", 16 )\r
         );\r
 \r
 #ifdef CDSUNIT_USE_URCU\r
@@ -83,9 +89,6 @@ int main( int argc, char **argv )
 #   ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED\r
         typedef cds::urcu::gc< cds::urcu::signal_buffered<> >    rcu_shb;\r
         rcu_shb   shbRCU( rcu_buffer_size, SIGUSR1 );\r
-\r
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> >    rcu_sht;\r
-        rcu_sht   shtRCU( rcu_buffer_size, SIGUSR2 );\r
 #   endif\r
 #endif // CDSUNIT_USE_URCU\r
 \r
@@ -95,6 +98,23 @@ int main( int argc, char **argv )
 \r
         cds::threading::Manager::detachThread();\r
     }\r
+\r
+#ifdef CDS_ENABLE_HPSTAT\r
+    {\r
+        cds::gc::HP::stat const& st = cds::gc::HP::postmortem_statistics();\r
+        EXPECT_EQ( st.guard_allocated, st.guard_freed );\r
+        EXPECT_EQ( st.retired_count, st.free_count );\r
+        std::cout << st;\r
+    }\r
+    {\r
+        cds::gc::DHP::stat const& st = cds::gc::DHP::postmortem_statistics();\r
+        EXPECT_EQ( st.guard_allocated, st.guard_freed );\r
+        EXPECT_EQ( st.retired_count, st.free_count );\r
+        std::cout << st;\r
+    }\r
+#endif\r
+\r
     cds::Terminate();\r
+\r
     return result;\r
 }\r