Added wait strategies to flat combining technique
[libcds.git] / test / unit / queue / fcqueue.cpp
index 7681ddeb6946bd0c5531e999e32ba41160cdae4f..99f7b0c32b65a3c6c3e3048670ff51444989f22c 100644 (file)
@@ -154,6 +154,30 @@ namespace {
         test_string( q );
     }
 
+    TEST_F( FCQueue, std_empty_wait_strategy )
+    {
+        typedef cds::container::FCQueue<int, std::queue< int, std::deque<int>>,
+            cds::container::fcqueue::make_traits<
+                cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::empty >
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( FCQueue, std_single_mutex_single_condvar )
+    {
+        typedef cds::container::FCQueue<int, std::queue< int, std::deque<int>>,
+            cds::container::fcqueue::make_traits<
+                cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<>>
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
     TEST_F( FCQueue, std_deque_elimination )
     {
         typedef cds::container::FCQueue<int, std::queue< int, std::deque<int>>,
@@ -166,6 +190,19 @@ namespace {
         test( q );
     }
 
+    TEST_F( FCQueue, std_deque_elimination_single_mutex_multi_condvar )
+    {
+        typedef cds::container::FCQueue<int, std::queue< int, std::deque<int>>,
+            cds::container::fcqueue::make_traits<
+                cds::opt::enable_elimination< true >
+                , cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<2>>
+            >::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>>,
@@ -178,6 +215,19 @@ namespace {
         test_string( q );
     }
 
+    TEST_F( FCQueue, std_deque_elimination_move_multi_mutex_multi_condvar )
+    {
+        typedef cds::container::FCQueue<std::string, std::queue< std::string, std::deque<std::string>>,
+            cds::container::fcqueue::make_traits<
+                cds::opt::enable_elimination< true >
+                , cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<>>
+            >::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>>,
@@ -206,6 +256,30 @@ namespace {
         test_string( q );
     }
 
+    TEST_F( FCQueue, std_list_empty_wait_strategy )
+    {
+        typedef cds::container::FCQueue<int, std::queue< int, std::list<int> >,
+            cds::container::fcqueue::make_traits<
+                cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::empty >
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( FCQueue, std_list_single_mutex_single_condvar )
+    {
+        typedef cds::container::FCQueue<int, std::queue< int, std::list<int> >,
+            cds::container::fcqueue::make_traits<
+                cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<5>>
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
     TEST_F( FCQueue, std_list_elimination )
     {
         typedef cds::container::FCQueue<int, std::queue< int, std::list<int> >,
@@ -218,6 +292,19 @@ namespace {
         test( q );
     }
 
+    TEST_F( FCQueue, std_list_elimination_multi_mutex_multi_condvar )
+    {
+        typedef cds::container::FCQueue<int, std::queue< int, std::list<int> >,
+            cds::container::fcqueue::make_traits<
+                cds::opt::enable_elimination< true >
+                ,cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<5>>
+            >::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> >,