]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/beast/test/beast/core/buffers_prefix.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / beast / test / beast / core / buffers_prefix.cpp
index 39e8f5ebefc6447c6b4e424904725849b9b20652..86f84e5b9306c08d8ad7322f2d1384e79cd94544 100644 (file)
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
+// Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
 //
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 // Test that header file is self-contained.
 #include <boost/beast/core/buffers_prefix.hpp>
 
-#include <boost/beast/core/buffers_suffix.hpp>
-#include <boost/beast/core/type_traits.hpp>
-#include <boost/beast/unit_test/suite.hpp>
-#include <boost/asio/buffer.hpp>
+#include "test_buffer.hpp"
+
+#include <boost/beast/core/buffer_traits.hpp>
+#include <boost/beast/core/buffers_to_string.hpp>
+#include <boost/beast/_experimental/unit_test/suite.hpp>
 #include <string>
 
 namespace boost {
 namespace beast {
 
-BOOST_STATIC_ASSERT(
-    std::is_same<boost::asio::const_buffer, decltype(
-        buffers_prefix(0,
-            std::declval<boost::asio::const_buffer>()))>::value);
-
-BOOST_STATIC_ASSERT(
-    boost::asio::is_const_buffer_sequence<decltype(
-        buffers_prefix(0,
-            std::declval<boost::asio::const_buffer>()))>::value);
-
-BOOST_STATIC_ASSERT(
-    std::is_same<boost::asio::mutable_buffer, decltype(
-        buffers_prefix(0,
-            std::declval<boost::asio::mutable_buffer>()))>::value);
-
 class buffers_prefix_test : public beast::unit_test::suite
 {
 public:
-    template<class ConstBufferSequence>
-    static
-    std::size_t
-    bsize1(ConstBufferSequence const& bs)
+    void
+    testBufferSequence()
     {
-        using boost::asio::buffer_size;
-        std::size_t n = 0;
-        for(auto it = bs.begin(); it != bs.end(); ++it)
-            n += buffer_size(*it);
-        return n;
+        char buf[13];
+        auto const b =
+            buffers_triple(buf, sizeof(buf));
+        for(std::size_t i = 1; i <= sizeof(buf); ++i)
+            test_buffer_sequence(
+                buffers_prefix(i, b));
     }
 
-    template<class ConstBufferSequence>
-    static
-    std::size_t
-    bsize2(ConstBufferSequence const& bs)
+    void
+    testInPlaceInit()
     {
-        using boost::asio::buffer_size;
-        std::size_t n = 0;
-        for(auto it = bs.begin(); it != bs.end(); it++)
-            n += buffer_size(*it);
-        return n;
-    }
-
-    template<class ConstBufferSequence>
-    static
-    std::size_t
-    bsize3(ConstBufferSequence const& bs)
-    {
-        using boost::asio::buffer_size;
-        std::size_t n = 0;
-        for(auto it = bs.end(); it != bs.begin();)
-            n += buffer_size(*--it);
-        return n;
-    }
+        {
+            class test_buffers
+            {
+                net::const_buffer cb_;
+
+            public:
+                using const_iterator =
+                    net::const_buffer const*;
+
+                explicit
+                test_buffers(std::true_type)
+                {
+                }
+
+                const_iterator
+                begin() const
+                {
+                    return &cb_;
+                }
+
+                const_iterator
+                end() const
+                {
+                    return begin() + 1;
+                }
+            };
+            buffers_prefix_view<test_buffers> v(
+                2, boost::in_place_init, std::true_type{});
+            BEAST_EXPECT(buffer_bytes(v) == 0);
+        }
 
-    template<class ConstBufferSequence>
-    static
-    std::size_t
-    bsize4(ConstBufferSequence const& bs)
-    {
-        using boost::asio::buffer_size;
-        std::size_t n = 0;
-        for(auto it = bs.end(); it != bs.begin();)
         {
-            it--;
-            n += buffer_size(*it);
+            char c[2];
+            c[0] = 0;
+            c[1] = 0;
+            buffers_prefix_view<net::const_buffer> v(
+                2, boost::in_place_init, c, sizeof(c));
+            BEAST_EXPECT(buffer_bytes(v) == 2);
         }
-        return n;
-    }
 
-    template<class ConstBufferSequence>
-    static
-    std::string
-    to_string(ConstBufferSequence const& bs)
-    {
-        std::string s;
-        s.reserve(buffer_size(bs));
-        for(auto b : beast::detail::buffers_range(bs))
-            s.append(reinterpret_cast<char const*>(b.data()),
-                b.size());
-        return s;
+        {
+            char c[2];
+            buffers_prefix_view<net::mutable_buffer> v(
+                2, boost::in_place_init, c, sizeof(c));
+            BEAST_EXPECT(buffer_bytes(v) == 2);
+        }
     }
 
     template<class BufferType>
-    void testMatrix()
+    void
+    testPrefixes()
     {
-        using boost::asio::buffer_size;
         std::string s = "Hello, world";
         BEAST_EXPECT(s.size() == 12);
         for(std::size_t x = 1; x < 4; ++x) {
         for(std::size_t y = 1; y < 4; ++y) {
-        std::size_t z = s.size() - (x + y);
         {
+            std::size_t z = s.size() - (x + y);
             std::array<BufferType, 3> bs{{
                 BufferType{&s[0], x},
                 BufferType{&s[x], y},
@@ -118,65 +102,67 @@ public:
             for(std::size_t i = 0; i <= s.size() + 1; ++i)
             {
                 auto pb = buffers_prefix(i, bs);
-                BEAST_EXPECT(to_string(pb) == s.substr(0, i));
+                BEAST_EXPECT(buffers_to_string(pb) == s.substr(0, i));
                 auto pb2 = pb;
-                BEAST_EXPECT(to_string(pb2) == to_string(pb));
+                BEAST_EXPECT(buffers_to_string(pb2) == buffers_to_string(pb));
                 pb = buffers_prefix(0, bs);
                 pb2 = pb;
-                BEAST_EXPECT(buffer_size(pb2) == 0);
+                BEAST_EXPECT(buffer_bytes(pb2) == 0);
                 pb2 = buffers_prefix(i, bs);
-                BEAST_EXPECT(to_string(pb2) == s.substr(0, i));
+                BEAST_EXPECT(buffers_to_string(pb2) == s.substr(0, i));
             }
         }
-        }}
+        } }
     }
 
-    void testEmptyBuffers()
+    void testEmpty()
     {
-        using boost::asio::buffer_copy;
-        using boost::asio::buffer_size;
-        using boost::asio::mutable_buffer;
-        auto pb0 = buffers_prefix(0, mutable_buffer{});
-        BEAST_EXPECT(buffer_size(pb0) == 0);
-        auto pb1 = buffers_prefix(1, mutable_buffer{});
-        BEAST_EXPECT(buffer_size(pb1) == 0);
-        BEAST_EXPECT(buffer_copy(pb0, pb1) == 0);
-
-        using pb_type = decltype(pb0);
-        buffers_suffix<pb_type> cb(pb0);
-        BEAST_EXPECT(buffer_size(cb) == 0);
-        BEAST_EXPECT(buffer_copy(cb, pb1) == 0);
-        cb.consume(1);
-        BEAST_EXPECT(buffer_size(cb) == 0);
-        BEAST_EXPECT(buffer_copy(cb, pb1) == 0);
-
-        auto pbc = buffers_prefix(2, cb);
-        BEAST_EXPECT(buffer_size(pbc) == 0);
-        BEAST_EXPECT(buffer_copy(pbc, cb) == 0);
+        auto pb0 = buffers_prefix(0, net::mutable_buffer{});
+        BEAST_EXPECT(buffer_bytes(pb0) == 0);
+        auto pb1 = buffers_prefix(1, net::mutable_buffer{});
+        BEAST_EXPECT(buffer_bytes(pb1) == 0);
+        BEAST_EXPECT(net::buffer_copy(pb0, pb1) == 0);
     }
 
-    void testIterator()
+    void
+    testBuffersFront()
     {
-        using boost::asio::buffer_size;
-        using boost::asio::const_buffer;
-        char b[3];
-        std::array<const_buffer, 3> bs{{
-            const_buffer{&b[0], 1},
-            const_buffer{&b[1], 1},
-            const_buffer{&b[2], 1}}};
-        auto pb = buffers_prefix(2, bs);
-        BEAST_EXPECT(bsize1(pb) == 2);
-        BEAST_EXPECT(bsize2(pb) == 2);
-        BEAST_EXPECT(bsize3(pb) == 2);
-        BEAST_EXPECT(bsize4(pb) == 2);
+        {
+            std::array<net::const_buffer, 2> v;
+            v[0] = {"", 0};
+            v[1] = net::const_buffer("Hello, world!", 13);
+            BEAST_EXPECT(buffers_front(v).size() == 0);
+            std::swap(v[0], v[1]);
+            BEAST_EXPECT(buffers_front(v).size() == 13);
+        }
+        {
+            struct null_sequence
+            {
+                net::const_buffer b;
+                using iterator = net::const_buffer const*;
+                iterator begin() const noexcept
+                {
+                    return &b;
+                }
+                iterator end() const noexcept
+                {
+                    return begin();
+                }
+            };
+            null_sequence z;
+            BEAST_EXPECT(buffers_front(z).size() == 0);
+        }
     }
 
-    void run() override
+    void
+    run() override
     {
-        testMatrix<boost::asio::const_buffer>();
-        testMatrix<boost::asio::mutable_buffer>();
-        testEmptyBuffers();
-        testIterator();
+        testBufferSequence();
+        testInPlaceInit();
+        testPrefixes<net::const_buffer>();
+        testPrefixes<net::mutable_buffer>();
+        testEmpty();
+        testBuffersFront();
     }
 };