• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
19 template <typename DeVector>
get_range(int fbeg,int fend,int bbeg,int bend,DeVector & c)20 void 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 
35 template <typename Container>
get_range(int count,Container & c)36 void 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 
46 template <typename Container>
get_range(Container & c)47 void get_range(Container &c)
48 {
49    get_range<Container>(1, 13, 13, 25, c);
50 }
51 
52 template <typename C1>
test_equal_range(const C1 & a)53 void test_equal_range(const C1& a)
54 {
55    BOOST_TEST(a.empty());
56 }
57 
58 template <typename Iterator>
print_range(std::ostream & out,Iterator b,Iterator e)59 void 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 
73 template <typename Range>
print_range(std::ostream & out,const Range & range)74 void print_range(std::ostream& out, const Range& range)
75 {
76    print_range(out, range.begin(), range.end());
77 }
78 
79 template <typename Array, std::size_t N>
print_range(std::ostream & out,Array (& range)[N])80 void print_range(std::ostream& out, Array (&range)[N])
81 {
82    print_range(out, range, range + N);
83 }
84 
85 template <typename C1, typename C2, unsigned N>
test_equal_range(const C1 & a,const C2 (& b)[N])86 void 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 
103 template <typename C1, typename C2>
test_equal_range(const C1 & a,const C2 & b)104 void 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
123 template <typename C>
test_equal_range(const C & a,std::initializer_list<unsigned> il)124 void 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
140