3 #include "cppunit/cppunit_proxy.h"
4 #include "cppunit/test_beans.h"
5 #include <cds/container/fcdeque.h>
6 #include <boost/container/deque.hpp>
10 class HdrFCDeque: public CppUnitMini::TestCase
12 template <class Deque>
13 void test_with( Deque& dq )
15 size_t const c_nSize = 100;
17 // push_front/pop_front
18 for ( int i = 0; i < static_cast<int>( c_nSize ); ++i )
19 CPPUNIT_CHECK( dq.push_front( i ) );
20 CPPUNIT_CHECK( dq.size() == c_nSize );
24 while ( !dq.empty() ) {
25 CPPUNIT_CHECK( dq.pop_front( val ) );
27 CPPUNIT_CHECK( static_cast<int>(c_nSize - nCount) == val );
29 CPPUNIT_CHECK( nCount == c_nSize );
32 for ( int i = 0; i < static_cast<int>( c_nSize ); ++i )
33 CPPUNIT_CHECK( dq.push_back( i ) );
34 CPPUNIT_CHECK( dq.size() == c_nSize );
37 while ( !dq.empty() ) {
38 CPPUNIT_CHECK( dq.pop_back( val ) );
40 CPPUNIT_CHECK( static_cast<int>(c_nSize - nCount) == val );
42 CPPUNIT_CHECK( nCount == c_nSize );
44 // push_back/pop_front
45 for ( int i = 0; i < static_cast<int>( c_nSize ); ++i )
46 CPPUNIT_CHECK( dq.push_back( i ) );
47 CPPUNIT_CHECK( dq.size() == c_nSize );
50 while ( !dq.empty() ) {
51 CPPUNIT_CHECK( dq.pop_front( val ) );
52 CPPUNIT_CHECK( static_cast<int>( nCount ) == val );
55 CPPUNIT_CHECK( nCount == c_nSize );
57 // push_front/pop_back
58 for ( int i = 0; i < static_cast<int>( c_nSize ); ++i )
59 CPPUNIT_CHECK( dq.push_front( i ) );
60 CPPUNIT_CHECK( dq.size() == c_nSize );
63 while ( !dq.empty() ) {
64 CPPUNIT_CHECK( dq.pop_back( val ) );
65 CPPUNIT_CHECK( static_cast<int>( nCount ) == val );
68 CPPUNIT_CHECK( nCount == c_nSize );
71 for ( int i = 0; i < static_cast<int>( c_nSize ); ++i )
72 CPPUNIT_CHECK( dq.push_front( i ) );
73 CPPUNIT_CHECK( dq.size() == c_nSize );
75 CPPUNIT_CHECK( !dq.empty() );
77 CPPUNIT_CHECK( dq.empty() );
80 template <class Deque>
89 typedef cds::container::FCDeque<int> deque_type;
93 void fcDeque_elimination()
95 typedef cds::container::FCDeque<int, std::deque<int>,
96 cds::container::fcdeque::make_traits<
97 cds::opt::enable_elimination< true >
105 typedef cds::container::FCDeque<int, std::deque<int>,
106 cds::container::fcdeque::make_traits<
107 cds::opt::stat< cds::container::fcdeque::stat<> >
115 struct deque_traits : public
116 cds::container::fcdeque::make_traits<
117 cds::opt::enable_elimination< true >
120 typedef std::mutex lock_type;
122 typedef cds::container::FCDeque<int, std::deque<int>, deque_traits > deque_type;
128 typedef cds::container::FCDeque<int, boost::container::deque<int> > deque_type;
132 void fcDeque_boost_elimination()
134 typedef cds::container::FCDeque<int, boost::container::deque<int>,
135 cds::container::fcdeque::make_traits<
136 cds::opt::enable_elimination< true >
142 void fcDeque_boost_stat()
144 typedef cds::container::FCDeque<int, boost::container::deque<int>,
145 cds::container::fcdeque::make_traits<
146 cds::opt::stat< cds::container::fcdeque::stat<> >
152 void fcDeque_boost_mutex()
154 typedef cds::container::FCDeque<int, boost::container::deque<int>,
155 cds::container::fcdeque::make_traits<
156 cds::opt::enable_elimination< true >
157 ,cds::opt::lock_type< std::mutex >
163 CPPUNIT_TEST_SUITE(HdrFCDeque)
164 CPPUNIT_TEST(fcDeque)
165 CPPUNIT_TEST(fcDeque_elimination)
166 CPPUNIT_TEST(fcDeque_stat)
167 CPPUNIT_TEST(fcDeque_mutex)
168 CPPUNIT_TEST(fcDeque_boost)
169 CPPUNIT_TEST(fcDeque_boost_elimination)
170 CPPUNIT_TEST(fcDeque_boost_stat)
171 CPPUNIT_TEST(fcDeque_boost_mutex)
172 CPPUNIT_TEST_SUITE_END()
177 CPPUNIT_TEST_SUITE_REGISTRATION(deque::HdrFCDeque);