]>
git.proxmox.com Git - ceph.git/blob - ceph/src/Beast/test/core/static_streambuf.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/static_streambuf.hpp>
11 #include <beast/unit_test/suite.hpp>
12 #include <boost/asio/buffer.hpp>
17 class static_streambuf_test
: public beast::unit_test::suite
20 template<class ConstBufferSequence
>
23 to_string(ConstBufferSequence
const& bs
)
25 using boost::asio::buffer_cast
;
26 using boost::asio::buffer_size
;
28 s
.reserve(buffer_size(bs
));
29 for(auto const& b
: bs
)
30 s
.append(buffer_cast
<char const*>(b
),
35 void testStaticStreambuf()
37 using boost::asio::buffer
;
38 using boost::asio::buffer_cast
;
39 using boost::asio::buffer_size
;
41 std::string
const s
= "Hello, world";
42 BEAST_EXPECT(s
.size() == sizeof(buf
));
43 for(std::size_t i
= 1; i
< 4; ++i
) {
44 for(std::size_t j
= 1; j
< 4; ++j
) {
45 for(std::size_t x
= 1; x
< 4; ++x
) {
46 for(std::size_t y
= 1; y
< 4; ++y
) {
47 for(std::size_t t
= 1; t
< 4; ++ t
) {
48 for(std::size_t u
= 1; u
< 4; ++ u
) {
49 std::size_t z
= sizeof(buf
) - (x
+ y
);
50 std::size_t v
= sizeof(buf
) - (t
+ u
);
52 std::memset(buf
, 0, sizeof(buf
));
53 static_streambuf_n
<sizeof(buf
)> ba
;
55 auto d
= ba
.prepare(z
);
56 BEAST_EXPECT(buffer_size(d
) == z
);
59 auto d
= ba
.prepare(0);
60 BEAST_EXPECT(buffer_size(d
) == 0);
63 auto d
= ba
.prepare(y
);
64 BEAST_EXPECT(buffer_size(d
) == y
);
67 auto d
= ba
.prepare(x
);
68 BEAST_EXPECT(buffer_size(d
) == x
);
69 ba
.commit(buffer_copy(d
, buffer(s
.data(), x
)));
71 BEAST_EXPECT(ba
.size() == x
);
72 BEAST_EXPECT(buffer_size(ba
.data()) == ba
.size());
74 auto d
= ba
.prepare(x
);
75 BEAST_EXPECT(buffer_size(d
) == x
);
78 auto d
= ba
.prepare(0);
79 BEAST_EXPECT(buffer_size(d
) == 0);
82 auto d
= ba
.prepare(z
);
83 BEAST_EXPECT(buffer_size(d
) == z
);
86 auto d
= ba
.prepare(y
);
87 BEAST_EXPECT(buffer_size(d
) == y
);
88 ba
.commit(buffer_copy(d
, buffer(s
.data()+x
, y
)));
91 BEAST_EXPECT(ba
.size() == x
+ y
);
92 BEAST_EXPECT(buffer_size(ba
.data()) == ba
.size());
94 auto d
= ba
.prepare(x
);
95 BEAST_EXPECT(buffer_size(d
) == x
);
98 auto d
= ba
.prepare(y
);
99 BEAST_EXPECT(buffer_size(d
) == y
);
102 auto d
= ba
.prepare(0);
103 BEAST_EXPECT(buffer_size(d
) == 0);
106 auto d
= ba
.prepare(z
);
107 BEAST_EXPECT(buffer_size(d
) == z
);
108 ba
.commit(buffer_copy(d
, buffer(s
.data()+x
+y
, z
)));
111 BEAST_EXPECT(ba
.size() == x
+ y
+ z
);
112 BEAST_EXPECT(buffer_size(ba
.data()) == ba
.size());
113 BEAST_EXPECT(to_string(ba
.data()) == s
);
116 auto d
= ba
.prepare(0);
117 BEAST_EXPECT(buffer_size(d
) == 0);
119 BEAST_EXPECT(to_string(ba
.data()) == s
.substr(t
, std::string::npos
));
121 BEAST_EXPECT(to_string(ba
.data()) == s
.substr(t
+ u
, std::string::npos
));
123 BEAST_EXPECT(to_string(ba
.data()) == "");
126 auto d
= ba
.prepare(0);
127 BEAST_EXPECT(buffer_size(d
) == 0);
144 static_streambuf_n
<2> ba
;
146 auto mb
= ba
.prepare(2);
149 for(auto it
= mb
.begin();
150 it
!= mb
.end(); it
++)
152 BEAST_EXPECT(n
== 1);
155 for(auto it
= mb
.begin();
156 it
!= mb
.end(); ++it
)
158 BEAST_EXPECT(n
== 1);
161 for(auto it
= mb
.end();
162 it
!= mb
.begin(); it
--)
164 BEAST_EXPECT(n
== 1);
167 for(auto it
= mb
.end();
168 it
!= mb
.begin(); --it
)
170 BEAST_EXPECT(n
== 1);
176 for(auto it
= ba
.data().begin();
177 it
!= ba
.data().end(); it
++)
179 BEAST_EXPECT(n
== 1);
181 for(auto it
= ba
.data().begin();
182 it
!= ba
.data().end(); ++it
)
184 BEAST_EXPECT(n
== 1);
186 for(auto it
= ba
.data().end();
187 it
!= ba
.data().begin(); it
--)
189 BEAST_EXPECT(n
== 1);
191 for(auto it
= ba
.data().end();
192 it
!= ba
.data().begin(); --it
)
194 BEAST_EXPECT(n
== 1);
199 testStaticStreambuf();
204 BEAST_DEFINE_TESTSUITE(static_streambuf
,core
,beast
);