blob: 0c9d2c99b2e21e1a75c1b6cf9528089939afd805 [file] [log] [blame]
//////////////////////////////////////////////////////////////////////////////
//
// \(C\) Copyright Benedek Thaler 2015-2016
// \(C\) Copyright Ion Gaztanaga 2019-2020. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://erenon.hu/double_ended for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_TEST_TEST_UTIL_HPP
#define BOOST_CONTAINER_TEST_TEST_UTIL_HPP
#include "test_elem.hpp"
// get_range
template <typename DeVector>
void get_range(int fbeg, int fend, int bbeg, int bend, DeVector &c)
{
c.clear();
for (int i = fend; i > fbeg ;)
{
c.emplace_front(--i);
}
for (int i = bbeg; i < bend; ++i)
{
c.emplace_back(i);
}
}
template <typename Container>
void get_range(int count, Container &c)
{
c.clear();
for (int i = 1; i <= count; ++i)
{
c.emplace_back(i);
}
}
template <typename Container>
void get_range(Container &c)
{
get_range<Container>(1, 13, 13, 25, c);
}
template <typename C1>
void test_equal_range(const C1& a)
{
BOOST_TEST(a.empty());
}
template <typename Iterator>
void print_range(std::ostream& out, Iterator b, Iterator e)
{
out << '[';
bool first = true;
for (; b != e; ++b)
{
if (first) { first = false; }
else { out << ','; }
out << *b;
}
out << ']';
}
template <typename Range>
void print_range(std::ostream& out, const Range& range)
{
print_range(out, range.begin(), range.end());
}
template <typename Array, std::size_t N>
void print_range(std::ostream& out, Array (&range)[N])
{
print_range(out, range, range + N);
}
template <typename C1, typename C2, unsigned N>
void test_equal_range(const C1& a, const C2 (&b)[N])
{
bool equals = boost::algorithm::equal
(a.begin(), a.end(), b, b+N);
BOOST_TEST(equals);
if (!equals)
{
print_range(std::cerr, a);
std::cerr << "\n";
print_range(std::cerr, b);
std::cerr << "\n";
}
}
template <typename C1, typename C2>
void test_equal_range(const C1& a, const C2&b)
{
bool equals = boost::algorithm::equal
(a.begin(), a.end(), b.begin(), b.end());
BOOST_TEST(equals);
if (!equals)
{
print_range(std::cerr, a);
std::cerr << "\n";
print_range(std::cerr, b);
std::cerr << "\n";
}
}
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
// support initializer_list
template <typename C>
void test_equal_range(const C& a, std::initializer_list<unsigned> il)
{
typedef typename C::value_type T;
boost::container::vector<T> b;
for (auto&& elem : il)
{
b.emplace_back(elem);
}
test_equal_range(a, b);
}
#endif //#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
#endif //BOOST_CONTAINER_TEST_TEST_UTIL_HPP