1 | /*============================================================================= |
2 | Copyright (c) 2010 Tim Blechmann |
3 | |
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 | =============================================================================*/ |
8 | |
9 | #define BOOST_TEST_MAIN |
10 | #ifdef BOOST_HEAP_INCLUDE_TESTS |
11 | #include <boost/test/included/unit_test.hpp> |
12 | #else |
13 | #include <boost/test/unit_test.hpp> |
14 | #endif |
15 | |
16 | #include <algorithm> |
17 | |
18 | #include <boost/heap/d_ary_heap.hpp> |
19 | |
20 | #include "common_heap_tests.hpp" |
21 | #include "stable_heap_tests.hpp" |
22 | #include "mutable_heap_tests.hpp" |
23 | #include "merge_heap_tests.hpp" |
24 | |
25 | |
26 | template <int D, bool stable> |
27 | void run_d_ary_heap_test(void) |
28 | { |
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; |
33 | |
34 | BOOST_CONCEPT_ASSERT((boost::heap::PriorityQueue<pri_queue>)); |
35 | |
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>(); |
43 | |
44 | run_ordered_iterator_tests<pri_queue>(); |
45 | |
46 | if (stable) { |
47 | typedef boost::heap::d_ary_heap<q_tester, boost::heap::arity<D>, |
48 | boost::heap::stable<stable> |
49 | > stable_pri_queue; |
50 | |
51 | run_stable_heap_tests<stable_pri_queue>(); |
52 | } |
53 | |
54 | #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) |
55 | cmpthings ord; |
56 | boost::heap::d_ary_heap<thing, boost::heap::arity<D>, boost::heap::compare<cmpthings>, boost::heap::stable<stable> > vpq(ord); |
57 | vpq.emplace(5, 6, 7); |
58 | #endif |
59 | } |
60 | |
61 | |
62 | BOOST_AUTO_TEST_CASE( d_ary_heap_test ) |
63 | { |
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>(); |
68 | } |
69 | |
70 | BOOST_AUTO_TEST_CASE( d_ary_heap_stable_test ) |
71 | { |
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>(); |
76 | } |
77 | |
78 | template <int D, bool stable> |
79 | void run_d_ary_heap_mutable_test(void) |
80 | { |
81 | typedef boost::heap::d_ary_heap<int, boost::heap::mutable_<true>, |
82 | boost::heap::arity<D>, |
83 | boost::heap::stable<stable> |
84 | > pri_queue; |
85 | |
86 | BOOST_CONCEPT_ASSERT((boost::heap::MutablePriorityQueue<pri_queue>)); |
87 | |
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>(); |
92 | |
93 | run_merge_tests<pri_queue>(); |
94 | |
95 | run_ordered_iterator_tests<pri_queue>(); |
96 | |
97 | if (stable) { |
98 | typedef boost::heap::d_ary_heap<q_tester, boost::heap::mutable_<true>, |
99 | boost::heap::arity<D>, |
100 | boost::heap::stable<stable> |
101 | > stable_pri_queue; |
102 | run_stable_heap_tests<stable_pri_queue>(); |
103 | } |
104 | } |
105 | |
106 | BOOST_AUTO_TEST_CASE( d_ary_heap_mutable_test ) |
107 | { |
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>(); |
112 | } |
113 | |
114 | BOOST_AUTO_TEST_CASE( d_ary_heap_mutable_stable_test ) |
115 | { |
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>(); |
120 | } |
121 | |
122 | BOOST_AUTO_TEST_CASE( d_ary_heap_compare_lookup_test ) |
123 | { |
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>(); |
128 | } |
129 | |
130 | |
131 | BOOST_AUTO_TEST_CASE( d_ary_heap_leak_test ) |
132 | { |
133 | typedef boost::heap::d_ary_heap<boost::shared_ptr<int>, boost::heap::arity<2> > pri_queue; |
134 | run_leak_check_test<pri_queue>(); |
135 | } |
136 | |