OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <gtest/gtest.h>
+#include <cds_test/ext_gtest.h>
#include <cds/container/fcqueue.h>
#include <test/include/cds_test/fc_hevy_value.h>
typedef typename Queue::value_type value_type;
value_type it;
- const size_t nSize = 100;
+ const int nSize = 100;
ASSERT_TRUE( q.empty());
ASSERT_EQ( q.size(), 0u );
// enqueue/dequeue
- for ( size_t i = 0; i < nSize; ++i ) {
- ASSERT_TRUE( q.enqueue( static_cast<value_type>(i)));
- ASSERT_EQ( q.size(), i + 1 );
+ for ( int i = 0; i < nSize; ++i ) {
+ ASSERT_TRUE( q.enqueue( value_type(i)));
+ ASSERT_EQ( q.size(), static_cast<size_t>(i + 1));
}
ASSERT_FALSE( q.empty());
- ASSERT_EQ( q.size(), nSize );
+ ASSERT_EQ( q.size(), static_cast<size_t>( nSize ));
- for ( size_t i = 0; i < nSize; ++i ) {
- it = -1;
+ for ( int i = 0; i < nSize; ++i ) {
+ it = value_type( -1 );
ASSERT_TRUE( q.dequeue( it ));
- ASSERT_EQ( it, static_cast<value_type>( i ));
- ASSERT_EQ( q.size(), nSize - i - 1 );
+ ASSERT_EQ( it, value_type( i ));
+ ASSERT_EQ( q.size(), static_cast<size_t>( nSize - i - 1 ));
}
ASSERT_TRUE( q.empty());
ASSERT_EQ( q.size(), 0u );
// push/pop
- for ( size_t i = 0; i < nSize; ++i ) {
- ASSERT_TRUE( q.push( static_cast<value_type>(i)));
- ASSERT_EQ( q.size(), i + 1 );
+ for ( int i = 0; i < nSize; ++i ) {
+ ASSERT_TRUE( q.push( value_type(i)));
+ ASSERT_EQ( q.size(), static_cast<size_t>( i + 1 ));
}
ASSERT_FALSE( q.empty());
- ASSERT_EQ( q.size(), nSize );
+ ASSERT_EQ( q.size(), static_cast<size_t>( nSize ));
- for ( size_t i = 0; i < nSize; ++i ) {
- it = -1;
+ for ( int i = 0; i < nSize; ++i ) {
+ it = value_type( -1 );
ASSERT_TRUE( q.pop( it ));
- ASSERT_EQ( it, static_cast<value_type>( i ));
- ASSERT_EQ( q.size(), nSize - i - 1 );
+ ASSERT_EQ( it, value_type( i ));
+ ASSERT_EQ( q.size(), static_cast<size_t>( nSize - i - 1 ));
}
ASSERT_TRUE( q.empty());
ASSERT_EQ( q.size(), 0u );
// clear
- for ( size_t i = 0; i < nSize; ++i ) {
- ASSERT_TRUE( q.push( static_cast<value_type>( i )));
+ for ( int i = 0; i < nSize; ++i ) {
+ ASSERT_TRUE( q.push( value_type( i )));
}
ASSERT_FALSE( q.empty());
- ASSERT_EQ( q.size(), nSize );
+ ASSERT_EQ( q.size(), static_cast<size_t>( nSize ));
q.clear();
ASSERT_TRUE( q.empty());
ASSERT_EQ( q.size(), 0u );
// pop from empty queue
- it = nSize * 2;
+ it = value_type( nSize * 2 );
ASSERT_FALSE( q.pop( it ));
ASSERT_EQ( it, static_cast<value_type>( nSize * 2 ));
ASSERT_TRUE( q.empty());
ASSERT_TRUE( q.empty());
ASSERT_EQ( q.size(), 0u );
}
+
+ template <class Queue>
+ void test_heavy( Queue& q )
+ {
+ typedef typename Queue::value_type value_type;
+ value_type it;
+
+ const int nSize = 100;
+
+ ASSERT_TRUE( q.empty());
+ ASSERT_EQ( q.size(), 0u );
+
+ // enqueue/dequeue
+ for ( int i = 0; i < nSize; ++i ) {
+ ASSERT_TRUE( q.enqueue( value_type( i )));
+ ASSERT_EQ( q.size(), static_cast<size_t>( i + 1 ));
+ }
+ ASSERT_FALSE( q.empty());
+ ASSERT_EQ( q.size(), static_cast<size_t>( nSize ));
+
+ for ( int i = 0; i < nSize; ++i ) {
+ it.value = -1;
+ ASSERT_TRUE( q.dequeue( it ));
+ ASSERT_EQ( it.value, i );
+ ASSERT_EQ( q.size(), static_cast<size_t>( nSize - i - 1 ));
+ }
+ ASSERT_TRUE( q.empty());
+ ASSERT_EQ( q.size(), 0u );
+
+ // push/pop
+ for ( int i = 0; i < nSize; ++i ) {
+ ASSERT_TRUE( q.push( value_type( i )));
+ ASSERT_EQ( q.size(), static_cast<size_t>( i + 1 ));
+ }
+ ASSERT_FALSE( q.empty());
+ ASSERT_EQ( q.size(), static_cast<size_t>( nSize ));
+
+ for ( int i = 0; i < nSize; ++i ) {
+ it.value = -1;
+ ASSERT_TRUE( q.pop( it ));
+ ASSERT_EQ( it.value, i );
+ ASSERT_EQ( q.size(), static_cast<size_t>( nSize - i - 1 ));
+ }
+ ASSERT_TRUE( q.empty());
+ ASSERT_EQ( q.size(), 0u );
+
+ // clear
+ for ( int i = 0; i < nSize; ++i ) {
+ ASSERT_TRUE( q.push( value_type( i )));
+ }
+ ASSERT_FALSE( q.empty());
+ ASSERT_EQ( q.size(), static_cast<size_t>( nSize ));
+
+ q.clear();
+ ASSERT_TRUE( q.empty());
+ ASSERT_EQ( q.size(), 0u );
+
+ // pop from empty queue
+ it = value_type( nSize * 2 );
+ ASSERT_FALSE( q.pop( it ));
+ ASSERT_EQ( it.value, nSize * 2 );
+ ASSERT_TRUE( q.empty());
+ ASSERT_EQ( q.size(), 0u );
+
+ ASSERT_FALSE( q.dequeue( it ));
+ ASSERT_EQ( it.value, nSize * 2 );
+ ASSERT_TRUE( q.empty());
+ ASSERT_EQ( q.size(), 0u );
+ }
+
};
TEST_F( FCQueue, std_deque )
typedef cds::container::FCQueue<ValueType> queue_type;
queue_type q;
- test( q );
+ test_heavy( q );
}
TEST_F( FCQueue, std_empty_wait_strategy_heavy_value )
> queue_type;
queue_type q;
- test( q );
+ test_heavy( q );
}
TEST_F( FCQueue, std_single_mutex_single_condvar_heavy_value )
> queue_type;
queue_type q;
- test( q );
+ test_heavy( q );
}
TEST_F( FCQueue, std_single_mutex_multi_condvar_heavy_value )
> queue_type;
queue_type q;
- test( q );
+ test_heavy( q );
}
TEST_F( FCQueue, std_multi_mutex_multi_condvar_heavy_value )
> queue_type;
queue_type q;
- test( q );
+ test_heavy( q );
}
TEST_F( FCQueue, std_single_mutex_single_condvar )