3 #include "cppunit/cppunit_proxy.h"
4 #include <cds/container/fcstack.h>
11 class TestFCStack: public CppUnitMini::TestCase
13 template <class Stack>
20 template <class Stack>
21 void test_with( Stack& stack)
23 typedef typename Stack::value_type value_type;
26 CPPUNIT_ASSERT( stack.empty() );
27 CPPUNIT_ASSERT( stack.size() == 0 );
29 CPPUNIT_ASSERT( stack.push(1));
30 CPPUNIT_ASSERT( !stack.empty() );
31 CPPUNIT_ASSERT( stack.size() == 1 );
32 CPPUNIT_ASSERT( stack.push(2));
33 CPPUNIT_ASSERT( !stack.empty() );
34 CPPUNIT_ASSERT( stack.size() == 2 );
35 CPPUNIT_ASSERT( stack.push(3));
36 CPPUNIT_ASSERT( !stack.empty() );
37 CPPUNIT_ASSERT( stack.size() == 3 );
39 CPPUNIT_ASSERT( stack.pop(v) );
40 CPPUNIT_ASSERT( v == 3 );
41 CPPUNIT_ASSERT( !stack.empty() );
42 CPPUNIT_ASSERT( stack.size() == 2 );
43 CPPUNIT_ASSERT( stack.pop(v) );
44 CPPUNIT_ASSERT( v == 2 );
45 CPPUNIT_ASSERT( !stack.empty() );
46 CPPUNIT_ASSERT( stack.size() == 1 );
47 CPPUNIT_ASSERT( stack.pop(v) );
48 CPPUNIT_ASSERT( v == 1 );
49 CPPUNIT_ASSERT( stack.empty() );
50 CPPUNIT_ASSERT( stack.size() == 0 );
52 CPPUNIT_ASSERT( !stack.pop(v) );
53 CPPUNIT_ASSERT( v == 1000 );
54 CPPUNIT_ASSERT( stack.empty() );
55 CPPUNIT_ASSERT( stack.size() == 0 );
57 CPPUNIT_ASSERT( stack.push(10));
58 CPPUNIT_ASSERT( stack.push(20));
59 CPPUNIT_ASSERT( stack.push(30));
60 CPPUNIT_ASSERT( !stack.empty());
61 CPPUNIT_ASSERT( stack.size() == 3 );
63 while ( stack.pop(v) );
65 CPPUNIT_ASSERT( stack.empty() );
66 CPPUNIT_ASSERT( stack.size() == 0 );
69 void FCStack_default();
71 void FCStack_deque_elimination();
72 void FCStack_vector();
73 void FCStack_vector_elimination();
75 void FCStack_list_elimination();
77 CPPUNIT_TEST_SUITE(TestFCStack);
78 CPPUNIT_TEST( FCStack_default )
79 CPPUNIT_TEST( FCStack_deque )
80 CPPUNIT_TEST( FCStack_deque_elimination )
81 CPPUNIT_TEST( FCStack_vector )
82 CPPUNIT_TEST( FCStack_vector_elimination )
83 CPPUNIT_TEST( FCStack_list )
84 CPPUNIT_TEST( FCStack_list_elimination )
85 CPPUNIT_TEST_SUITE_END();
88 void TestFCStack::FCStack_default()
90 typedef cds::container::FCStack< unsigned int > stack_type;
94 void TestFCStack::FCStack_deque()
96 typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::deque<unsigned int> > > stack_type;
100 void TestFCStack::FCStack_deque_elimination()
102 struct stack_traits : public
103 cds::container::fcstack::make_traits <
104 cds::opt::enable_elimination < true >
107 typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::deque<unsigned int> >, stack_traits > stack_type;
111 void TestFCStack::FCStack_vector()
113 typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::vector<unsigned int> > > stack_type;
117 void TestFCStack::FCStack_vector_elimination()
119 typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::vector<unsigned int> >,
120 cds::container::fcstack::make_traits<
121 cds::opt::enable_elimination< true >
127 void TestFCStack::FCStack_list()
129 typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::list<unsigned int> > > stack_type;
133 void TestFCStack::FCStack_list_elimination()
135 typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::list<unsigned int> >,
136 cds::container::fcstack::make_traits<
137 cds::opt::enable_elimination< true >
143 CPPUNIT_TEST_SUITE_REGISTRATION(stack::TestFCStack);