]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/beast/test/beast/core/buffers_prefix.cpp
39e8f5ebefc6447c6b4e424904725849b9b20652
2 // Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 // Official repository: https://github.com/boostorg/beast
10 // Test that header file is self-contained.
11 #include <boost/beast/core/buffers_prefix.hpp>
13 #include <boost/beast/core/buffers_suffix.hpp>
14 #include <boost/beast/core/type_traits.hpp>
15 #include <boost/beast/unit_test/suite.hpp>
16 #include <boost/asio/buffer.hpp>
23 std::is_same
<boost::asio::const_buffer
, decltype(
25 std::declval
<boost::asio::const_buffer
>()))>::value
);
28 boost::asio::is_const_buffer_sequence
<decltype(
30 std::declval
<boost::asio::const_buffer
>()))>::value
);
33 std::is_same
<boost::asio::mutable_buffer
, decltype(
35 std::declval
<boost::asio::mutable_buffer
>()))>::value
);
37 class buffers_prefix_test
: public beast::unit_test::suite
40 template<class ConstBufferSequence
>
43 bsize1(ConstBufferSequence
const& bs
)
45 using boost::asio::buffer_size
;
47 for(auto it
= bs
.begin(); it
!= bs
.end(); ++it
)
48 n
+= buffer_size(*it
);
52 template<class ConstBufferSequence
>
55 bsize2(ConstBufferSequence
const& bs
)
57 using boost::asio::buffer_size
;
59 for(auto it
= bs
.begin(); it
!= bs
.end(); it
++)
60 n
+= buffer_size(*it
);
64 template<class ConstBufferSequence
>
67 bsize3(ConstBufferSequence
const& bs
)
69 using boost::asio::buffer_size
;
71 for(auto it
= bs
.end(); it
!= bs
.begin();)
72 n
+= buffer_size(*--it
);
76 template<class ConstBufferSequence
>
79 bsize4(ConstBufferSequence
const& bs
)
81 using boost::asio::buffer_size
;
83 for(auto it
= bs
.end(); it
!= bs
.begin();)
86 n
+= buffer_size(*it
);
91 template<class ConstBufferSequence
>
94 to_string(ConstBufferSequence
const& bs
)
97 s
.reserve(buffer_size(bs
));
98 for(auto b
: beast::detail::buffers_range(bs
))
99 s
.append(reinterpret_cast<char const*>(b
.data()),
104 template<class BufferType
>
107 using boost::asio::buffer_size
;
108 std::string s
= "Hello, world";
109 BEAST_EXPECT(s
.size() == 12);
110 for(std::size_t x
= 1; x
< 4; ++x
) {
111 for(std::size_t y
= 1; y
< 4; ++y
) {
112 std::size_t z
= s
.size() - (x
+ y
);
114 std::array
<BufferType
, 3> bs
{{
115 BufferType
{&s
[0], x
},
116 BufferType
{&s
[x
], y
},
117 BufferType
{&s
[x
+y
], z
}}};
118 for(std::size_t i
= 0; i
<= s
.size() + 1; ++i
)
120 auto pb
= buffers_prefix(i
, bs
);
121 BEAST_EXPECT(to_string(pb
) == s
.substr(0, i
));
123 BEAST_EXPECT(to_string(pb2
) == to_string(pb
));
124 pb
= buffers_prefix(0, bs
);
126 BEAST_EXPECT(buffer_size(pb2
) == 0);
127 pb2
= buffers_prefix(i
, bs
);
128 BEAST_EXPECT(to_string(pb2
) == s
.substr(0, i
));
134 void testEmptyBuffers()
136 using boost::asio::buffer_copy
;
137 using boost::asio::buffer_size
;
138 using boost::asio::mutable_buffer
;
139 auto pb0
= buffers_prefix(0, mutable_buffer
{});
140 BEAST_EXPECT(buffer_size(pb0
) == 0);
141 auto pb1
= buffers_prefix(1, mutable_buffer
{});
142 BEAST_EXPECT(buffer_size(pb1
) == 0);
143 BEAST_EXPECT(buffer_copy(pb0
, pb1
) == 0);
145 using pb_type
= decltype(pb0
);
146 buffers_suffix
<pb_type
> cb(pb0
);
147 BEAST_EXPECT(buffer_size(cb
) == 0);
148 BEAST_EXPECT(buffer_copy(cb
, pb1
) == 0);
150 BEAST_EXPECT(buffer_size(cb
) == 0);
151 BEAST_EXPECT(buffer_copy(cb
, pb1
) == 0);
153 auto pbc
= buffers_prefix(2, cb
);
154 BEAST_EXPECT(buffer_size(pbc
) == 0);
155 BEAST_EXPECT(buffer_copy(pbc
, cb
) == 0);
160 using boost::asio::buffer_size
;
161 using boost::asio::const_buffer
;
163 std::array
<const_buffer
, 3> bs
{{
164 const_buffer
{&b
[0], 1},
165 const_buffer
{&b
[1], 1},
166 const_buffer
{&b
[2], 1}}};
167 auto pb
= buffers_prefix(2, bs
);
168 BEAST_EXPECT(bsize1(pb
) == 2);
169 BEAST_EXPECT(bsize2(pb
) == 2);
170 BEAST_EXPECT(bsize3(pb
) == 2);
171 BEAST_EXPECT(bsize4(pb
) == 2);
176 testMatrix
<boost::asio::const_buffer
>();
177 testMatrix
<boost::asio::mutable_buffer
>();
183 BEAST_DEFINE_TESTSUITE(beast
,core
,buffers_prefix
);