forked from boostorg/beast
Refactor buffers_adaptor
This commit is contained in:
committed by
Vinnie Falco
parent
eebf5773ed
commit
69ef525d5c
@@ -24,6 +24,33 @@
|
||||
namespace boost {
|
||||
namespace beast {
|
||||
|
||||
struct buffers_adaptor_test_hook
|
||||
{
|
||||
template<class MutableBufferSequence>
|
||||
static
|
||||
auto
|
||||
make_subrange(
|
||||
buffers_adaptor <MutableBufferSequence> &adaptor,
|
||||
std::size_t pos = 0,
|
||||
std::size_t n = (std::numeric_limits<std::size_t>::max)())
|
||||
-> typename buffers_adaptor<MutableBufferSequence>::mutable_buffers_type
|
||||
{
|
||||
return adaptor.make_subrange(pos, n);
|
||||
}
|
||||
|
||||
template<class MutableBufferSequence>
|
||||
static
|
||||
auto
|
||||
make_subrange(
|
||||
buffers_adaptor<MutableBufferSequence> const& adaptor,
|
||||
std::size_t pos = 0,
|
||||
std::size_t n = (std::numeric_limits<std::size_t>::max)())
|
||||
-> typename buffers_adaptor<MutableBufferSequence>::const_buffers_type
|
||||
{
|
||||
return adaptor.make_subrange(pos, n);
|
||||
}
|
||||
};
|
||||
|
||||
class buffers_adaptor_test : public unit_test::suite
|
||||
{
|
||||
public:
|
||||
@@ -85,6 +112,54 @@ public:
|
||||
read_size(ba, 1024);
|
||||
}
|
||||
|
||||
template<bool isMutable>
|
||||
void
|
||||
testSubrange()
|
||||
{
|
||||
auto exemplar = std::string("the quick brown fox jumps over the lazy dog");
|
||||
|
||||
auto iterate_test = [&](
|
||||
std::size_t a,
|
||||
std::size_t b,
|
||||
std::size_t c)
|
||||
{
|
||||
static const auto func = "iterate_test";
|
||||
auto buffers = std::vector<net::mutable_buffer>();
|
||||
if (a)
|
||||
buffers.push_back(net::buffer(&exemplar[0], a));
|
||||
if (b - a)
|
||||
buffers.push_back(net::buffer(&exemplar[a], (b - a)));
|
||||
if (c - b)
|
||||
buffers.push_back(net::buffer(&exemplar[b], (c - b)));
|
||||
auto adapter = buffers_adaptor<std::vector<net::mutable_buffer>>(buffers);
|
||||
|
||||
|
||||
using value_type =
|
||||
typename std::conditional<
|
||||
isMutable,
|
||||
net::mutable_buffer,
|
||||
net::const_buffer>::type;
|
||||
|
||||
using maybe_mutable =
|
||||
typename std::conditional<
|
||||
isMutable,
|
||||
buffers_adaptor<std::vector<net::mutable_buffer>>&,
|
||||
buffers_adaptor<std::vector<net::mutable_buffer>> const&>::type;
|
||||
|
||||
auto sub = buffers_adaptor_test_hook::make_subrange(static_cast<maybe_mutable>(adapter));
|
||||
BEAST_EXPECTS(typeid(typename decltype(sub)::value_type) == typeid(value_type), func);
|
||||
BEAST_EXPECT(buffers_to_string(sub) == exemplar.substr(0, c));
|
||||
};
|
||||
|
||||
iterate_test(0, 0, 1);
|
||||
|
||||
for (std::size_t a = 0; a <= exemplar.size(); ++a)
|
||||
for (std::size_t b = a; b <= exemplar.size(); ++b)
|
||||
for (std::size_t c = b; c <= exemplar.size(); ++c)
|
||||
iterate_test(a, b, c);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
run() override
|
||||
{
|
||||
@@ -95,6 +170,8 @@ public:
|
||||
testBuffersAdapter();
|
||||
testCommit();
|
||||
#endif
|
||||
testSubrange<true>();
|
||||
testSubrange<false>();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user