issue#11: tests/test-hdr: changed .h file guard prefix to CDSTEST_xxx
[libcds.git] / tests / test-hdr / queue / hdr_fcqueue.h
1 //$$CDS-header$$
2
3 #ifndef CDSTEST_HDR_FCQUEUE_H
4 #define CDSTEST_HDR_FCQUEUE_H
5
6 #include "cppunit/cppunit_proxy.h"
7 #include <cds/details/defs.h>
8
9 namespace queue {
10
11     //
12     // Test queue operation in single thread mode
13     //
14     class HdrFCQueue: public CppUnitMini::TestCase
15     {
16     protected:
17         template <class Queue>
18         void testNoItemCounter()
19         {
20             Queue   q;
21             test_with( q );
22             test_emplace( q );
23         }
24
25         template <class Queue>
26         void test_with( Queue& q )
27         {
28             int     it;
29             int     nPrev;
30
31             for ( size_t i = 0; i < 3; ++i ) {
32                 CPPUNIT_ASSERT( q.empty() );
33 #ifndef _DEBUG
34                 CPPUNIT_ASSERT( q.size() == 0 );
35 #endif
36                 CPPUNIT_ASSERT( q.enqueue( 1 ) );
37                 CPPUNIT_ASSERT( !q.empty() );
38                 CPPUNIT_ASSERT( q.push( 10 ) );
39                 CPPUNIT_ASSERT( !q.empty() );
40 #ifndef _DEBUG
41                 CPPUNIT_ASSERT( q.size() == 0 )     ;   // no queue's item counter!
42 #endif
43
44                 it = -1;
45                 CPPUNIT_ASSERT( q.pop( it ) );
46                 CPPUNIT_ASSERT( it == 1 );
47                 CPPUNIT_ASSERT( !q.empty() );
48                 CPPUNIT_ASSERT( q.dequeue( it ) );
49                 CPPUNIT_ASSERT( it == 10 );
50 #ifndef _DEBUG
51                 CPPUNIT_ASSERT( q.size() == 0 );
52 #endif
53                 CPPUNIT_ASSERT( q.empty() );
54                 it += 2009;
55                 nPrev = it;
56                 CPPUNIT_ASSERT( !q.dequeue( it ) );
57                 CPPUNIT_ASSERT( it == nPrev )       ;   // it must not be changed!
58             }
59         }
60
61         template <class Queue>
62         void test_emplace( Queue& q )
63         {
64             int     it;
65             for ( size_t i = 0; i < 3; ++i ) {
66                 CPPUNIT_ASSERT( q.emplace( static_cast<int>( i * 42 )) );
67                 CPPUNIT_ASSERT( !q.empty() );
68                 it = -1;
69                 CPPUNIT_ASSERT( q.pop( it ));
70                 CPPUNIT_ASSERT( it == static_cast<int>( i * 42 ));
71                 CPPUNIT_ASSERT( q.empty() );
72             }
73         }
74
75         template <class Queue>
76         void testWithItemCounter()
77         {
78             Queue   q;
79             test_ic_with( q );
80             test_emplace_ic( q );
81         }
82
83         template <class Queue>
84         void testFCQueue()
85         {
86             Queue   q;
87             test_ic_with( q );
88         }
89
90         template <class Queue>
91         void test_ic_with( Queue& q )
92         {
93             int     it;
94             int     nPrev;
95
96             for ( size_t i = 0; i < 3; ++i ) {
97                 CPPUNIT_ASSERT( q.empty() );
98                 CPPUNIT_ASSERT( q.size() == 0 );
99                 CPPUNIT_ASSERT( q.enqueue( 1 ) );
100                 CPPUNIT_ASSERT( q.size() == 1 );
101                 CPPUNIT_ASSERT( !q.empty() );
102                 CPPUNIT_ASSERT( q.push( 10 ) );
103                 CPPUNIT_ASSERT( !q.empty() );
104                 CPPUNIT_ASSERT( q.size() == 2 );
105
106                 it = -1;
107                 CPPUNIT_ASSERT( q.pop( it ) );
108                 CPPUNIT_ASSERT( it == 1 );
109                 CPPUNIT_ASSERT( !q.empty() );
110                 CPPUNIT_ASSERT( q.size() == 1 );
111                 CPPUNIT_ASSERT( q.dequeue( it ) );
112                 CPPUNIT_ASSERT( it == 10 );
113                 CPPUNIT_ASSERT( q.size() == 0 );
114                 CPPUNIT_ASSERT( q.empty() );
115                 CPPUNIT_ASSERT( q.size() == 0 );
116                 it += 2009;
117                 nPrev = it;
118                 CPPUNIT_ASSERT( !q.dequeue( it ) );
119                 CPPUNIT_ASSERT( it == nPrev )       ;   // it must not be changed!
120
121                 CPPUNIT_ASSERT( q.empty() );
122                 CPPUNIT_ASSERT( q.size() == 0 );
123             }
124         }
125
126         template <class Queue>
127         void test_emplace_ic( Queue& q )
128         {
129             int     it = 0;
130             for ( size_t i = 0; i < 3; ++i ) {
131                 CPPUNIT_ASSERT( q.emplace( (int) i * 10 ) );
132                 CPPUNIT_ASSERT( !q.empty() );
133                 CPPUNIT_ASSERT( q.size() == 1 );
134                 CPPUNIT_ASSERT( q.pop( it ));
135                 CPPUNIT_ASSERT( it == (int) i * 10 );
136                 CPPUNIT_ASSERT( q.empty() );
137                 CPPUNIT_ASSERT( q.size() == 0 );
138             }
139         }
140
141     public:
142         void FCQueue_deque();
143         void FCQueue_deque_elimination();
144         void FCQueue_deque_mutex();
145         void FCQueue_deque_stat();
146         void FCQueue_list();
147         void FCQueue_list_elimination();
148         void FCQueue_list_mutex();
149         void FCQueue_list_stat();
150
151         CPPUNIT_TEST_SUITE(HdrFCQueue)
152             CPPUNIT_TEST(FCQueue_deque)
153             CPPUNIT_TEST(FCQueue_deque_elimination)
154             CPPUNIT_TEST(FCQueue_deque_mutex)
155             CPPUNIT_TEST(FCQueue_deque_stat)
156             CPPUNIT_TEST(FCQueue_list)
157             CPPUNIT_TEST(FCQueue_list_elimination)
158             CPPUNIT_TEST(FCQueue_list_mutex)
159             CPPUNIT_TEST(FCQueue_list_stat)
160         CPPUNIT_TEST_SUITE_END();
161
162     };
163 } // namespace queue
164
165 #endif // #ifndef CDSTEST_HDR_FCQUEUE_H