]> git.proxmox.com Git - ceph.git/blame - ceph/src/Beast/test/core/consuming_buffers.cpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / Beast / test / core / consuming_buffers.cpp
CommitLineData
7c673cae
FG
1//
2// Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
3//
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)
6//
7
8// Test that header file is self-contained.
9#include <beast/core/consuming_buffers.hpp>
10
11#include "buffer_test.hpp"
12#include <beast/core/to_string.hpp>
13#include <beast/unit_test/suite.hpp>
14#include <boost/asio/buffer.hpp>
15#include <string>
16
17namespace beast {
18
19class consuming_buffers_test : public beast::unit_test::suite
20{
21public:
22 template<class BufferSequence>
23 static
24 consuming_buffers<BufferSequence>
25 consumed_buffers(BufferSequence const& bs, std::size_t n)
26 {
27 consuming_buffers<BufferSequence> cb(bs);
28 cb.consume(n);
29 return cb;
30 }
31
32 template<class Buffers1, class Buffers2>
33 static
34 bool
35 eq(Buffers1 const& lhs, Buffers2 const& rhs)
36 {
37 return to_string(lhs) == to_string(rhs);
38 }
39
40 template<class ConstBufferSequence>
41 void
42 expect_size(std::size_t n, ConstBufferSequence const& buffers)
43 {
44 BEAST_EXPECT(test::size_pre(buffers) == n);
45 BEAST_EXPECT(test::size_post(buffers) == n);
46 BEAST_EXPECT(test::size_rev_pre(buffers) == n);
47 BEAST_EXPECT(test::size_rev_post(buffers) == n);
48 }
49
50 void testMatrix()
51 {
52 using boost::asio::buffer;
53 using boost::asio::const_buffer;
54 char buf[12];
55 std::string const s = "Hello, world";
56 BEAST_EXPECT(s.size() == sizeof(buf));
57 buffer_copy(buffer(buf), buffer(s));
58 BEAST_EXPECT(to_string(buffer(buf)) == s);
59 for(std::size_t i = 1; i < 4; ++i) {
60 for(std::size_t j = 1; j < 4; ++j) {
61 for(std::size_t x = 1; x < 4; ++x) {
62 for(std::size_t y = 1; y < 4; ++y) {
63 std::size_t k = sizeof(buf) - (i + j);
64 std::size_t z = sizeof(buf) - (x + y);
65 {
66 std::array<const_buffer, 3> bs{{
67 const_buffer{&buf[0], i},
68 const_buffer{&buf[i], j},
69 const_buffer{&buf[i+j], k}}};
70 consuming_buffers<decltype(bs)> cb(bs);
71 BEAST_EXPECT(to_string(cb) == s);
72 expect_size(s.size(), cb);
73 cb.consume(0);
74 BEAST_EXPECT(eq(cb, consumed_buffers(bs, 0)));
75 BEAST_EXPECT(to_string(cb) == s);
76 expect_size(s.size(), cb);
77 cb.consume(x);
78 BEAST_EXPECT(to_string(cb) == s.substr(x));
79 BEAST_EXPECT(eq(cb, consumed_buffers(bs, x)));
80 cb.consume(y);
81 BEAST_EXPECT(to_string(cb) == s.substr(x+y));
82 BEAST_EXPECT(eq(cb, consumed_buffers(bs, x+y)));
83 cb.consume(z);
84 BEAST_EXPECT(to_string(cb) == "");
85 BEAST_EXPECT(eq(cb, consumed_buffers(bs, x+y+z)));
86 cb.consume(1);
87 BEAST_EXPECT(to_string(cb) == "");
88 BEAST_EXPECT(eq(cb, consumed_buffers(bs, x+y+z)));
89 }
90 }}}}
91 }
92
93 void testNullBuffers()
94 {
95 using boost::asio::buffer_copy;
96 using boost::asio::buffer_size;
97 using boost::asio::null_buffers;
98 consuming_buffers<null_buffers> cb(
99 null_buffers{});
100 BEAST_EXPECT(buffer_size(cb) == 0);
101 consuming_buffers<null_buffers> cb2(
102 null_buffers{});
103 BEAST_EXPECT(buffer_copy(cb2, cb) == 0);
104 }
105
106 void testIterator()
107 {
108 using boost::asio::const_buffer;
109 std::array<const_buffer, 3> ba;
110 consuming_buffers<decltype(ba)> cb(ba);
111 std::size_t n = 0;
112 for(auto it = cb.end(); it != cb.begin(); --it)
113 ++n;
114 BEAST_EXPECT(n == 3);
115 }
116
117 void run() override
118 {
119 testMatrix();
120 testNullBuffers();
121 testIterator();
122 }
123};
124
125BEAST_DEFINE_TESTSUITE(consuming_buffers,core,beast);
126
127} // beast