]>
git.proxmox.com Git - ceph.git/blob - ceph/src/Beast/test/core/buffers_adapter.cpp
2 // Copyright (c) 2013-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)
8 // Test that header file is self-contained.
9 #include <beast/core/buffers_adapter.hpp>
11 #include <beast/core/streambuf.hpp>
12 #include <beast/unit_test/suite.hpp>
13 #include <boost/asio/buffer.hpp>
14 #include <boost/asio/streambuf.hpp>
19 class buffers_adapter_test
: public unit_test::suite
22 template<class ConstBufferSequence
>
25 to_string(ConstBufferSequence
const& bs
)
27 using boost::asio::buffer_cast
;
28 using boost::asio::buffer_size
;
30 s
.reserve(buffer_size(bs
));
31 for(auto const& b
: bs
)
32 s
.append(buffer_cast
<char const*>(b
),
37 void testBuffersAdapter()
39 using boost::asio::buffer
;
40 using boost::asio::buffer_cast
;
41 using boost::asio::buffer_size
;
42 using boost::asio::const_buffer
;
43 using boost::asio::mutable_buffer
;
45 std::string
const s
= "Hello, world";
46 BEAST_EXPECT(s
.size() == sizeof(buf
));
47 for(std::size_t i
= 1; i
< 4; ++i
) {
48 for(std::size_t j
= 1; j
< 4; ++j
) {
49 for(std::size_t x
= 1; x
< 4; ++x
) {
50 for(std::size_t y
= 1; y
< 4; ++y
) {
51 for(std::size_t t
= 1; t
< 4; ++ t
) {
52 for(std::size_t u
= 1; u
< 4; ++ u
) {
53 std::size_t k
= sizeof(buf
) - (i
+ j
);
54 std::size_t z
= sizeof(buf
) - (x
+ y
);
55 std::size_t v
= sizeof(buf
) - (t
+ u
);
57 std::memset(buf
, 0, sizeof(buf
));
58 std::array
<mutable_buffer
, 3> bs
{{
59 mutable_buffer
{&buf
[0], i
},
60 mutable_buffer
{&buf
[i
], j
},
61 mutable_buffer
{&buf
[i
+j
], k
}}};
62 buffers_adapter
<decltype(bs
)> ba(std::move(bs
));
63 BEAST_EXPECT(ba
.max_size() == sizeof(buf
));
65 auto d
= ba
.prepare(z
);
66 BEAST_EXPECT(buffer_size(d
) == z
);
69 auto d
= ba
.prepare(0);
70 BEAST_EXPECT(buffer_size(d
) == 0);
73 auto d
= ba
.prepare(y
);
74 BEAST_EXPECT(buffer_size(d
) == y
);
77 auto d
= ba
.prepare(x
);
78 BEAST_EXPECT(buffer_size(d
) == x
);
79 ba
.commit(buffer_copy(d
, buffer(s
.data(), x
)));
81 BEAST_EXPECT(ba
.size() == x
);
82 BEAST_EXPECT(ba
.max_size() == sizeof(buf
) - x
);
83 BEAST_EXPECT(buffer_size(ba
.data()) == ba
.size());
85 auto d
= ba
.prepare(x
);
86 BEAST_EXPECT(buffer_size(d
) == x
);
89 auto d
= ba
.prepare(0);
90 BEAST_EXPECT(buffer_size(d
) == 0);
93 auto d
= ba
.prepare(z
);
94 BEAST_EXPECT(buffer_size(d
) == z
);
97 auto d
= ba
.prepare(y
);
98 BEAST_EXPECT(buffer_size(d
) == y
);
99 ba
.commit(buffer_copy(d
, buffer(s
.data()+x
, y
)));
102 BEAST_EXPECT(ba
.size() == x
+ y
);
103 BEAST_EXPECT(ba
.max_size() == sizeof(buf
) - (x
+ y
));
104 BEAST_EXPECT(buffer_size(ba
.data()) == ba
.size());
106 auto d
= ba
.prepare(x
);
107 BEAST_EXPECT(buffer_size(d
) == x
);
110 auto d
= ba
.prepare(y
);
111 BEAST_EXPECT(buffer_size(d
) == y
);
114 auto d
= ba
.prepare(0);
115 BEAST_EXPECT(buffer_size(d
) == 0);
118 auto d
= ba
.prepare(z
); BEAST_EXPECT(buffer_size(d
) == z
);
119 ba
.commit(buffer_copy(d
, buffer(s
.data()+x
+y
, z
)));
122 BEAST_EXPECT(ba
.size() == x
+ y
+ z
);
123 BEAST_EXPECT(ba
.max_size() == 0);
124 BEAST_EXPECT(buffer_size(ba
.data()) == ba
.size());
125 BEAST_EXPECT(to_string(ba
.data()) == s
);
128 auto d
= ba
.prepare(0);
129 BEAST_EXPECT(buffer_size(d
) == 0);
131 BEAST_EXPECT(to_string(ba
.data()) == s
.substr(t
, std::string::npos
));
133 BEAST_EXPECT(to_string(ba
.data()) == s
.substr(t
+ u
, std::string::npos
));
135 BEAST_EXPECT(to_string(ba
.data()) == "");
138 auto d
= ba
.prepare(0);
139 BEAST_EXPECT(buffer_size(d
) == 0);
155 using boost::asio::buffer_size
;
157 using sb_type
= boost::asio::streambuf
;
160 sb_type::mutable_buffers_type
> ba(sb
.prepare(3));
161 BEAST_EXPECT(buffer_size(ba
.prepare(3)) == 3);
163 BEAST_EXPECT(buffer_size(ba
.data()) == 2);
166 using sb_type
= beast::streambuf
;
170 sb_type::mutable_buffers_type
> ba(sb
.prepare(8));
171 BEAST_EXPECT(buffer_size(ba
.prepare(8)) == 8);
173 BEAST_EXPECT(buffer_size(ba
.data()) == 2);
177 BEAST_EXPECT(buffer_size(ba
.data()) == 5);
183 testBuffersAdapter();
188 BEAST_DEFINE_TESTSUITE(buffers_adapter
,core
,beast
);