1 /*=============================================================================
2 Copyright (c) 2010 Tim Blechmann
4 Use, modification and distribution is subject to the Boost Software
5 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6 http://www.boost.org/LICENSE_1_0.txt)
7 =============================================================================*/
9 #define BOOST_TEST_MAIN
10 #ifdef BOOST_HEAP_INCLUDE_TESTS
11 #include <boost/test/included/unit_test.hpp>
13 #include <boost/test/unit_test.hpp>
18 #include <boost/heap/d_ary_heap.hpp>
20 #include "common_heap_tests.hpp"
21 #include "stable_heap_tests.hpp"
22 #include "mutable_heap_tests.hpp"
23 #include "merge_heap_tests.hpp"
26 template <int D, bool stable>
27 void run_d_ary_heap_test(void)
29 typedef boost::heap::d_ary_heap<int, boost::heap::arity<D>,
30 boost::heap::stable<stable>,
31 boost::heap::compare<std::less<int> >,
32 boost::heap::allocator<std::allocator<int> > > pri_queue;
34 BOOST_CONCEPT_ASSERT((boost::heap::PriorityQueue<pri_queue>));
36 run_concept_check<pri_queue>();
37 run_common_heap_tests<pri_queue>();
38 run_iterator_heap_tests<pri_queue>();
39 run_copyable_heap_tests<pri_queue>();
40 run_moveable_heap_tests<pri_queue>();
41 run_reserve_heap_tests<pri_queue>();
42 run_merge_tests<pri_queue>();
44 run_ordered_iterator_tests<pri_queue>();
47 typedef boost::heap::d_ary_heap<q_tester, boost::heap::arity<D>,
48 boost::heap::stable<stable>
51 run_stable_heap_tests<stable_pri_queue>();
54 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
56 boost::heap::d_ary_heap<thing, boost::heap::arity<D>, boost::heap::compare<cmpthings>, boost::heap::stable<stable> > vpq(ord);
62 BOOST_AUTO_TEST_CASE( d_ary_heap_test )
64 run_d_ary_heap_test<2, false>();
65 run_d_ary_heap_test<3, false>();
66 run_d_ary_heap_test<4, false>();
67 run_d_ary_heap_test<5, false>();
70 BOOST_AUTO_TEST_CASE( d_ary_heap_stable_test )
72 run_d_ary_heap_test<2, true>();
73 run_d_ary_heap_test<3, true>();
74 run_d_ary_heap_test<4, true>();
75 run_d_ary_heap_test<5, true>();
78 template <int D, bool stable>
79 void run_d_ary_heap_mutable_test(void)
81 typedef boost::heap::d_ary_heap<int, boost::heap::mutable_<true>,
82 boost::heap::arity<D>,
83 boost::heap::stable<stable>
86 BOOST_CONCEPT_ASSERT((boost::heap::MutablePriorityQueue<pri_queue>));
88 run_common_heap_tests<pri_queue>();
89 run_moveable_heap_tests<pri_queue>();
90 run_reserve_heap_tests<pri_queue>();
91 run_mutable_heap_tests<pri_queue>();
93 run_merge_tests<pri_queue>();
95 run_ordered_iterator_tests<pri_queue>();
98 typedef boost::heap::d_ary_heap<q_tester, boost::heap::mutable_<true>,
99 boost::heap::arity<D>,
100 boost::heap::stable<stable>
102 run_stable_heap_tests<stable_pri_queue>();
106 BOOST_AUTO_TEST_CASE( d_ary_heap_mutable_test )
108 run_d_ary_heap_mutable_test<2, false>();
109 run_d_ary_heap_mutable_test<3, false>();
110 run_d_ary_heap_mutable_test<4, false>();
111 run_d_ary_heap_mutable_test<5, false>();
114 BOOST_AUTO_TEST_CASE( d_ary_heap_mutable_stable_test )
116 run_d_ary_heap_mutable_test<2, true>();
117 run_d_ary_heap_mutable_test<3, true>();
118 run_d_ary_heap_mutable_test<4, true>();
119 run_d_ary_heap_mutable_test<5, true>();
122 BOOST_AUTO_TEST_CASE( d_ary_heap_compare_lookup_test )
124 typedef boost::heap::d_ary_heap<int, boost::heap::arity<2>,
125 boost::heap::compare<less_with_T>,
126 boost::heap::allocator<std::allocator<int> > > pri_queue;
127 run_common_heap_tests<pri_queue>();
131 BOOST_AUTO_TEST_CASE( d_ary_heap_leak_test )
133 typedef boost::heap::d_ary_heap<boost::shared_ptr<int>, boost::heap::arity<2> > pri_queue;
134 run_leak_check_test<pri_queue>();