From: Marsel Galimullin Date: Sat, 27 Aug 2016 23:16:55 +0000 (+0300) Subject: added unit tests fcqueue with heavyvalue X-Git-Tag: v2.3.0~210^2~7 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=ebb3f98ee6f7304182b78cf8b3548eae052d22c7;p=libcds.git added unit tests fcqueue with heavyvalue --- diff --git a/.gitignore b/.gitignore index 93cba786..757121b5 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,5 @@ /build/Makefile /build/build.sh /build/sample +/.cproject +/.settings/ 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>,