X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=test%2Funit%2Fqueue%2Ffcqueue.cpp;h=03e7e50ffaad4e9ce82b35ec80ab239b23434d78;hb=ebb3f98ee6f7304182b78cf8b3548eae052d22c7;hp=432fb6ce89a6fb6a0e8cdb608f82c9b59f3f28da;hpb=5784cdf5f0194b414836bb54de6b85a1f86a6a1a;p=libcds.git diff --git a/test/unit/queue/fcqueue.cpp b/test/unit/queue/fcqueue.cpp index 432fb6ce..03e7e50f 100644 --- a/test/unit/queue/fcqueue.cpp +++ b/test/unit/queue/fcqueue.cpp @@ -32,9 +32,49 @@ #include #include +#include +#include namespace { + template + struct HeavyValue { + static std::vector pop_buff; + int value; + size_t buffer_size; + + explicit HeavyValue(int new_value = 0, size_t new_bufer_size = DefaultSize) + : value(new_value), + buffer_size(new_bufer_size) + + { + if( buffer_size != pop_buff.size() ){ + pop_buff.resize(buffer_size); + } + }; + HeavyValue(const HeavyValue &other) + : value(other.value), + buffer_size(other.buffer_size) + { + working(other); + } + void operator=(const int& new_value) + { + value = new_value; + } + bool operator==(const int new_value) const + { + return value == new_value; + } + void working(const HeavyValue &other) { + for (size_t i = 0; i < buffer_size; ++i) + pop_buff[i] = static_cast(std::sqrt(other.pop_buff[i])); + } + }; + + template + std::vector HeavyValue< DefaultSize >::pop_buff = {}; + class FCQueue: public ::testing::Test { protected: @@ -166,6 +206,67 @@ namespace { test( q ); } + TEST_F( FCQueue, std_deque_heavy_value ) + { + typedef HeavyValue<> ValueType; + typedef cds::container::FCQueue queue_type; + + queue_type q; + test( q ); + } + + TEST_F( FCQueue, std_empty_wait_strategy_heavy_value ) + { + typedef HeavyValue<> ValueType; + typedef cds::container::FCQueue>, + cds::container::fcqueue::make_traits< + cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::empty > + >::type + > queue_type; + + queue_type q; + test( q ); + } + + TEST_F( FCQueue, std_single_mutex_single_condvar_heavy_value ) + { + typedef HeavyValue<> ValueType; + typedef cds::container::FCQueue>, + cds::container::fcqueue::make_traits< + cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<> > + >::type + > queue_type; + + queue_type q; + test( q ); + } + + TEST_F( FCQueue, std_single_mutex_multi_condvar_heavy_value ) + { + typedef HeavyValue<> ValueType; + typedef cds::container::FCQueue>, + cds::container::fcqueue::make_traits< + cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<> > + >::type + > queue_type; + + queue_type q; + test( q ); + } + + TEST_F( FCQueue, std_multi_mutex_multi_condvar_heavy_value ) + { + typedef HeavyValue<> ValueType; + typedef cds::container::FCQueue>, + cds::container::fcqueue::make_traits< + cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<> > + >::type + > queue_type; + + queue_type q; + test( q ); + } + TEST_F( FCQueue, std_single_mutex_single_condvar ) { typedef cds::container::FCQueue>,