diff options
Diffstat (limited to '3rdparty/asio/src/tests/unit/write.cpp')
-rw-r--r-- | 3rdparty/asio/src/tests/unit/write.cpp | 1140 |
1 files changed, 1061 insertions, 79 deletions
diff --git a/3rdparty/asio/src/tests/unit/write.cpp b/3rdparty/asio/src/tests/unit/write.cpp index a60ee11ae45..0343c02c71e 100644 --- a/3rdparty/asio/src/tests/unit/write.cpp +++ b/3rdparty/asio/src/tests/unit/write.cpp @@ -2,7 +2,7 @@ // write.cpp // ~~~~~~~~~ // -// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff 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) @@ -25,7 +25,7 @@ #include "unit_test.hpp" #if defined(ASIO_HAS_BOOST_BIND) -# include <boost/bind.hpp> +# include <boost/bind/bind.hpp> #else // defined(ASIO_HAS_BOOST_BIND) # include <functional> #endif // defined(ASIO_HAS_BOOST_BIND) @@ -120,7 +120,8 @@ public: } template <typename Const_Buffers, typename Handler> - void async_write_some(const Const_Buffers& buffers, Handler handler) + void async_write_some(const Const_Buffers& buffers, + ASIO_MOVE_ARG(Handler) handler) { size_t bytes_transferred = write_some(buffers); asio::post(get_executor(), @@ -209,7 +210,8 @@ void test_2_arg_vector_buffers_write() test_stream s(ioc); std::vector<asio::const_buffer> buffers; buffers.push_back(asio::buffer(write_data, 32)); - buffers.push_back(asio::buffer(write_data) + 32); + buffers.push_back(asio::buffer(write_data, 39) + 32); + buffers.push_back(asio::buffer(write_data) + 39); s.reset(); size_t bytes_transferred = asio::write(s, buffers); @@ -229,6 +231,38 @@ void test_2_arg_vector_buffers_write() ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); } +void test_2_arg_dynamic_string_write() +{ + asio::io_context ioc; + test_stream s(ioc); + std::string data; + asio::dynamic_string_buffer<char, std::string::traits_type, + std::string::allocator_type> sb + = asio::dynamic_buffer(data, sizeof(write_data)); + asio::const_buffer buffers + = asio::buffer(write_data, sizeof(write_data)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + size_t bytes_transferred = asio::write(s, sb); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + bytes_transferred = asio::write(s, sb); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + bytes_transferred = asio::write(s, sb); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); +} + void test_3_arg_nothrow_zero_buffers_write() { asio::io_context ioc; @@ -305,7 +339,8 @@ void test_3_arg_nothrow_vector_buffers_write() test_stream s(ioc); std::vector<asio::const_buffer> buffers; buffers.push_back(asio::buffer(write_data, 32)); - buffers.push_back(asio::buffer(write_data) + 32); + buffers.push_back(asio::buffer(write_data, 39) + 32); + buffers.push_back(asio::buffer(write_data) + 39); s.reset(); asio::error_code error; @@ -329,17 +364,62 @@ void test_3_arg_nothrow_vector_buffers_write() ASIO_CHECK(!error); } +void test_3_arg_nothrow_dynamic_string_write() +{ + asio::io_context ioc; + test_stream s(ioc); + std::string data; + asio::dynamic_string_buffer<char, std::string::traits_type, + std::string::allocator_type> sb + = asio::dynamic_buffer(data, sizeof(write_data)); + asio::const_buffer buffers + = asio::buffer(write_data, sizeof(write_data)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + asio::error_code error; + size_t bytes_transferred = asio::write(s, sb, error); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + bytes_transferred = asio::write(s, sb, error); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + bytes_transferred = asio::write(s, sb, error); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + ASIO_CHECK(!error); +} + bool old_style_transfer_all(const asio::error_code& ec, size_t /*bytes_transferred*/) { return !!ec; } -size_t short_transfer(const asio::error_code& ec, - size_t /*bytes_transferred*/) +struct short_transfer { - return !!ec ? 0 : 3; -} + short_transfer() {} +#if defined(ASIO_HAS_MOVE) + short_transfer(short_transfer&&) {} +#else // defined(ASIO_HAS_MOVE) + short_transfer(const short_transfer&) {} +#endif // defined(ASIO_HAS_MOVE) + size_t operator()(const asio::error_code& ec, + size_t /*bytes_transferred*/) + { + return !!ec ? 0 : 3; + } +}; void test_3_arg_const_buffer_write() { @@ -506,19 +586,19 @@ void test_3_arg_const_buffer_write() ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); s.reset(); - bytes_transferred = asio::write(s, buffers, short_transfer); + bytes_transferred = asio::write(s, buffers, short_transfer()); ASIO_CHECK(bytes_transferred == sizeof(write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); s.reset(); s.next_write_length(1); - bytes_transferred = asio::write(s, buffers, short_transfer); + bytes_transferred = asio::write(s, buffers, short_transfer()); ASIO_CHECK(bytes_transferred == sizeof(write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); s.reset(); s.next_write_length(10); - bytes_transferred = asio::write(s, buffers, short_transfer); + bytes_transferred = asio::write(s, buffers, short_transfer()); ASIO_CHECK(bytes_transferred == sizeof(write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); } @@ -688,19 +768,19 @@ void test_3_arg_mutable_buffer_write() ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data))); s.reset(); - bytes_transferred = asio::write(s, buffers, short_transfer); + bytes_transferred = asio::write(s, buffers, short_transfer()); ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data))); s.reset(); s.next_write_length(1); - bytes_transferred = asio::write(s, buffers, short_transfer); + bytes_transferred = asio::write(s, buffers, short_transfer()); ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data))); s.reset(); s.next_write_length(10); - bytes_transferred = asio::write(s, buffers, short_transfer); + bytes_transferred = asio::write(s, buffers, short_transfer()); ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data))); } @@ -711,7 +791,8 @@ void test_3_arg_vector_buffers_write() test_stream s(ioc); std::vector<asio::const_buffer> buffers; buffers.push_back(asio::buffer(write_data, 32)); - buffers.push_back(asio::buffer(write_data) + 32); + buffers.push_back(asio::buffer(write_data, 39) + 32); + buffers.push_back(asio::buffer(write_data) + 39); s.reset(); size_t bytes_transferred = asio::write(s, buffers, @@ -871,19 +952,232 @@ void test_3_arg_vector_buffers_write() ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); s.reset(); - bytes_transferred = asio::write(s, buffers, short_transfer); + bytes_transferred = asio::write(s, buffers, short_transfer()); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + s.next_write_length(1); + bytes_transferred = asio::write(s, buffers, short_transfer()); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + s.next_write_length(10); + bytes_transferred = asio::write(s, buffers, short_transfer()); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); +} + +void test_3_arg_dynamic_string_write() +{ + asio::io_context ioc; + test_stream s(ioc); + std::string data; + asio::dynamic_string_buffer<char, std::string::traits_type, + std::string::allocator_type> sb + = asio::dynamic_buffer(data, sizeof(write_data)); + asio::const_buffer buffers + = asio::buffer(write_data, sizeof(write_data)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + size_t bytes_transferred = asio::write(s, sb, + asio::transfer_all()); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + bytes_transferred = asio::write(s, sb, + asio::transfer_all()); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + bytes_transferred = asio::write(s, sb, + asio::transfer_all()); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(1)); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(1)); + ASIO_CHECK(bytes_transferred == 1); + ASIO_CHECK(s.check_buffers(buffers, 1)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(1)); + ASIO_CHECK(bytes_transferred == 10); + ASIO_CHECK(s.check_buffers(buffers, 10)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(10)); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(10)); + ASIO_CHECK(bytes_transferred == 10); + ASIO_CHECK(s.check_buffers(buffers, 10)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(10)); + ASIO_CHECK(bytes_transferred == 10); + ASIO_CHECK(s.check_buffers(buffers, 10)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(42)); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(42)); + ASIO_CHECK(bytes_transferred == 42); + ASIO_CHECK(s.check_buffers(buffers, 42)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(42)); + ASIO_CHECK(bytes_transferred == 50); + ASIO_CHECK(s.check_buffers(buffers, 50)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(1)); + ASIO_CHECK(bytes_transferred == 1); + ASIO_CHECK(s.check_buffers(buffers, 1)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(1)); + ASIO_CHECK(bytes_transferred == 1); + ASIO_CHECK(s.check_buffers(buffers, 1)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(1)); + ASIO_CHECK(bytes_transferred == 1); + ASIO_CHECK(s.check_buffers(buffers, 1)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(10)); + ASIO_CHECK(bytes_transferred == 10); + ASIO_CHECK(s.check_buffers(buffers, 10)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(10)); + ASIO_CHECK(bytes_transferred == 10); + ASIO_CHECK(s.check_buffers(buffers, 10)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(10)); + ASIO_CHECK(bytes_transferred == 10); + ASIO_CHECK(s.check_buffers(buffers, 10)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(42)); + ASIO_CHECK(bytes_transferred == 42); + ASIO_CHECK(s.check_buffers(buffers, 42)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(42)); + ASIO_CHECK(bytes_transferred == 42); + ASIO_CHECK(s.check_buffers(buffers, 42)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(42)); + ASIO_CHECK(bytes_transferred == 42); + ASIO_CHECK(s.check_buffers(buffers, 42)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + bytes_transferred = asio::write(s, sb, old_style_transfer_all); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + bytes_transferred = asio::write(s, sb, old_style_transfer_all); ASIO_CHECK(bytes_transferred == sizeof(write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + bytes_transferred = asio::write(s, sb, old_style_transfer_all); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + bytes_transferred = asio::write(s, sb, short_transfer()); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); s.next_write_length(1); - bytes_transferred = asio::write(s, buffers, short_transfer); + bytes_transferred = asio::write(s, sb, short_transfer()); ASIO_CHECK(bytes_transferred == sizeof(write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); s.reset(); + data.assign(write_data, sizeof(write_data)); s.next_write_length(10); - bytes_transferred = asio::write(s, buffers, short_transfer); + bytes_transferred = asio::write(s, sb, short_transfer()); ASIO_CHECK(bytes_transferred == sizeof(write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); } @@ -1103,7 +1397,7 @@ void test_4_arg_const_buffer_write() ASIO_CHECK(!error); s.reset(); - bytes_transferred = asio::write(s, buffers, short_transfer, error); + bytes_transferred = asio::write(s, buffers, short_transfer(), error); ASIO_CHECK(bytes_transferred == sizeof(write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); ASIO_CHECK(!error); @@ -1111,7 +1405,7 @@ void test_4_arg_const_buffer_write() s.reset(); s.next_write_length(1); error = asio::error_code(); - bytes_transferred = asio::write(s, buffers, short_transfer, error); + bytes_transferred = asio::write(s, buffers, short_transfer(), error); ASIO_CHECK(bytes_transferred == sizeof(write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); ASIO_CHECK(!error); @@ -1119,7 +1413,7 @@ void test_4_arg_const_buffer_write() s.reset(); s.next_write_length(10); error = asio::error_code(); - bytes_transferred = asio::write(s, buffers, short_transfer, error); + bytes_transferred = asio::write(s, buffers, short_transfer(), error); ASIO_CHECK(bytes_transferred == sizeof(write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); ASIO_CHECK(!error); @@ -1340,7 +1634,7 @@ void test_4_arg_mutable_buffer_write() ASIO_CHECK(!error); s.reset(); - bytes_transferred = asio::write(s, buffers, short_transfer, error); + bytes_transferred = asio::write(s, buffers, short_transfer(), error); ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data))); ASIO_CHECK(!error); @@ -1348,7 +1642,7 @@ void test_4_arg_mutable_buffer_write() s.reset(); s.next_write_length(1); error = asio::error_code(); - bytes_transferred = asio::write(s, buffers, short_transfer, error); + bytes_transferred = asio::write(s, buffers, short_transfer(), error); ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data))); ASIO_CHECK(!error); @@ -1356,7 +1650,7 @@ void test_4_arg_mutable_buffer_write() s.reset(); s.next_write_length(10); error = asio::error_code(); - bytes_transferred = asio::write(s, buffers, short_transfer, error); + bytes_transferred = asio::write(s, buffers, short_transfer(), error); ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data))); ASIO_CHECK(!error); @@ -1368,7 +1662,8 @@ void test_4_arg_vector_buffers_write() test_stream s(ioc); std::vector<asio::const_buffer> buffers; buffers.push_back(asio::buffer(write_data, 32)); - buffers.push_back(asio::buffer(write_data) + 32); + buffers.push_back(asio::buffer(write_data, 39) + 32); + buffers.push_back(asio::buffer(write_data) + 39); s.reset(); asio::error_code error; @@ -1578,7 +1873,7 @@ void test_4_arg_vector_buffers_write() ASIO_CHECK(!error); s.reset(); - bytes_transferred = asio::write(s, buffers, short_transfer, error); + bytes_transferred = asio::write(s, buffers, short_transfer(), error); ASIO_CHECK(bytes_transferred == sizeof(write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); ASIO_CHECK(!error); @@ -1586,7 +1881,7 @@ void test_4_arg_vector_buffers_write() s.reset(); s.next_write_length(1); error = asio::error_code(); - bytes_transferred = asio::write(s, buffers, short_transfer, error); + bytes_transferred = asio::write(s, buffers, short_transfer(), error); ASIO_CHECK(bytes_transferred == sizeof(write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); ASIO_CHECK(!error); @@ -1594,7 +1889,275 @@ void test_4_arg_vector_buffers_write() s.reset(); s.next_write_length(10); error = asio::error_code(); - bytes_transferred = asio::write(s, buffers, short_transfer, error); + bytes_transferred = asio::write(s, buffers, short_transfer(), error); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + ASIO_CHECK(!error); +} + +void test_4_arg_dynamic_string_write() +{ + asio::io_context ioc; + test_stream s(ioc); + std::string data; + asio::dynamic_string_buffer<char, std::string::traits_type, + std::string::allocator_type> sb + = asio::dynamic_buffer(data, sizeof(write_data)); + asio::const_buffer buffers + = asio::buffer(write_data, sizeof(write_data)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + asio::error_code error; + size_t bytes_transferred = asio::write(s, sb, + asio::transfer_all(), error); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_all(), error); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_all(), error); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(1), error); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(1), error); + ASIO_CHECK(bytes_transferred == 1); + ASIO_CHECK(s.check_buffers(buffers, 1)); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(1), error); + ASIO_CHECK(bytes_transferred == 10); + ASIO_CHECK(s.check_buffers(buffers, 10)); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(10), error); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(10), error); + ASIO_CHECK(bytes_transferred == 10); + ASIO_CHECK(s.check_buffers(buffers, 10)); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(10), error); + ASIO_CHECK(bytes_transferred == 10); + ASIO_CHECK(s.check_buffers(buffers, 10)); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(42), error); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(42), error); + ASIO_CHECK(bytes_transferred == 42); + ASIO_CHECK(s.check_buffers(buffers, 42)); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_at_least(42), error); + ASIO_CHECK(bytes_transferred == 50); + ASIO_CHECK(s.check_buffers(buffers, 50)); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(1), error); + ASIO_CHECK(bytes_transferred == 1); + ASIO_CHECK(s.check_buffers(buffers, 1)); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(1), error); + ASIO_CHECK(bytes_transferred == 1); + ASIO_CHECK(s.check_buffers(buffers, 1)); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(1), error); + ASIO_CHECK(bytes_transferred == 1); + ASIO_CHECK(s.check_buffers(buffers, 1)); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(10), error); + ASIO_CHECK(bytes_transferred == 10); + ASIO_CHECK(s.check_buffers(buffers, 10)); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(10), error); + ASIO_CHECK(bytes_transferred == 10); + ASIO_CHECK(s.check_buffers(buffers, 10)); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(10), error); + ASIO_CHECK(bytes_transferred == 10); + ASIO_CHECK(s.check_buffers(buffers, 10)); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(42), error); + ASIO_CHECK(bytes_transferred == 42); + ASIO_CHECK(s.check_buffers(buffers, 42)); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(42), error); + ASIO_CHECK(bytes_transferred == 42); + ASIO_CHECK(s.check_buffers(buffers, 42)); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + asio::transfer_exactly(42), error); + ASIO_CHECK(bytes_transferred == 42); + ASIO_CHECK(s.check_buffers(buffers, 42)); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + bytes_transferred = asio::write(s, sb, + old_style_transfer_all, error); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + old_style_transfer_all, error); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, + old_style_transfer_all, error); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + bytes_transferred = asio::write(s, sb, short_transfer(), error); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, short_transfer(), error); + ASIO_CHECK(bytes_transferred == sizeof(write_data)); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + ASIO_CHECK(!error); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + error = asio::error_code(); + bytes_transferred = asio::write(s, sb, short_transfer(), error); ASIO_CHECK(bytes_transferred == sizeof(write_data)); ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); ASIO_CHECK(!error); @@ -1614,9 +2177,9 @@ void test_3_arg_const_buffer_async_write() namespace bindns = boost; #else // defined(ASIO_HAS_BOOST_BIND) namespace bindns = std; - using std::placeholders::_1; - using std::placeholders::_2; #endif // defined(ASIO_HAS_BOOST_BIND) + using bindns::placeholders::_1; + using bindns::placeholders::_2; asio::io_context ioc; test_stream s(ioc); @@ -1669,9 +2232,9 @@ void test_3_arg_mutable_buffer_async_write() namespace bindns = boost; #else // defined(ASIO_HAS_BOOST_BIND) namespace bindns = std; - using std::placeholders::_1; - using std::placeholders::_2; #endif // defined(ASIO_HAS_BOOST_BIND) + using bindns::placeholders::_1; + using bindns::placeholders::_2; asio::io_context ioc; test_stream s(ioc); @@ -1724,9 +2287,9 @@ void test_3_arg_boost_array_buffers_async_write() namespace bindns = boost; #else // defined(ASIO_HAS_BOOST_BIND) namespace bindns = std; - using std::placeholders::_1; - using std::placeholders::_2; #endif // defined(ASIO_HAS_BOOST_BIND) + using bindns::placeholders::_1; + using bindns::placeholders::_2; #if defined(ASIO_HAS_BOOST_ARRAY) asio::io_context ioc; @@ -1782,9 +2345,9 @@ void test_3_arg_std_array_buffers_async_write() namespace bindns = boost; #else // defined(ASIO_HAS_BOOST_BIND) namespace bindns = std; - using std::placeholders::_1; - using std::placeholders::_2; #endif // defined(ASIO_HAS_BOOST_BIND) + using bindns::placeholders::_1; + using bindns::placeholders::_2; #if defined(ASIO_HAS_STD_ARRAY) asio::io_context ioc; @@ -1840,15 +2403,16 @@ void test_3_arg_vector_buffers_async_write() namespace bindns = boost; #else // defined(ASIO_HAS_BOOST_BIND) namespace bindns = std; - using std::placeholders::_1; - using std::placeholders::_2; #endif // defined(ASIO_HAS_BOOST_BIND) + using bindns::placeholders::_1; + using bindns::placeholders::_2; asio::io_context ioc; test_stream s(ioc); std::vector<asio::const_buffer> buffers; buffers.push_back(asio::buffer(write_data, 32)); - buffers.push_back(asio::buffer(write_data) + 32); + buffers.push_back(asio::buffer(write_data, 39) + 32); + buffers.push_back(asio::buffer(write_data) + 39); s.reset(); bool called = false; @@ -1890,15 +2454,79 @@ void test_3_arg_vector_buffers_async_write() ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); } +void test_3_arg_dynamic_string_async_write() +{ +#if defined(ASIO_HAS_BOOST_BIND) + namespace bindns = boost; +#else // defined(ASIO_HAS_BOOST_BIND) + namespace bindns = std; +#endif // defined(ASIO_HAS_BOOST_BIND) + using bindns::placeholders::_1; + using bindns::placeholders::_2; + + asio::io_context ioc; + test_stream s(ioc); + std::string data; + asio::dynamic_string_buffer<char, std::string::traits_type, + std::string::allocator_type> sb + = asio::dynamic_buffer(data, sizeof(write_data)); + asio::const_buffer buffers + = asio::buffer(write_data, sizeof(write_data)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + bool called = false; + asio::async_write(s, sb, + bindns::bind(async_write_handler, + _1, _2, sizeof(write_data), &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + called = false; + asio::async_write(s, sb, + bindns::bind(async_write_handler, + _1, _2, sizeof(write_data), &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + called = false; + asio::async_write(s, sb, + bindns::bind(async_write_handler, + _1, _2, sizeof(write_data), &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + int i = asio::async_write(s, sb, archetypes::lazy_handler()); + ASIO_CHECK(i == 42); + ioc.restart(); + ioc.run(); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); +} + void test_3_arg_streambuf_async_write() { +#if !defined(ASIO_NO_DYNAMIC_BUFFER_V1) #if defined(ASIO_HAS_BOOST_BIND) namespace bindns = boost; #else // defined(ASIO_HAS_BOOST_BIND) namespace bindns = std; - using std::placeholders::_1; - using std::placeholders::_2; #endif // defined(ASIO_HAS_BOOST_BIND) + using bindns::placeholders::_1; + using bindns::placeholders::_2; asio::io_context ioc; test_stream s(ioc); @@ -1952,6 +2580,7 @@ void test_3_arg_streambuf_async_write() ioc.restart(); ioc.run(); ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); +#endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1) } void test_4_arg_const_buffer_async_write() @@ -1960,9 +2589,9 @@ void test_4_arg_const_buffer_async_write() namespace bindns = boost; #else // defined(ASIO_HAS_BOOST_BIND) namespace bindns = std; - using std::placeholders::_1; - using std::placeholders::_2; #endif // defined(ASIO_HAS_BOOST_BIND) + using bindns::placeholders::_1; + using bindns::placeholders::_2; asio::io_context ioc; test_stream s(ioc); @@ -2227,7 +2856,7 @@ void test_4_arg_const_buffer_async_write() s.reset(); called = false; - asio::async_write(s, buffers, short_transfer, + asio::async_write(s, buffers, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(write_data), &called)); ioc.restart(); @@ -2238,7 +2867,7 @@ void test_4_arg_const_buffer_async_write() s.reset(); s.next_write_length(1); called = false; - asio::async_write(s, buffers, short_transfer, + asio::async_write(s, buffers, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(write_data), &called)); ioc.restart(); @@ -2249,7 +2878,7 @@ void test_4_arg_const_buffer_async_write() s.reset(); s.next_write_length(10); called = false; - asio::async_write(s, buffers, short_transfer, + asio::async_write(s, buffers, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(write_data), &called)); ioc.restart(); @@ -2258,7 +2887,7 @@ void test_4_arg_const_buffer_async_write() ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); s.reset(); - int i = asio::async_write(s, buffers, short_transfer, + int i = asio::async_write(s, buffers, short_transfer(), archetypes::lazy_handler()); ASIO_CHECK(i == 42); ioc.restart(); @@ -2272,9 +2901,9 @@ void test_4_arg_mutable_buffer_async_write() namespace bindns = boost; #else // defined(ASIO_HAS_BOOST_BIND) namespace bindns = std; - using std::placeholders::_1; - using std::placeholders::_2; #endif // defined(ASIO_HAS_BOOST_BIND) + using bindns::placeholders::_1; + using bindns::placeholders::_2; asio::io_context ioc; test_stream s(ioc); @@ -2539,7 +3168,7 @@ void test_4_arg_mutable_buffer_async_write() s.reset(); called = false; - asio::async_write(s, buffers, short_transfer, + asio::async_write(s, buffers, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(mutable_write_data), &called)); ioc.restart(); @@ -2550,7 +3179,7 @@ void test_4_arg_mutable_buffer_async_write() s.reset(); s.next_write_length(1); called = false; - asio::async_write(s, buffers, short_transfer, + asio::async_write(s, buffers, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(mutable_write_data), &called)); ioc.restart(); @@ -2561,7 +3190,7 @@ void test_4_arg_mutable_buffer_async_write() s.reset(); s.next_write_length(10); called = false; - asio::async_write(s, buffers, short_transfer, + asio::async_write(s, buffers, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(mutable_write_data), &called)); ioc.restart(); @@ -2570,7 +3199,7 @@ void test_4_arg_mutable_buffer_async_write() ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data))); s.reset(); - int i = asio::async_write(s, buffers, short_transfer, + int i = asio::async_write(s, buffers, short_transfer(), archetypes::lazy_handler()); ASIO_CHECK(i == 42); ioc.restart(); @@ -2584,9 +3213,9 @@ void test_4_arg_boost_array_buffers_async_write() namespace bindns = boost; #else // defined(ASIO_HAS_BOOST_BIND) namespace bindns = std; - using std::placeholders::_1; - using std::placeholders::_2; #endif // defined(ASIO_HAS_BOOST_BIND) + using bindns::placeholders::_1; + using bindns::placeholders::_2; #if defined(ASIO_HAS_BOOST_ARRAY) asio::io_context ioc; @@ -2853,7 +3482,7 @@ void test_4_arg_boost_array_buffers_async_write() s.reset(); called = false; - asio::async_write(s, buffers, short_transfer, + asio::async_write(s, buffers, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(write_data), &called)); ioc.restart(); @@ -2864,7 +3493,7 @@ void test_4_arg_boost_array_buffers_async_write() s.reset(); s.next_write_length(1); called = false; - asio::async_write(s, buffers, short_transfer, + asio::async_write(s, buffers, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(write_data), &called)); ioc.restart(); @@ -2875,7 +3504,7 @@ void test_4_arg_boost_array_buffers_async_write() s.reset(); s.next_write_length(10); called = false; - asio::async_write(s, buffers, short_transfer, + asio::async_write(s, buffers, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(write_data), &called)); ioc.restart(); @@ -2884,7 +3513,7 @@ void test_4_arg_boost_array_buffers_async_write() ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); s.reset(); - int i = asio::async_write(s, buffers, short_transfer, + int i = asio::async_write(s, buffers, short_transfer(), archetypes::lazy_handler()); ASIO_CHECK(i == 42); ioc.restart(); @@ -2899,9 +3528,9 @@ void test_4_arg_std_array_buffers_async_write() namespace bindns = boost; #else // defined(ASIO_HAS_BOOST_BIND) namespace bindns = std; - using std::placeholders::_1; - using std::placeholders::_2; #endif // defined(ASIO_HAS_BOOST_BIND) + using bindns::placeholders::_1; + using bindns::placeholders::_2; #if defined(ASIO_HAS_STD_ARRAY) asio::io_context ioc; @@ -3168,7 +3797,7 @@ void test_4_arg_std_array_buffers_async_write() s.reset(); called = false; - asio::async_write(s, buffers, short_transfer, + asio::async_write(s, buffers, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(write_data), &called)); ioc.restart(); @@ -3179,7 +3808,7 @@ void test_4_arg_std_array_buffers_async_write() s.reset(); s.next_write_length(1); called = false; - asio::async_write(s, buffers, short_transfer, + asio::async_write(s, buffers, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(write_data), &called)); ioc.restart(); @@ -3190,7 +3819,7 @@ void test_4_arg_std_array_buffers_async_write() s.reset(); s.next_write_length(10); called = false; - asio::async_write(s, buffers, short_transfer, + asio::async_write(s, buffers, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(write_data), &called)); ioc.restart(); @@ -3199,7 +3828,7 @@ void test_4_arg_std_array_buffers_async_write() ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); s.reset(); - int i = asio::async_write(s, buffers, short_transfer, + int i = asio::async_write(s, buffers, short_transfer(), archetypes::lazy_handler()); ASIO_CHECK(i == 42); ioc.restart(); @@ -3214,15 +3843,16 @@ void test_4_arg_vector_buffers_async_write() namespace bindns = boost; #else // defined(ASIO_HAS_BOOST_BIND) namespace bindns = std; - using std::placeholders::_1; - using std::placeholders::_2; #endif // defined(ASIO_HAS_BOOST_BIND) + using bindns::placeholders::_1; + using bindns::placeholders::_2; asio::io_context ioc; test_stream s(ioc); std::vector<asio::const_buffer> buffers; buffers.push_back(asio::buffer(write_data, 32)); - buffers.push_back(asio::buffer(write_data) + 32); + buffers.push_back(asio::buffer(write_data, 39) + 32); + buffers.push_back(asio::buffer(write_data) + 39); s.reset(); bool called = false; @@ -3482,7 +4112,348 @@ void test_4_arg_vector_buffers_async_write() s.reset(); called = false; - asio::async_write(s, buffers, short_transfer, + asio::async_write(s, buffers, short_transfer(), + bindns::bind(async_write_handler, + _1, _2, sizeof(write_data), &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + s.next_write_length(1); + called = false; + asio::async_write(s, buffers, short_transfer(), + bindns::bind(async_write_handler, + _1, _2, sizeof(write_data), &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + s.next_write_length(10); + called = false; + asio::async_write(s, buffers, short_transfer(), + bindns::bind(async_write_handler, + _1, _2, sizeof(write_data), &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + int i = asio::async_write(s, buffers, short_transfer(), + archetypes::lazy_handler()); + ASIO_CHECK(i == 42); + ioc.restart(); + ioc.run(); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); +} + +void test_4_arg_dynamic_string_async_write() +{ +#if defined(ASIO_HAS_BOOST_BIND) + namespace bindns = boost; +#else // defined(ASIO_HAS_BOOST_BIND) + namespace bindns = std; +#endif // defined(ASIO_HAS_BOOST_BIND) + using bindns::placeholders::_1; + using bindns::placeholders::_2; + + asio::io_context ioc; + test_stream s(ioc); + std::string data; + asio::dynamic_string_buffer<char, std::string::traits_type, + std::string::allocator_type> sb + = asio::dynamic_buffer(data, sizeof(write_data)); + asio::const_buffer buffers + = asio::buffer(write_data, sizeof(write_data)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + bool called = false; + asio::async_write(s, sb, asio::transfer_all(), + bindns::bind(async_write_handler, + _1, _2, sizeof(write_data), &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + called = false; + asio::async_write(s, sb, asio::transfer_all(), + bindns::bind(async_write_handler, + _1, _2, sizeof(write_data), &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + called = false; + asio::async_write(s, sb, asio::transfer_all(), + bindns::bind(async_write_handler, + _1, _2, sizeof(write_data), &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + called = false; + asio::async_write(s, sb, asio::transfer_at_least(1), + bindns::bind(async_write_handler, + _1, _2, sizeof(write_data), &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + called = false; + asio::async_write(s, sb, asio::transfer_at_least(1), + bindns::bind(async_write_handler, + _1, _2, 1, &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, 1)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + called = false; + asio::async_write(s, sb, asio::transfer_at_least(1), + bindns::bind(async_write_handler, + _1, _2, 10, &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, 10)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + called = false; + asio::async_write(s, sb, asio::transfer_at_least(10), + bindns::bind(async_write_handler, + _1, _2, sizeof(write_data), &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + called = false; + asio::async_write(s, sb, asio::transfer_at_least(10), + bindns::bind(async_write_handler, + _1, _2, 10, &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, 10)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + called = false; + asio::async_write(s, sb, asio::transfer_at_least(10), + bindns::bind(async_write_handler, + _1, _2, 10, &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, 10)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + called = false; + asio::async_write(s, sb, asio::transfer_at_least(42), + bindns::bind(async_write_handler, + _1, _2, sizeof(write_data), &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + called = false; + asio::async_write(s, sb, asio::transfer_at_least(42), + bindns::bind(async_write_handler, + _1, _2, 42, &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, 42)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + called = false; + asio::async_write(s, sb, asio::transfer_at_least(42), + bindns::bind(async_write_handler, + _1, _2, 50, &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, 50)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + called = false; + asio::async_write(s, sb, asio::transfer_exactly(1), + bindns::bind(async_write_handler, + _1, _2, 1, &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, 1)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + called = false; + asio::async_write(s, sb, asio::transfer_exactly(1), + bindns::bind(async_write_handler, + _1, _2, 1, &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, 1)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + called = false; + asio::async_write(s, sb, asio::transfer_exactly(1), + bindns::bind(async_write_handler, + _1, _2, 1, &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, 1)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + called = false; + asio::async_write(s, sb, asio::transfer_exactly(10), + bindns::bind(async_write_handler, + _1, _2, 10, &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, 10)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + called = false; + asio::async_write(s, sb, asio::transfer_exactly(10), + bindns::bind(async_write_handler, + _1, _2, 10, &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, 10)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + called = false; + asio::async_write(s, sb, asio::transfer_exactly(10), + bindns::bind(async_write_handler, + _1, _2, 10, &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, 10)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + called = false; + asio::async_write(s, sb, asio::transfer_exactly(42), + bindns::bind(async_write_handler, + _1, _2, 42, &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, 42)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + called = false; + asio::async_write(s, sb, asio::transfer_exactly(42), + bindns::bind(async_write_handler, + _1, _2, 42, &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, 42)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + called = false; + asio::async_write(s, sb, asio::transfer_exactly(42), + bindns::bind(async_write_handler, + _1, _2, 42, &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, 42)); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + called = false; + asio::async_write(s, sb, old_style_transfer_all, + bindns::bind(async_write_handler, + _1, _2, sizeof(write_data), &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(1); + called = false; + asio::async_write(s, sb, old_style_transfer_all, + bindns::bind(async_write_handler, + _1, _2, sizeof(write_data), &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + s.next_write_length(10); + called = false; + asio::async_write(s, sb, old_style_transfer_all, + bindns::bind(async_write_handler, + _1, _2, sizeof(write_data), &called)); + ioc.restart(); + ioc.run(); + ASIO_CHECK(called); + ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); + + s.reset(); + data.assign(write_data, sizeof(write_data)); + called = false; + asio::async_write(s, sb, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(write_data), &called)); ioc.restart(); @@ -3491,9 +4462,10 @@ void test_4_arg_vector_buffers_async_write() ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); s.reset(); + data.assign(write_data, sizeof(write_data)); s.next_write_length(1); called = false; - asio::async_write(s, buffers, short_transfer, + asio::async_write(s, sb, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(write_data), &called)); ioc.restart(); @@ -3502,9 +4474,10 @@ void test_4_arg_vector_buffers_async_write() ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); s.reset(); + data.assign(write_data, sizeof(write_data)); s.next_write_length(10); called = false; - asio::async_write(s, buffers, short_transfer, + asio::async_write(s, sb, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(write_data), &called)); ioc.restart(); @@ -3513,7 +4486,8 @@ void test_4_arg_vector_buffers_async_write() ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); s.reset(); - int i = asio::async_write(s, buffers, short_transfer, + data.assign(write_data, sizeof(write_data)); + int i = asio::async_write(s, sb, short_transfer(), archetypes::lazy_handler()); ASIO_CHECK(i == 42); ioc.restart(); @@ -3523,13 +4497,14 @@ void test_4_arg_vector_buffers_async_write() void test_4_arg_streambuf_async_write() { +#if !defined(ASIO_NO_DYNAMIC_BUFFER_V1) #if defined(ASIO_HAS_BOOST_BIND) namespace bindns = boost; #else // defined(ASIO_HAS_BOOST_BIND) namespace bindns = std; - using std::placeholders::_1; - using std::placeholders::_2; #endif // defined(ASIO_HAS_BOOST_BIND) + using bindns::placeholders::_1; + using bindns::placeholders::_2; asio::io_context ioc; test_stream s(ioc); @@ -3845,7 +4820,7 @@ void test_4_arg_streambuf_async_write() sb.consume(sb.size()); sb.sputn(write_data, sizeof(write_data)); called = false; - asio::async_write(s, sb, short_transfer, + asio::async_write(s, sb, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(write_data), &called)); ioc.restart(); @@ -3858,7 +4833,7 @@ void test_4_arg_streambuf_async_write() sb.sputn(write_data, sizeof(write_data)); s.next_write_length(1); called = false; - asio::async_write(s, sb, short_transfer, + asio::async_write(s, sb, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(write_data), &called)); ioc.restart(); @@ -3871,7 +4846,7 @@ void test_4_arg_streambuf_async_write() sb.sputn(write_data, sizeof(write_data)); s.next_write_length(10); called = false; - asio::async_write(s, sb, short_transfer, + asio::async_write(s, sb, short_transfer(), bindns::bind(async_write_handler, _1, _2, sizeof(write_data), &called)); ioc.restart(); @@ -3882,12 +4857,13 @@ void test_4_arg_streambuf_async_write() s.reset(); sb.consume(sb.size()); sb.sputn(write_data, sizeof(write_data)); - int i = asio::async_write(s, sb, short_transfer, + int i = asio::async_write(s, sb, short_transfer(), archetypes::lazy_handler()); ASIO_CHECK(i == 42); ioc.restart(); ioc.run(); ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data))); +#endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1) } ASIO_TEST_SUITE @@ -3897,26 +4873,32 @@ ASIO_TEST_SUITE ASIO_TEST_CASE(test_2_arg_const_buffer_write) ASIO_TEST_CASE(test_2_arg_mutable_buffer_write) ASIO_TEST_CASE(test_2_arg_vector_buffers_write) + ASIO_TEST_CASE(test_2_arg_dynamic_string_write) ASIO_TEST_CASE(test_3_arg_nothrow_zero_buffers_write) ASIO_TEST_CASE(test_3_arg_nothrow_const_buffer_write) ASIO_TEST_CASE(test_3_arg_nothrow_mutable_buffer_write) ASIO_TEST_CASE(test_3_arg_nothrow_vector_buffers_write) + ASIO_TEST_CASE(test_3_arg_nothrow_dynamic_string_write) ASIO_TEST_CASE(test_3_arg_const_buffer_write) ASIO_TEST_CASE(test_3_arg_mutable_buffer_write) ASIO_TEST_CASE(test_3_arg_vector_buffers_write) + ASIO_TEST_CASE(test_3_arg_dynamic_string_write) ASIO_TEST_CASE(test_4_arg_const_buffer_write) ASIO_TEST_CASE(test_4_arg_mutable_buffer_write) ASIO_TEST_CASE(test_4_arg_vector_buffers_write) + ASIO_TEST_CASE(test_4_arg_dynamic_string_write) ASIO_TEST_CASE(test_3_arg_const_buffer_async_write) ASIO_TEST_CASE(test_3_arg_mutable_buffer_async_write) ASIO_TEST_CASE(test_3_arg_boost_array_buffers_async_write) ASIO_TEST_CASE(test_3_arg_std_array_buffers_async_write) ASIO_TEST_CASE(test_3_arg_vector_buffers_async_write) + ASIO_TEST_CASE(test_3_arg_dynamic_string_async_write) ASIO_TEST_CASE(test_3_arg_streambuf_async_write) ASIO_TEST_CASE(test_4_arg_const_buffer_async_write) ASIO_TEST_CASE(test_4_arg_mutable_buffer_async_write) ASIO_TEST_CASE(test_4_arg_boost_array_buffers_async_write) ASIO_TEST_CASE(test_4_arg_std_array_buffers_async_write) ASIO_TEST_CASE(test_4_arg_vector_buffers_async_write) + ASIO_TEST_CASE(test_4_arg_dynamic_string_async_write) ASIO_TEST_CASE(test_4_arg_streambuf_async_write) ) |