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 );
+ ASSERT_TRUE( stack.empty());
+ ASSERT_EQ( stack.size(), 0u );
+
+ ASSERT_TRUE( stack.push( 1 ));
+ ASSERT_TRUE( !stack.empty());
+ ASSERT_EQ( stack.size(), 1u );
+ ASSERT_TRUE( stack.push( 2 ));
+ ASSERT_TRUE( !stack.empty());
+ ASSERT_EQ( stack.size(), 2u );
+ ASSERT_TRUE( stack.push( 3 ));
+ ASSERT_TRUE( !stack.empty());
+ ASSERT_EQ( stack.size(), 3u );
+
+ ASSERT_TRUE( stack.pop( v ));
+ EXPECT_EQ( v, value_type( 3 ));
+ ASSERT_TRUE( !stack.empty());
+ ASSERT_EQ( stack.size(), 2u );
+ ASSERT_TRUE( stack.pop( v ));
+ EXPECT_EQ( v, value_type( 2 ));
+ ASSERT_TRUE( !stack.empty());
+ ASSERT_EQ( stack.size(), 1u );
+ ASSERT_TRUE( stack.pop( v ));
+ EXPECT_EQ( v, value_type( 1 ));
+ ASSERT_TRUE( stack.empty());
+ ASSERT_EQ( stack.size(), 0u );
v = 1000;
- ASSERT_TRUE( !stack.pop( v ) );
- EXPECT_EQ( v, 1000 );
- ASSERT_TRUE( stack.empty() );
- ASSERT_EQ( stack.size(), 0 );
+ ASSERT_TRUE( !stack.pop( v ));
+ EXPECT_EQ( v, value_type( 1000 ));
+ ASSERT_TRUE( stack.empty());
+ ASSERT_EQ( stack.size(), 0u );
- ASSERT_TRUE( stack.push( 10 ) );
- ASSERT_TRUE( stack.push( 20 ) );
- ASSERT_TRUE( stack.push( 30 ) );
- ASSERT_TRUE( !stack.empty() );
- ASSERT_EQ( stack.size(), 3 );
+ ASSERT_TRUE( stack.push( 10 ));
+ ASSERT_TRUE( stack.push( 20 ));
+ ASSERT_TRUE( stack.push( 30 ));
+ ASSERT_TRUE( !stack.empty());
+ ASSERT_EQ( stack.size(), 3u );
- while ( stack.pop( v ) );
+ while ( stack.pop( v ));
- ASSERT_TRUE( stack.empty() );
- ASSERT_EQ( stack.size(), 0 );
+ ASSERT_TRUE( stack.empty());
+ ASSERT_EQ( stack.size(), 0u );
}
};
test<stack_type>();
}
+ TEST_F( FCStack, deque_empty_wait_strategy )
+ {
+ struct stack_traits: public
+ cds::container::fcstack::make_traits <
+ cds::opt::wait_strategy<cds::algo::flat_combining::wait_strategy::empty>
+ > ::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, deque_single_mutex_single_condvar )
+ {
+ struct stack_traits: public
+ cds::container::fcstack::make_traits <
+ cds::opt::wait_strategy<cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<>>
+ > ::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, deque_single_mutex_multi_condvar )
+ {
+ struct stack_traits: public
+ cds::container::fcstack::make_traits <
+ cds::opt::wait_strategy<cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<>>
+ > ::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, deque_multi_mutex_multi_condvar )
+ {
+ struct stack_traits: public
+ cds::container::fcstack::make_traits <
+ cds::opt::wait_strategy<cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<>>
+ > ::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, deque_single_mutex_single_condvar_2ms )
+ {
+ struct stack_traits: public
+ cds::container::fcstack::make_traits <
+ cds::opt::wait_strategy<cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<2>>
+ > ::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, deque_single_mutex_multi_condvar_2ms )
+ {
+ struct stack_traits: public
+ cds::container::fcstack::make_traits <
+ cds::opt::wait_strategy<cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<2>>
+ > ::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, deque_multi_mutex_multi_condvar_3ms )
+ {
+ struct stack_traits: public
+ cds::container::fcstack::make_traits <
+ cds::opt::wait_strategy<cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<3>>
+ > ::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, deque_elimination )
{
struct stack_traits : public
test<stack_type>();
}
+ TEST_F( FCStack, vector_empty_wait_strategy )
+ {
+ typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::vector<unsigned int>>,
+ cds::container::fcstack::make_traits<
+ cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::empty >
+ >::type
+ > stack_type;
+ test<stack_type>();
+ }
+
+ TEST_F( FCStack, vector_multi_mutex_multi_condvar )
+ {
+ typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::vector<unsigned int>>,
+ cds::container::fcstack::make_traits<
+ cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<>>
+ >::type
+ > stack_type;
+ test<stack_type>();
+ }
+
+ TEST_F( FCStack, vector_single_mutex_multi_condvar )
+ {
+ typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::vector<unsigned int>>,
+ cds::container::fcstack::make_traits<
+ cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<>>
+ >::type
+ > stack_type;
+ test<stack_type>();
+ }
+
+ TEST_F( FCStack, vector_single_mutex_single_condvar )
+ {
+ typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::vector<unsigned int>>,
+ cds::container::fcstack::make_traits<
+ cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<>>
+ >::type
+ > stack_type;
+ test<stack_type>();
+ }
+
TEST_F( FCStack, vector_elimination )
{
typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::vector<unsigned int>>,
test<stack_type>();
}
+ TEST_F( FCStack, list_empty_wait_strategy )
+ {
+ typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::list<unsigned int>>,
+ cds::container::fcstack::make_traits<
+ cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::empty >
+ >::type
+ > stack_type;
+ test<stack_type>();
+ }
+
+ TEST_F( FCStack, list_single_mutex_single_condvar )
+ {
+ typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::list<unsigned int>>,
+ cds::container::fcstack::make_traits<
+ cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<>>
+ >::type
+ > stack_type;
+ test<stack_type>();
+ }
+
+ TEST_F( FCStack, list_single_mutex_multi_condvar )
+ {
+ typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::list<unsigned int>>,
+ cds::container::fcstack::make_traits<
+ cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<>>
+ >::type
+ > stack_type;
+ test<stack_type>();
+ }
+
+ TEST_F( FCStack, list_multi_mutex_multi_condvar )
+ {
+ typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::list<unsigned int>>,
+ cds::container::fcstack::make_traits<
+ cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<>>
+ >::type
+ > 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 >
+ cds::opt::enable_elimination< true >
+ , cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<2>>
>::type
> stack_type;
test<stack_type>();