msqueue_dhp.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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/gc/dhp.h>
  7. #include <cds/container/msqueue.h>
  8. namespace {
  9. namespace cc = cds::container;
  10. typedef cds::gc::DHP gc_type;
  11. class MSQueue_DHP : public cds_test::generic_queue
  12. {
  13. protected:
  14. void SetUp()
  15. {
  16. typedef cc::MSQueue< gc_type, int > queue_type;
  17. cds::gc::dhp::smr::construct( queue_type::c_nHazardPtrCount );
  18. cds::threading::Manager::attachThread();
  19. }
  20. void TearDown()
  21. {
  22. cds::threading::Manager::detachThread();
  23. cds::gc::dhp::smr::destruct();
  24. }
  25. };
  26. TEST_F( MSQueue_DHP, defaulted )
  27. {
  28. typedef cds::container::MSQueue< gc_type, int > test_queue;
  29. test_queue q;
  30. test(q);
  31. }
  32. TEST_F( MSQueue_DHP, item_counting )
  33. {
  34. typedef cds::container::MSQueue < gc_type, int,
  35. typename cds::container::msqueue::make_traits <
  36. cds::opt::item_counter < cds::atomicity::item_counter >
  37. > ::type
  38. > test_queue;
  39. test_queue q;
  40. test( q );
  41. }
  42. TEST_F( MSQueue_DHP, relaxed )
  43. {
  44. typedef cds::container::MSQueue < gc_type, int,
  45. typename cds::container::msqueue::make_traits <
  46. cds::opt::item_counter< cds::atomicity::item_counter >
  47. , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
  48. > ::type
  49. > test_queue;
  50. test_queue q;
  51. test( q );
  52. }
  53. TEST_F( MSQueue_DHP, aligned )
  54. {
  55. typedef cds::container::MSQueue < gc_type, int,
  56. typename cds::container::msqueue::make_traits <
  57. cds::opt::memory_model< cds::opt::v::relaxed_ordering>
  58. , cds::opt::padding < 32 >
  59. >::type
  60. > test_queue;
  61. test_queue q;
  62. test( q );
  63. }
  64. TEST_F( MSQueue_DHP, seq_cst )
  65. {
  66. struct traits : public cc::msqueue::traits
  67. {
  68. typedef cds::opt::v::sequential_consistent memory_model;
  69. typedef cds::atomicity::item_counter item_counter;
  70. enum { padding = 64 };
  71. };
  72. typedef cds::container::MSQueue < gc_type, int, traits > test_queue;
  73. test_queue q;
  74. test( q );
  75. }
  76. TEST_F( MSQueue_DHP, move )
  77. {
  78. typedef cds::container::MSQueue< gc_type, std::string > test_queue;
  79. test_queue q;
  80. test_string( q );
  81. }
  82. TEST_F( MSQueue_DHP, move_item_counting )
  83. {
  84. struct traits : public cc::msqueue::traits
  85. {
  86. typedef cds::atomicity::item_counter item_counter;
  87. };
  88. typedef cds::container::MSQueue< gc_type, std::string, traits > test_queue;
  89. test_queue q;
  90. test_string( q );
  91. }
  92. } // namespace