]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/container/test/test_util.hpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / libs / container / test / test_util.hpp
CommitLineData
20effc67
TL
1//////////////////////////////////////////////////////////////////////////////
2//
3// \(C\) Copyright Benedek Thaler 2015-2016
4// \(C\) Copyright Ion Gaztanaga 2019-2020. Distributed under the Boost
5// Software License, Version 1.0. (See accompanying file
6// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7//
8// See http://erenon.hu/double_ended for documentation.
9//
10//////////////////////////////////////////////////////////////////////////////
11
12#ifndef BOOST_CONTAINER_TEST_TEST_UTIL_HPP
13#define BOOST_CONTAINER_TEST_TEST_UTIL_HPP
14
15#include "test_elem.hpp"
16
17// get_range
18
19template <typename DeVector>
20void get_range(int fbeg, int fend, int bbeg, int bend, DeVector &c)
21{
22 c.clear();
23
24 for (int i = fend; i > fbeg ;)
25 {
26 c.emplace_front(--i);
27 }
28
29 for (int i = bbeg; i < bend; ++i)
30 {
31 c.emplace_back(i);
32 }
33}
34
35template <typename Container>
36void get_range(int count, Container &c)
37{
38 c.clear();
39
40 for (int i = 1; i <= count; ++i)
41 {
42 c.emplace_back(i);
43 }
44}
45
46template <typename Container>
47void get_range(Container &c)
48{
49 get_range<Container>(1, 13, 13, 25, c);
50}
51
52template <typename C1>
53void test_equal_range(const C1& a)
54{
55 BOOST_TEST(a.empty());
56}
57
58template <typename Iterator>
59void print_range(std::ostream& out, Iterator b, Iterator e)
60{
61 out << '[';
62 bool first = true;
63
64 for (; b != e; ++b)
65 {
66 if (first) { first = false; }
67 else { out << ','; }
68 out << *b;
69 }
70 out << ']';
71}
72
73template <typename Range>
74void print_range(std::ostream& out, const Range& range)
75{
76 print_range(out, range.cbegin(), range.cend());
77}
78
79template <typename Array, std::size_t N>
80void print_range(std::ostream& out, Array (&range)[N])
81{
82 print_range(out, range, range + N);
83}
84
85template <typename C1, typename C2, unsigned N>
86void test_equal_range(const C1& a, const C2 (&b)[N])
87{
88 bool equals = boost::algorithm::equal
89 (a.begin(), a.end(), b, b+N);
90
91 BOOST_TEST(equals);
92
93 if (!equals)
94 {
95 print_range(std::cerr, a);
96 std::cerr << "\n";
97 print_range(std::cerr, b);
98 std::cerr << "\n";
99 }
100}
101
102
103template <typename C1, typename C2>
104void test_equal_range(const C1& a, const C2&b)
105{
106 bool equals = boost::algorithm::equal
107 (a.begin(), a.end(), b.begin(), b.end());
108
109 BOOST_TEST(equals);
110
111 if (!equals)
112 {
113 print_range(std::cerr, a);
114 std::cerr << "\n";
115 print_range(std::cerr, b);
116 std::cerr << "\n";
117 }
118}
119
120#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
121
122// support initializer_list
123template <typename C>
124void test_equal_range(const C& a, std::initializer_list<unsigned> il)
125{
126 typedef typename C::value_type T;
127 boost::container::vector<T> b;
128
129 for (auto&& elem : il)
130 {
131 b.emplace_back(elem);
132 }
133
134 test_equal_range(a, b);
135}
136
137#endif //#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
138
139#endif //BOOST_CONTAINER_TEST_TEST_UTIL_HPP