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
26template <int D, bool stable>
27void 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
62BOOST_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
70BOOST_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
78template <int D, bool stable>
79void 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
106BOOST_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
114BOOST_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
122BOOST_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
131BOOST_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

source code of boost/libs/heap/test/d_ary_heap_test.cpp