rwqueue.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // Copyright (c) 2006-2018 Maxim Khizhinsky
  2. //
  3. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  4. // file LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. #include "test_generic_queue.h"
  6. #include <cds/container/rwqueue.h>
  7. namespace {
  8. namespace cc = cds::container;
  9. class RWQueue: public cds_test::generic_queue
  10. {};
  11. TEST_F( RWQueue, defaulted )
  12. {
  13. typedef cds::container::RWQueue< int > test_queue;
  14. test_queue q;
  15. test(q);
  16. }
  17. TEST_F( RWQueue, item_counting )
  18. {
  19. typedef cds::container::RWQueue< int,
  20. typename cds::container::rwqueue::make_traits <
  21. cds::opt::item_counter< cds::atomicity::item_counter >
  22. > ::type
  23. > test_queue;
  24. test_queue q;
  25. test( q );
  26. }
  27. TEST_F( RWQueue, mutex )
  28. {
  29. struct traits : public cds::container::rwqueue::traits
  30. {
  31. typedef std::mutex lock_type;
  32. };
  33. typedef cds::container::RWQueue< int, traits > test_queue;
  34. test_queue q;
  35. test( q );
  36. }
  37. TEST_F( RWQueue, padding )
  38. {
  39. struct traits : public cds::container::rwqueue::traits
  40. {
  41. typedef cds::atomicity::item_counter item_counter;
  42. enum { padding = 64 };
  43. };
  44. typedef cds::container::RWQueue< int, traits > test_queue;
  45. test_queue q;
  46. test( q );
  47. }
  48. TEST_F( RWQueue, move )
  49. {
  50. typedef cds::container::RWQueue< std::string > test_queue;
  51. test_queue q;
  52. test_string( q );
  53. }
  54. TEST_F( RWQueue, move_item_counting )
  55. {
  56. struct traits : public cc::rwqueue::traits
  57. {
  58. typedef cds::atomicity::item_counter item_counter;
  59. };
  60. typedef cds::container::RWQueue< std::string, traits > test_queue;
  61. test_queue q;
  62. test_string( q );
  63. }
  64. } // namespace