d_ary_heap_test.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. /*=============================================================================
  2. Copyright (c) 2010 Tim Blechmann
  3. Use, modification and distribution is subject to the Boost Software
  4. License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  5. http://www.boost.org/LICENSE_1_0.txt)
  6. =============================================================================*/
  7. #define BOOST_TEST_MAIN
  8. #ifdef BOOST_HEAP_INCLUDE_TESTS
  9. #include <boost/test/included/unit_test.hpp>
  10. #else
  11. #include <boost/test/unit_test.hpp>
  12. #endif
  13. #include <algorithm>
  14. #include <boost/heap/d_ary_heap.hpp>
  15. #include "common_heap_tests.hpp"
  16. #include "stable_heap_tests.hpp"
  17. #include "mutable_heap_tests.hpp"
  18. #include "merge_heap_tests.hpp"
  19. template <int D, bool stable>
  20. void run_d_ary_heap_test(void)
  21. {
  22. typedef boost::heap::d_ary_heap<int, boost::heap::arity<D>,
  23. boost::heap::stable<stable>,
  24. boost::heap::compare<std::less<int> >,
  25. boost::heap::allocator<std::allocator<int> > > pri_queue;
  26. BOOST_CONCEPT_ASSERT((boost::heap::PriorityQueue<pri_queue>));
  27. run_concept_check<pri_queue>();
  28. run_common_heap_tests<pri_queue>();
  29. run_iterator_heap_tests<pri_queue>();
  30. run_copyable_heap_tests<pri_queue>();
  31. run_moveable_heap_tests<pri_queue>();
  32. run_reserve_heap_tests<pri_queue>();
  33. run_merge_tests<pri_queue>();
  34. run_ordered_iterator_tests<pri_queue>();
  35. if (stable) {
  36. typedef boost::heap::d_ary_heap<q_tester, boost::heap::arity<D>,
  37. boost::heap::stable<stable>
  38. > stable_pri_queue;
  39. run_stable_heap_tests<stable_pri_queue>();
  40. }
  41. #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
  42. cmpthings ord;
  43. boost::heap::d_ary_heap<thing, boost::heap::arity<D>, boost::heap::compare<cmpthings>, boost::heap::stable<stable> > vpq(ord);
  44. vpq.emplace(5, 6, 7);
  45. #endif
  46. }
  47. BOOST_AUTO_TEST_CASE( d_ary_heap_test )
  48. {
  49. run_d_ary_heap_test<2, false>();
  50. run_d_ary_heap_test<3, false>();
  51. run_d_ary_heap_test<4, false>();
  52. run_d_ary_heap_test<5, false>();
  53. }
  54. BOOST_AUTO_TEST_CASE( d_ary_heap_stable_test )
  55. {
  56. run_d_ary_heap_test<2, true>();
  57. run_d_ary_heap_test<3, true>();
  58. run_d_ary_heap_test<4, true>();
  59. run_d_ary_heap_test<5, true>();
  60. }
  61. template <int D, bool stable>
  62. void run_d_ary_heap_mutable_test(void)
  63. {
  64. typedef boost::heap::d_ary_heap<int, boost::heap::mutable_<true>,
  65. boost::heap::arity<D>,
  66. boost::heap::stable<stable>
  67. > pri_queue;
  68. BOOST_CONCEPT_ASSERT((boost::heap::MutablePriorityQueue<pri_queue>));
  69. run_common_heap_tests<pri_queue>();
  70. run_moveable_heap_tests<pri_queue>();
  71. run_reserve_heap_tests<pri_queue>();
  72. run_mutable_heap_tests<pri_queue>();
  73. run_merge_tests<pri_queue>();
  74. run_ordered_iterator_tests<pri_queue>();
  75. if (stable) {
  76. typedef boost::heap::d_ary_heap<q_tester, boost::heap::mutable_<true>,
  77. boost::heap::arity<D>,
  78. boost::heap::stable<stable>
  79. > stable_pri_queue;
  80. run_stable_heap_tests<stable_pri_queue>();
  81. }
  82. }
  83. BOOST_AUTO_TEST_CASE( d_ary_heap_mutable_test )
  84. {
  85. run_d_ary_heap_mutable_test<2, false>();
  86. run_d_ary_heap_mutable_test<3, false>();
  87. run_d_ary_heap_mutable_test<4, false>();
  88. run_d_ary_heap_mutable_test<5, false>();
  89. }
  90. BOOST_AUTO_TEST_CASE( d_ary_heap_mutable_stable_test )
  91. {
  92. run_d_ary_heap_mutable_test<2, true>();
  93. run_d_ary_heap_mutable_test<3, true>();
  94. run_d_ary_heap_mutable_test<4, true>();
  95. run_d_ary_heap_mutable_test<5, true>();
  96. }
  97. BOOST_AUTO_TEST_CASE( d_ary_heap_compare_lookup_test )
  98. {
  99. typedef boost::heap::d_ary_heap<int, boost::heap::arity<2>,
  100. boost::heap::compare<less_with_T>,
  101. boost::heap::allocator<std::allocator<int> > > pri_queue;
  102. run_common_heap_tests<pri_queue>();
  103. }
  104. BOOST_AUTO_TEST_CASE( d_ary_heap_leak_test )
  105. {
  106. typedef boost::heap::d_ary_heap<boost::shared_ptr<int>, boost::heap::arity<2> > pri_queue;
  107. run_leak_check_test<pri_queue>();
  108. }