]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/asio/test/read.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / asio / test / read.cpp
CommitLineData
7c673cae
FG
1//
2// read.cpp
3// ~~~~~~~~
4//
1e59de90 5// Copyright (c) 2003-2022 Christopher M. Kohlhoff (chris at kohlhoff dot com)
7c673cae
FG
6//
7// Distributed under the Boost Software License, Version 1.0. (See accompanying
8// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9//
10
11// Disable autolinking for unit tests.
12#if !defined(BOOST_ALL_NO_LIB)
13#define BOOST_ALL_NO_LIB 1
14#endif // !defined(BOOST_ALL_NO_LIB)
15
16// Test that header file is self-contained.
17#include <boost/asio/read.hpp>
18
19#include <cstring>
20#include <vector>
21#include "archetypes/async_result.hpp"
b32b8144
FG
22#include <boost/asio/io_context.hpp>
23#include <boost/asio/post.hpp>
7c673cae
FG
24#include <boost/asio/streambuf.hpp>
25#include "unit_test.hpp"
26
27#if defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2 28# include <boost/bind/bind.hpp>
7c673cae
FG
29#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
30# include <functional>
31#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
32
33#if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
34#include <boost/array.hpp>
35#endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
36
37#if defined(BOOST_ASIO_HAS_STD_ARRAY)
38# include <array>
39#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
40
41using namespace std; // For memcmp, memcpy and memset.
42
43class test_stream
44{
45public:
b32b8144 46 typedef boost::asio::io_context::executor_type executor_type;
7c673cae 47
b32b8144
FG
48 test_stream(boost::asio::io_context& io_context)
49 : io_context_(io_context),
7c673cae
FG
50 length_(0),
51 position_(0),
52 next_read_length_(0)
53 {
54 }
55
b32b8144 56 executor_type get_executor() BOOST_ASIO_NOEXCEPT
7c673cae 57 {
b32b8144 58 return io_context_.get_executor();
7c673cae
FG
59 }
60
61 void reset(const void* data, size_t length)
62 {
63 BOOST_ASIO_CHECK(length <= max_length);
64
65 memcpy(data_, data, length);
66 length_ = length;
67 position_ = 0;
68 next_read_length_ = length;
69 }
70
71 void next_read_length(size_t length)
72 {
73 next_read_length_ = length;
74 }
75
b32b8144
FG
76 template <typename Iterator>
77 bool check_buffers(Iterator begin, Iterator end, size_t length)
7c673cae
FG
78 {
79 if (length != position_)
80 return false;
81
b32b8144 82 Iterator iter = begin;
7c673cae
FG
83 size_t checked_length = 0;
84 for (; iter != end && checked_length < length; ++iter)
85 {
86 size_t buffer_length = boost::asio::buffer_size(*iter);
87 if (buffer_length > length - checked_length)
88 buffer_length = length - checked_length;
b32b8144 89 if (memcmp(data_ + checked_length, iter->data(), buffer_length) != 0)
7c673cae
FG
90 return false;
91 checked_length += buffer_length;
92 }
93
94 return true;
95 }
96
b32b8144
FG
97 template <typename Const_Buffers>
98 bool check_buffers(const Const_Buffers& buffers, size_t length)
99 {
100 return check_buffers(boost::asio::buffer_sequence_begin(buffers),
101 boost::asio::buffer_sequence_end(buffers), length);
102 }
103
7c673cae
FG
104 template <typename Mutable_Buffers>
105 size_t read_some(const Mutable_Buffers& buffers)
106 {
107 size_t n = boost::asio::buffer_copy(buffers,
108 boost::asio::buffer(data_, length_) + position_,
109 next_read_length_);
110 position_ += n;
111 return n;
112 }
113
114 template <typename Mutable_Buffers>
115 size_t read_some(const Mutable_Buffers& buffers,
116 boost::system::error_code& ec)
117 {
118 ec = boost::system::error_code();
119 return read_some(buffers);
120 }
121
122 template <typename Mutable_Buffers, typename Handler>
92f5a8d4
TL
123 void async_read_some(const Mutable_Buffers& buffers,
124 BOOST_ASIO_MOVE_ARG(Handler) handler)
7c673cae
FG
125 {
126 size_t bytes_transferred = read_some(buffers);
b32b8144
FG
127 boost::asio::post(get_executor(),
128 boost::asio::detail::bind_handler(
129 BOOST_ASIO_MOVE_CAST(Handler)(handler),
130 boost::system::error_code(), bytes_transferred));
7c673cae
FG
131 }
132
133private:
b32b8144 134 boost::asio::io_context& io_context_;
7c673cae
FG
135 enum { max_length = 8192 };
136 char data_[max_length];
137 size_t length_;
138 size_t position_;
139 size_t next_read_length_;
140};
141
142static const char read_data[]
143 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
144
145void test_2_arg_zero_buffers_read()
146{
b32b8144
FG
147 boost::asio::io_context ioc;
148 test_stream s(ioc);
7c673cae
FG
149 std::vector<boost::asio::mutable_buffer> buffers;
150
151 size_t bytes_transferred = boost::asio::read(s, buffers);
152 BOOST_ASIO_CHECK(bytes_transferred == 0);
153}
154
b32b8144 155void test_2_arg_mutable_buffer_read()
7c673cae 156{
b32b8144
FG
157 boost::asio::io_context ioc;
158 test_stream s(ioc);
7c673cae 159 char read_buf[sizeof(read_data)];
b32b8144 160 boost::asio::mutable_buffer buffers
7c673cae
FG
161 = boost::asio::buffer(read_buf, sizeof(read_buf));
162
163 s.reset(read_data, sizeof(read_data));
164 memset(read_buf, 0, sizeof(read_buf));
165 size_t bytes_transferred = boost::asio::read(s, buffers);
166 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
167 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
168
169 s.reset(read_data, sizeof(read_data));
170 s.next_read_length(1);
171 memset(read_buf, 0, sizeof(read_buf));
172 bytes_transferred = boost::asio::read(s, buffers);
173 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
174 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
175
176 s.reset(read_data, sizeof(read_data));
177 s.next_read_length(10);
178 memset(read_buf, 0, sizeof(read_buf));
179 bytes_transferred = boost::asio::read(s, buffers);
180 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
181 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
182}
183
184void test_2_arg_vector_buffers_read()
185{
b32b8144
FG
186 boost::asio::io_context ioc;
187 test_stream s(ioc);
7c673cae
FG
188 char read_buf[sizeof(read_data)];
189 std::vector<boost::asio::mutable_buffer> buffers;
190 buffers.push_back(boost::asio::buffer(read_buf, 32));
b32b8144
FG
191 buffers.push_back(boost::asio::buffer(read_buf, 39) + 32);
192 buffers.push_back(boost::asio::buffer(read_buf) + 39);
7c673cae
FG
193
194 s.reset(read_data, sizeof(read_data));
195 memset(read_buf, 0, sizeof(read_buf));
196 size_t bytes_transferred = boost::asio::read(s, buffers);
197 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
198 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
199
200 s.reset(read_data, sizeof(read_data));
201 s.next_read_length(1);
202 memset(read_buf, 0, sizeof(read_buf));
203 bytes_transferred = boost::asio::read(s, buffers);
204 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
205 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
206
207 s.reset(read_data, sizeof(read_data));
208 s.next_read_length(10);
209 memset(read_buf, 0, sizeof(read_buf));
210 bytes_transferred = boost::asio::read(s, buffers);
211 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
212 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
213}
214
92f5a8d4
TL
215void test_2_arg_dynamic_string_read()
216{
217 boost::asio::io_context ioc;
218 test_stream s(ioc);
219 std::string data;
220 boost::asio::dynamic_string_buffer<char, std::string::traits_type,
221 std::string::allocator_type> sb
222 = boost::asio::dynamic_buffer(data, sizeof(read_data));
223
224 s.reset(read_data, sizeof(read_data));
225 sb.consume(sb.size());
226 size_t bytes_transferred = boost::asio::read(s, sb);
227 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
228 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
229 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
230
231 s.reset(read_data, sizeof(read_data));
232 s.next_read_length(1);
233 sb.consume(sb.size());
234 bytes_transferred = boost::asio::read(s, sb);
235 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
236 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
237 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
238
239 s.reset(read_data, sizeof(read_data));
240 s.next_read_length(10);
241 sb.consume(sb.size());
242 bytes_transferred = boost::asio::read(s, sb);
243 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
244 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
245 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
246}
247
7c673cae
FG
248void test_2_arg_streambuf_read()
249{
92f5a8d4 250#if !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
b32b8144
FG
251 boost::asio::io_context ioc;
252 test_stream s(ioc);
7c673cae
FG
253 boost::asio::streambuf sb(sizeof(read_data));
254
255 s.reset(read_data, sizeof(read_data));
256 sb.consume(sb.size());
257 size_t bytes_transferred = boost::asio::read(s, sb);
258 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
259 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
260 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
261
262 s.reset(read_data, sizeof(read_data));
263 s.next_read_length(1);
264 sb.consume(sb.size());
265 bytes_transferred = boost::asio::read(s, sb);
266 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
267 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
268 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
269
270 s.reset(read_data, sizeof(read_data));
271 s.next_read_length(10);
272 sb.consume(sb.size());
273 bytes_transferred = boost::asio::read(s, sb);
274 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
275 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
276 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
92f5a8d4 277#endif // !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
7c673cae
FG
278}
279
280void test_3_arg_nothrow_zero_buffers_read()
281{
b32b8144
FG
282 boost::asio::io_context ioc;
283 test_stream s(ioc);
7c673cae
FG
284 std::vector<boost::asio::mutable_buffer> buffers;
285
286 boost::system::error_code error;
287 size_t bytes_transferred = boost::asio::read(s, buffers, error);
288 BOOST_ASIO_CHECK(bytes_transferred == 0);
289 BOOST_ASIO_CHECK(!error);
290}
291
b32b8144 292void test_3_arg_nothrow_mutable_buffer_read()
7c673cae 293{
b32b8144
FG
294 boost::asio::io_context ioc;
295 test_stream s(ioc);
7c673cae 296 char read_buf[sizeof(read_data)];
b32b8144 297 boost::asio::mutable_buffer buffers
7c673cae
FG
298 = boost::asio::buffer(read_buf, sizeof(read_buf));
299
300 s.reset(read_data, sizeof(read_data));
301 memset(read_buf, 0, sizeof(read_buf));
302 boost::system::error_code error;
303 size_t bytes_transferred = boost::asio::read(s, buffers, error);
304 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
305 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
306 BOOST_ASIO_CHECK(!error);
307
308 s.reset(read_data, sizeof(read_data));
309 s.next_read_length(1);
310 memset(read_buf, 0, sizeof(read_buf));
311 bytes_transferred = boost::asio::read(s, buffers, error);
312 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
313 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
314 BOOST_ASIO_CHECK(!error);
315
316 s.reset(read_data, sizeof(read_data));
317 s.next_read_length(10);
318 memset(read_buf, 0, sizeof(read_buf));
319 bytes_transferred = boost::asio::read(s, buffers, error);
320 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
321 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
322 BOOST_ASIO_CHECK(!error);
323}
324
325void test_3_arg_nothrow_vector_buffers_read()
326{
b32b8144
FG
327 boost::asio::io_context ioc;
328 test_stream s(ioc);
7c673cae
FG
329 char read_buf[sizeof(read_data)];
330 std::vector<boost::asio::mutable_buffer> buffers;
331 buffers.push_back(boost::asio::buffer(read_buf, 32));
b32b8144
FG
332 buffers.push_back(boost::asio::buffer(read_buf, 39) + 32);
333 buffers.push_back(boost::asio::buffer(read_buf) + 39);
7c673cae
FG
334
335 s.reset(read_data, sizeof(read_data));
336 memset(read_buf, 0, sizeof(read_buf));
337 boost::system::error_code error;
338 size_t bytes_transferred = boost::asio::read(s, buffers, error);
339 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
340 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
341 BOOST_ASIO_CHECK(!error);
342
343 s.reset(read_data, sizeof(read_data));
344 s.next_read_length(1);
345 memset(read_buf, 0, sizeof(read_buf));
346 bytes_transferred = boost::asio::read(s, buffers, error);
347 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
348 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
349 BOOST_ASIO_CHECK(!error);
350
351 s.reset(read_data, sizeof(read_data));
352 s.next_read_length(10);
353 memset(read_buf, 0, sizeof(read_buf));
354 bytes_transferred = boost::asio::read(s, buffers, error);
355 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
356 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
357 BOOST_ASIO_CHECK(!error);
358}
359
92f5a8d4
TL
360void test_3_arg_nothrow_dynamic_string_read()
361{
362 boost::asio::io_context ioc;
363 test_stream s(ioc);
364 std::string data;
365 boost::asio::dynamic_string_buffer<char, std::string::traits_type,
366 std::string::allocator_type> sb
367 = boost::asio::dynamic_buffer(data, sizeof(read_data));
368
369 s.reset(read_data, sizeof(read_data));
370 sb.consume(sb.size());
371 boost::system::error_code error;
372 size_t bytes_transferred = boost::asio::read(s, sb, error);
373 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
374 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
375 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
376 BOOST_ASIO_CHECK(!error);
377
378 s.reset(read_data, sizeof(read_data));
379 s.next_read_length(1);
380 sb.consume(sb.size());
381 bytes_transferred = boost::asio::read(s, sb, error);
382 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
383 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
384 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
385 BOOST_ASIO_CHECK(!error);
386
387 s.reset(read_data, sizeof(read_data));
388 s.next_read_length(10);
389 sb.consume(sb.size());
390 bytes_transferred = boost::asio::read(s, sb, error);
391 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
392 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
393 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
394 BOOST_ASIO_CHECK(!error);
395}
396
7c673cae
FG
397void test_3_arg_nothrow_streambuf_read()
398{
92f5a8d4 399#if !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
b32b8144
FG
400 boost::asio::io_context ioc;
401 test_stream s(ioc);
7c673cae
FG
402 boost::asio::streambuf sb(sizeof(read_data));
403
404 s.reset(read_data, sizeof(read_data));
405 sb.consume(sb.size());
406 boost::system::error_code error;
407 size_t bytes_transferred = boost::asio::read(s, sb, error);
408 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
409 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
410 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
411 BOOST_ASIO_CHECK(!error);
412
413 s.reset(read_data, sizeof(read_data));
414 s.next_read_length(1);
415 sb.consume(sb.size());
416 bytes_transferred = boost::asio::read(s, sb, error);
417 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
418 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
419 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
420 BOOST_ASIO_CHECK(!error);
421
422 s.reset(read_data, sizeof(read_data));
423 s.next_read_length(10);
424 sb.consume(sb.size());
425 bytes_transferred = boost::asio::read(s, sb, error);
426 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
427 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
428 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
429 BOOST_ASIO_CHECK(!error);
92f5a8d4 430#endif // !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
7c673cae
FG
431}
432
433bool old_style_transfer_all(const boost::system::error_code& ec,
434 size_t /*bytes_transferred*/)
435{
436 return !!ec;
437}
438
92f5a8d4 439struct short_transfer
7c673cae 440{
92f5a8d4
TL
441 short_transfer() {}
442#if defined(BOOST_ASIO_HAS_MOVE)
443 short_transfer(short_transfer&&) {}
444#else // defined(BOOST_ASIO_HAS_MOVE)
445 short_transfer(const short_transfer&) {}
446#endif // defined(BOOST_ASIO_HAS_MOVE)
447 size_t operator()(const boost::system::error_code& ec,
448 size_t /*bytes_transferred*/)
449 {
450 return !!ec ? 0 : 3;
451 }
452};
7c673cae 453
b32b8144 454void test_3_arg_mutable_buffer_read()
7c673cae 455{
b32b8144
FG
456 boost::asio::io_context ioc;
457 test_stream s(ioc);
7c673cae 458 char read_buf[sizeof(read_data)];
b32b8144 459 boost::asio::mutable_buffer buffers
7c673cae
FG
460 = boost::asio::buffer(read_buf, sizeof(read_buf));
461
462 s.reset(read_data, sizeof(read_data));
463 memset(read_buf, 0, sizeof(read_buf));
464 size_t bytes_transferred = boost::asio::read(s, buffers,
465 boost::asio::transfer_all());
466 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
467 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
468
469 s.reset(read_data, sizeof(read_data));
470 s.next_read_length(1);
471 memset(read_buf, 0, sizeof(read_buf));
472 bytes_transferred = boost::asio::read(s, buffers,
473 boost::asio::transfer_all());
474 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
475 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
476
477 s.reset(read_data, sizeof(read_data));
478 s.next_read_length(10);
479 memset(read_buf, 0, sizeof(read_buf));
480 bytes_transferred = boost::asio::read(s, buffers,
481 boost::asio::transfer_all());
482 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
483 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
484
485 s.reset(read_data, sizeof(read_data));
486 memset(read_buf, 0, sizeof(read_buf));
487 bytes_transferred = boost::asio::read(s, buffers,
488 boost::asio::transfer_at_least(1));
489 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
490 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
491
492 s.reset(read_data, sizeof(read_data));
493 s.next_read_length(1);
494 memset(read_buf, 0, sizeof(read_buf));
495 bytes_transferred = boost::asio::read(s, buffers,
496 boost::asio::transfer_at_least(1));
497 BOOST_ASIO_CHECK(bytes_transferred == 1);
498 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
499
500 s.reset(read_data, sizeof(read_data));
501 s.next_read_length(10);
502 memset(read_buf, 0, sizeof(read_buf));
503 bytes_transferred = boost::asio::read(s, buffers,
504 boost::asio::transfer_at_least(1));
505 BOOST_ASIO_CHECK(bytes_transferred == 10);
506 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
507
508 s.reset(read_data, sizeof(read_data));
509 memset(read_buf, 0, sizeof(read_buf));
510 bytes_transferred = boost::asio::read(s, buffers,
511 boost::asio::transfer_at_least(10));
512 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
513 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
514
515 s.reset(read_data, sizeof(read_data));
516 s.next_read_length(1);
517 memset(read_buf, 0, sizeof(read_buf));
518 bytes_transferred = boost::asio::read(s, buffers,
519 boost::asio::transfer_at_least(10));
520 BOOST_ASIO_CHECK(bytes_transferred == 10);
521 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
522
523 s.reset(read_data, sizeof(read_data));
524 s.next_read_length(10);
525 memset(read_buf, 0, sizeof(read_buf));
526 bytes_transferred = boost::asio::read(s, buffers,
527 boost::asio::transfer_at_least(10));
528 BOOST_ASIO_CHECK(bytes_transferred == 10);
529 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
530
531 s.reset(read_data, sizeof(read_data));
532 memset(read_buf, 0, sizeof(read_buf));
533 bytes_transferred = boost::asio::read(s, buffers,
534 boost::asio::transfer_at_least(42));
535 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
536 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
537
538 s.reset(read_data, sizeof(read_data));
539 s.next_read_length(1);
540 memset(read_buf, 0, sizeof(read_buf));
541 bytes_transferred = boost::asio::read(s, buffers,
542 boost::asio::transfer_at_least(42));
543 BOOST_ASIO_CHECK(bytes_transferred == 42);
544 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
545
546 s.reset(read_data, sizeof(read_data));
547 s.next_read_length(10);
548 memset(read_buf, 0, sizeof(read_buf));
549 bytes_transferred = boost::asio::read(s, buffers,
550 boost::asio::transfer_at_least(42));
551 BOOST_ASIO_CHECK(bytes_transferred == 50);
552 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
553
554 s.reset(read_data, sizeof(read_data));
555 memset(read_buf, 0, sizeof(read_buf));
556 bytes_transferred = boost::asio::read(s, buffers,
557 boost::asio::transfer_exactly(1));
558 BOOST_ASIO_CHECK(bytes_transferred == 1);
559 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
560
561 s.reset(read_data, sizeof(read_data));
562 s.next_read_length(1);
563 memset(read_buf, 0, sizeof(read_buf));
564 bytes_transferred = boost::asio::read(s, buffers,
565 boost::asio::transfer_exactly(1));
566 BOOST_ASIO_CHECK(bytes_transferred == 1);
567 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
568
569 s.reset(read_data, sizeof(read_data));
570 s.next_read_length(10);
571 memset(read_buf, 0, sizeof(read_buf));
572 bytes_transferred = boost::asio::read(s, buffers,
573 boost::asio::transfer_exactly(1));
574 BOOST_ASIO_CHECK(bytes_transferred == 1);
575 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
576
577 s.reset(read_data, sizeof(read_data));
578 memset(read_buf, 0, sizeof(read_buf));
579 bytes_transferred = boost::asio::read(s, buffers,
580 boost::asio::transfer_exactly(10));
581 BOOST_ASIO_CHECK(bytes_transferred == 10);
582 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
583
584 s.reset(read_data, sizeof(read_data));
585 s.next_read_length(1);
586 memset(read_buf, 0, sizeof(read_buf));
587 bytes_transferred = boost::asio::read(s, buffers,
588 boost::asio::transfer_exactly(10));
589 BOOST_ASIO_CHECK(bytes_transferred == 10);
590 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
591
592 s.reset(read_data, sizeof(read_data));
593 s.next_read_length(10);
594 memset(read_buf, 0, sizeof(read_buf));
595 bytes_transferred = boost::asio::read(s, buffers,
596 boost::asio::transfer_exactly(10));
597 BOOST_ASIO_CHECK(bytes_transferred == 10);
598 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
599
600 s.reset(read_data, sizeof(read_data));
601 memset(read_buf, 0, sizeof(read_buf));
602 bytes_transferred = boost::asio::read(s, buffers,
603 boost::asio::transfer_exactly(42));
604 BOOST_ASIO_CHECK(bytes_transferred == 42);
605 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
606
607 s.reset(read_data, sizeof(read_data));
608 s.next_read_length(1);
609 memset(read_buf, 0, sizeof(read_buf));
610 bytes_transferred = boost::asio::read(s, buffers,
611 boost::asio::transfer_exactly(42));
612 BOOST_ASIO_CHECK(bytes_transferred == 42);
613 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
614
615 s.reset(read_data, sizeof(read_data));
616 s.next_read_length(10);
617 memset(read_buf, 0, sizeof(read_buf));
618 bytes_transferred = boost::asio::read(s, buffers,
619 boost::asio::transfer_exactly(42));
620 BOOST_ASIO_CHECK(bytes_transferred == 42);
621 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
622
623 s.reset(read_data, sizeof(read_data));
624 memset(read_buf, 0, sizeof(read_buf));
625 bytes_transferred = boost::asio::read(s, buffers, old_style_transfer_all);
626 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
627 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
628
629 s.reset(read_data, sizeof(read_data));
630 s.next_read_length(1);
631 memset(read_buf, 0, sizeof(read_buf));
632 bytes_transferred = boost::asio::read(s, buffers, old_style_transfer_all);
633 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
634 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
635
636 s.reset(read_data, sizeof(read_data));
637 s.next_read_length(10);
638 memset(read_buf, 0, sizeof(read_buf));
639 bytes_transferred = boost::asio::read(s, buffers, old_style_transfer_all);
640 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
641 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
642
643 s.reset(read_data, sizeof(read_data));
644 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 645 bytes_transferred = boost::asio::read(s, buffers, short_transfer());
7c673cae
FG
646 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
647 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
648
649 s.reset(read_data, sizeof(read_data));
650 s.next_read_length(1);
651 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 652 bytes_transferred = boost::asio::read(s, buffers, short_transfer());
7c673cae
FG
653 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
654 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
655
656 s.reset(read_data, sizeof(read_data));
657 s.next_read_length(10);
658 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 659 bytes_transferred = boost::asio::read(s, buffers, short_transfer());
7c673cae
FG
660 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
661 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
662}
663
664void test_3_arg_vector_buffers_read()
665{
b32b8144
FG
666 boost::asio::io_context ioc;
667 test_stream s(ioc);
7c673cae
FG
668 char read_buf[sizeof(read_data)];
669 std::vector<boost::asio::mutable_buffer> buffers;
670 buffers.push_back(boost::asio::buffer(read_buf, 32));
b32b8144
FG
671 buffers.push_back(boost::asio::buffer(read_buf, 39) + 32);
672 buffers.push_back(boost::asio::buffer(read_buf) + 39);
7c673cae
FG
673
674 s.reset(read_data, sizeof(read_data));
675 memset(read_buf, 0, sizeof(read_buf));
676 size_t bytes_transferred = boost::asio::read(s, buffers,
677 boost::asio::transfer_all());
678 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
679 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
680
681 s.reset(read_data, sizeof(read_data));
682 s.next_read_length(1);
683 memset(read_buf, 0, sizeof(read_buf));
684 bytes_transferred = boost::asio::read(s, buffers,
685 boost::asio::transfer_all());
686 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
687 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
688
689 s.reset(read_data, sizeof(read_data));
690 s.next_read_length(10);
691 memset(read_buf, 0, sizeof(read_buf));
692 bytes_transferred = boost::asio::read(s, buffers,
693 boost::asio::transfer_all());
694 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
695 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
696
697 s.reset(read_data, sizeof(read_data));
698 memset(read_buf, 0, sizeof(read_buf));
699 bytes_transferred = boost::asio::read(s, buffers,
700 boost::asio::transfer_at_least(1));
701 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
702 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
703
704 s.reset(read_data, sizeof(read_data));
705 s.next_read_length(1);
706 memset(read_buf, 0, sizeof(read_buf));
707 bytes_transferred = boost::asio::read(s, buffers,
708 boost::asio::transfer_at_least(1));
709 BOOST_ASIO_CHECK(bytes_transferred == 1);
710 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
711
712 s.reset(read_data, sizeof(read_data));
713 s.next_read_length(10);
714 memset(read_buf, 0, sizeof(read_buf));
715 bytes_transferred = boost::asio::read(s, buffers,
716 boost::asio::transfer_at_least(1));
717 BOOST_ASIO_CHECK(bytes_transferred == 10);
718 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
719
720 s.reset(read_data, sizeof(read_data));
721 memset(read_buf, 0, sizeof(read_buf));
722 bytes_transferred = boost::asio::read(s, buffers,
723 boost::asio::transfer_at_least(10));
724 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
725 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
726
727 s.reset(read_data, sizeof(read_data));
728 s.next_read_length(1);
729 memset(read_buf, 0, sizeof(read_buf));
730 bytes_transferred = boost::asio::read(s, buffers,
731 boost::asio::transfer_at_least(10));
732 BOOST_ASIO_CHECK(bytes_transferred == 10);
733 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
734
735 s.reset(read_data, sizeof(read_data));
736 s.next_read_length(10);
737 memset(read_buf, 0, sizeof(read_buf));
738 bytes_transferred = boost::asio::read(s, buffers,
739 boost::asio::transfer_at_least(10));
740 BOOST_ASIO_CHECK(bytes_transferred == 10);
741 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
742
743 s.reset(read_data, sizeof(read_data));
744 memset(read_buf, 0, sizeof(read_buf));
745 bytes_transferred = boost::asio::read(s, buffers,
746 boost::asio::transfer_at_least(42));
747 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
748 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
749
750 s.reset(read_data, sizeof(read_data));
751 s.next_read_length(1);
752 memset(read_buf, 0, sizeof(read_buf));
753 bytes_transferred = boost::asio::read(s, buffers,
754 boost::asio::transfer_at_least(42));
755 BOOST_ASIO_CHECK(bytes_transferred == 42);
756 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
757
758 s.reset(read_data, sizeof(read_data));
759 s.next_read_length(10);
760 memset(read_buf, 0, sizeof(read_buf));
761 bytes_transferred = boost::asio::read(s, buffers,
762 boost::asio::transfer_at_least(42));
763 BOOST_ASIO_CHECK(bytes_transferred == 50);
764 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
765
766 s.reset(read_data, sizeof(read_data));
767 memset(read_buf, 0, sizeof(read_buf));
768 bytes_transferred = boost::asio::read(s, buffers,
769 boost::asio::transfer_exactly(1));
770 BOOST_ASIO_CHECK(bytes_transferred == 1);
771 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
772
773 s.reset(read_data, sizeof(read_data));
774 s.next_read_length(1);
775 memset(read_buf, 0, sizeof(read_buf));
776 bytes_transferred = boost::asio::read(s, buffers,
777 boost::asio::transfer_exactly(1));
778 BOOST_ASIO_CHECK(bytes_transferred == 1);
779 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
780
781 s.reset(read_data, sizeof(read_data));
782 s.next_read_length(10);
783 memset(read_buf, 0, sizeof(read_buf));
784 bytes_transferred = boost::asio::read(s, buffers,
785 boost::asio::transfer_exactly(1));
786 BOOST_ASIO_CHECK(bytes_transferred == 1);
787 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
788
789 s.reset(read_data, sizeof(read_data));
790 memset(read_buf, 0, sizeof(read_buf));
791 bytes_transferred = boost::asio::read(s, buffers,
792 boost::asio::transfer_exactly(10));
793 BOOST_ASIO_CHECK(bytes_transferred == 10);
794 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
795
796 s.reset(read_data, sizeof(read_data));
797 s.next_read_length(1);
798 memset(read_buf, 0, sizeof(read_buf));
799 bytes_transferred = boost::asio::read(s, buffers,
800 boost::asio::transfer_exactly(10));
801 BOOST_ASIO_CHECK(bytes_transferred == 10);
802 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
803
804 s.reset(read_data, sizeof(read_data));
805 s.next_read_length(10);
806 memset(read_buf, 0, sizeof(read_buf));
807 bytes_transferred = boost::asio::read(s, buffers,
808 boost::asio::transfer_exactly(10));
809 BOOST_ASIO_CHECK(bytes_transferred == 10);
810 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
811
812 s.reset(read_data, sizeof(read_data));
813 memset(read_buf, 0, sizeof(read_buf));
814 bytes_transferred = boost::asio::read(s, buffers,
815 boost::asio::transfer_exactly(42));
816 BOOST_ASIO_CHECK(bytes_transferred == 42);
817 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
818
819 s.reset(read_data, sizeof(read_data));
820 s.next_read_length(1);
821 memset(read_buf, 0, sizeof(read_buf));
822 bytes_transferred = boost::asio::read(s, buffers,
823 boost::asio::transfer_exactly(42));
824 BOOST_ASIO_CHECK(bytes_transferred == 42);
825 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
826
827 s.reset(read_data, sizeof(read_data));
828 s.next_read_length(10);
829 memset(read_buf, 0, sizeof(read_buf));
830 bytes_transferred = boost::asio::read(s, buffers,
831 boost::asio::transfer_exactly(42));
832 BOOST_ASIO_CHECK(bytes_transferred == 42);
833 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
834
835 s.reset(read_data, sizeof(read_data));
836 memset(read_buf, 0, sizeof(read_buf));
837 bytes_transferred = boost::asio::read(s, buffers, old_style_transfer_all);
838 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
839 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
840
841 s.reset(read_data, sizeof(read_data));
842 s.next_read_length(1);
843 memset(read_buf, 0, sizeof(read_buf));
844 bytes_transferred = boost::asio::read(s, buffers, old_style_transfer_all);
845 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
846 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
847
848 s.reset(read_data, sizeof(read_data));
849 s.next_read_length(10);
850 memset(read_buf, 0, sizeof(read_buf));
851 bytes_transferred = boost::asio::read(s, buffers, old_style_transfer_all);
852 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
853 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
854
855 s.reset(read_data, sizeof(read_data));
856 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 857 bytes_transferred = boost::asio::read(s, buffers, short_transfer());
7c673cae
FG
858 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
859 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
860
861 s.reset(read_data, sizeof(read_data));
862 s.next_read_length(1);
863 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 864 bytes_transferred = boost::asio::read(s, buffers, short_transfer());
7c673cae
FG
865 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
866 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
867
868 s.reset(read_data, sizeof(read_data));
869 s.next_read_length(10);
870 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 871 bytes_transferred = boost::asio::read(s, buffers, short_transfer());
7c673cae
FG
872 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
873 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
874}
875
92f5a8d4 876void test_3_arg_dynamic_string_read()
7c673cae 877{
b32b8144
FG
878 boost::asio::io_context ioc;
879 test_stream s(ioc);
92f5a8d4
TL
880 std::string data;
881 boost::asio::dynamic_string_buffer<char, std::string::traits_type,
882 std::string::allocator_type> sb
883 = boost::asio::dynamic_buffer(data, sizeof(read_data));
7c673cae
FG
884
885 s.reset(read_data, sizeof(read_data));
886 sb.consume(sb.size());
887 size_t bytes_transferred = boost::asio::read(s, sb,
888 boost::asio::transfer_all());
889 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
890 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
92f5a8d4 891 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
892
893 s.reset(read_data, sizeof(read_data));
894 s.next_read_length(1);
895 sb.consume(sb.size());
896 bytes_transferred = boost::asio::read(s, sb,
897 boost::asio::transfer_all());
898 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
899 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
92f5a8d4 900 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
901
902 s.reset(read_data, sizeof(read_data));
903 s.next_read_length(10);
904 sb.consume(sb.size());
905 bytes_transferred = boost::asio::read(s, sb,
906 boost::asio::transfer_all());
907 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
908 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
92f5a8d4 909 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
910
911 s.reset(read_data, sizeof(read_data));
912 sb.consume(sb.size());
913 bytes_transferred = boost::asio::read(s, sb,
914 boost::asio::transfer_at_least(1));
915 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
916 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
92f5a8d4 917 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
918
919 s.reset(read_data, sizeof(read_data));
920 s.next_read_length(1);
921 sb.consume(sb.size());
922 bytes_transferred = boost::asio::read(s, sb,
923 boost::asio::transfer_at_least(1));
924 BOOST_ASIO_CHECK(bytes_transferred == 1);
925 BOOST_ASIO_CHECK(sb.size() == 1);
92f5a8d4 926 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 1));
7c673cae
FG
927
928 s.reset(read_data, sizeof(read_data));
929 s.next_read_length(10);
930 sb.consume(sb.size());
931 bytes_transferred = boost::asio::read(s, sb,
932 boost::asio::transfer_at_least(1));
933 BOOST_ASIO_CHECK(bytes_transferred == 10);
934 BOOST_ASIO_CHECK(sb.size() == 10);
92f5a8d4 935 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
7c673cae
FG
936
937 s.reset(read_data, sizeof(read_data));
938 sb.consume(sb.size());
939 bytes_transferred = boost::asio::read(s, sb,
940 boost::asio::transfer_at_least(10));
941 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
942 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
92f5a8d4 943 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
944
945 s.reset(read_data, sizeof(read_data));
946 s.next_read_length(1);
947 sb.consume(sb.size());
948 bytes_transferred = boost::asio::read(s, sb,
949 boost::asio::transfer_at_least(10));
950 BOOST_ASIO_CHECK(bytes_transferred == 10);
951 BOOST_ASIO_CHECK(sb.size() == 10);
92f5a8d4 952 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
7c673cae
FG
953
954 s.reset(read_data, sizeof(read_data));
955 s.next_read_length(10);
956 sb.consume(sb.size());
957 bytes_transferred = boost::asio::read(s, sb,
958 boost::asio::transfer_at_least(10));
959 BOOST_ASIO_CHECK(bytes_transferred == 10);
960 BOOST_ASIO_CHECK(sb.size() == 10);
92f5a8d4 961 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
7c673cae
FG
962
963 s.reset(read_data, sizeof(read_data));
964 sb.consume(sb.size());
965 bytes_transferred = boost::asio::read(s, sb,
966 boost::asio::transfer_at_least(42));
967 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
968 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
92f5a8d4 969 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
970
971 s.reset(read_data, sizeof(read_data));
972 s.next_read_length(1);
973 sb.consume(sb.size());
974 bytes_transferred = boost::asio::read(s, sb,
975 boost::asio::transfer_at_least(42));
976 BOOST_ASIO_CHECK(bytes_transferred == 42);
977 BOOST_ASIO_CHECK(sb.size() == 42);
92f5a8d4 978 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 42));
7c673cae
FG
979
980 s.reset(read_data, sizeof(read_data));
981 s.next_read_length(10);
982 sb.consume(sb.size());
983 bytes_transferred = boost::asio::read(s, sb,
984 boost::asio::transfer_at_least(42));
985 BOOST_ASIO_CHECK(bytes_transferred == 50);
986 BOOST_ASIO_CHECK(sb.size() == 50);
92f5a8d4 987 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 50));
7c673cae
FG
988
989 s.reset(read_data, sizeof(read_data));
990 sb.consume(sb.size());
991 bytes_transferred = boost::asio::read(s, sb,
992 boost::asio::transfer_exactly(1));
993 BOOST_ASIO_CHECK(bytes_transferred == 1);
994 BOOST_ASIO_CHECK(sb.size() == 1);
92f5a8d4 995 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 1));
7c673cae
FG
996
997 s.reset(read_data, sizeof(read_data));
998 s.next_read_length(1);
999 sb.consume(sb.size());
1000 bytes_transferred = boost::asio::read(s, sb,
1001 boost::asio::transfer_exactly(1));
1002 BOOST_ASIO_CHECK(bytes_transferred == 1);
1003 BOOST_ASIO_CHECK(sb.size() == 1);
92f5a8d4 1004 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 1));
7c673cae
FG
1005
1006 s.reset(read_data, sizeof(read_data));
1007 s.next_read_length(10);
1008 sb.consume(sb.size());
1009 bytes_transferred = boost::asio::read(s, sb,
1010 boost::asio::transfer_exactly(1));
1011 BOOST_ASIO_CHECK(bytes_transferred == 1);
1012 BOOST_ASIO_CHECK(sb.size() == 1);
92f5a8d4 1013 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 1));
7c673cae
FG
1014
1015 s.reset(read_data, sizeof(read_data));
1016 sb.consume(sb.size());
1017 bytes_transferred = boost::asio::read(s, sb,
1018 boost::asio::transfer_exactly(10));
1019 BOOST_ASIO_CHECK(bytes_transferred == 10);
1020 BOOST_ASIO_CHECK(sb.size() == 10);
92f5a8d4 1021 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
7c673cae
FG
1022
1023 s.reset(read_data, sizeof(read_data));
1024 s.next_read_length(1);
1025 sb.consume(sb.size());
1026 bytes_transferred = boost::asio::read(s, sb,
1027 boost::asio::transfer_exactly(10));
1028 BOOST_ASIO_CHECK(bytes_transferred == 10);
1029 BOOST_ASIO_CHECK(sb.size() == 10);
92f5a8d4 1030 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
7c673cae
FG
1031
1032 s.reset(read_data, sizeof(read_data));
1033 s.next_read_length(10);
1034 sb.consume(sb.size());
1035 bytes_transferred = boost::asio::read(s, sb,
1036 boost::asio::transfer_exactly(10));
1037 BOOST_ASIO_CHECK(bytes_transferred == 10);
1038 BOOST_ASIO_CHECK(sb.size() == 10);
92f5a8d4 1039 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
7c673cae
FG
1040
1041 s.reset(read_data, sizeof(read_data));
1042 sb.consume(sb.size());
1043 bytes_transferred = boost::asio::read(s, sb,
1044 boost::asio::transfer_exactly(42));
1045 BOOST_ASIO_CHECK(bytes_transferred == 42);
1046 BOOST_ASIO_CHECK(sb.size() == 42);
92f5a8d4 1047 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 42));
7c673cae
FG
1048
1049 s.reset(read_data, sizeof(read_data));
1050 s.next_read_length(1);
1051 sb.consume(sb.size());
1052 bytes_transferred = boost::asio::read(s, sb,
1053 boost::asio::transfer_exactly(42));
1054 BOOST_ASIO_CHECK(bytes_transferred == 42);
1055 BOOST_ASIO_CHECK(sb.size() == 42);
92f5a8d4 1056 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 42));
7c673cae
FG
1057
1058 s.reset(read_data, sizeof(read_data));
1059 s.next_read_length(10);
1060 sb.consume(sb.size());
1061 bytes_transferred = boost::asio::read(s, sb,
1062 boost::asio::transfer_exactly(42));
1063 BOOST_ASIO_CHECK(bytes_transferred == 42);
1064 BOOST_ASIO_CHECK(sb.size() == 42);
92f5a8d4 1065 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 42));
7c673cae
FG
1066
1067 s.reset(read_data, sizeof(read_data));
1068 sb.consume(sb.size());
1069 bytes_transferred = boost::asio::read(s, sb, old_style_transfer_all);
1070 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1071 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
92f5a8d4 1072 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
1073
1074 s.reset(read_data, sizeof(read_data));
1075 s.next_read_length(1);
1076 sb.consume(sb.size());
1077 bytes_transferred = boost::asio::read(s, sb, old_style_transfer_all);
1078 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1079 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
92f5a8d4 1080 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
1081
1082 s.reset(read_data, sizeof(read_data));
1083 s.next_read_length(10);
1084 sb.consume(sb.size());
1085 bytes_transferred = boost::asio::read(s, sb, old_style_transfer_all);
1086 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1087 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
92f5a8d4 1088 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
1089
1090 s.reset(read_data, sizeof(read_data));
1091 sb.consume(sb.size());
92f5a8d4 1092 bytes_transferred = boost::asio::read(s, sb, short_transfer());
7c673cae
FG
1093 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1094 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
92f5a8d4 1095 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
1096
1097 s.reset(read_data, sizeof(read_data));
1098 s.next_read_length(1);
1099 sb.consume(sb.size());
92f5a8d4 1100 bytes_transferred = boost::asio::read(s, sb, short_transfer());
7c673cae
FG
1101 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1102 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
92f5a8d4 1103 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
1104
1105 s.reset(read_data, sizeof(read_data));
1106 s.next_read_length(10);
1107 sb.consume(sb.size());
92f5a8d4 1108 bytes_transferred = boost::asio::read(s, sb, short_transfer());
7c673cae
FG
1109 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1110 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
92f5a8d4 1111 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
1112}
1113
92f5a8d4 1114void test_3_arg_streambuf_read()
7c673cae 1115{
92f5a8d4 1116#if !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
b32b8144
FG
1117 boost::asio::io_context ioc;
1118 test_stream s(ioc);
92f5a8d4 1119 boost::asio::streambuf sb(sizeof(read_data));
7c673cae
FG
1120
1121 s.reset(read_data, sizeof(read_data));
92f5a8d4
TL
1122 sb.consume(sb.size());
1123 size_t bytes_transferred = boost::asio::read(s, sb,
1124 boost::asio::transfer_all());
7c673cae 1125 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4
TL
1126 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1127 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
7c673cae
FG
1128
1129 s.reset(read_data, sizeof(read_data));
1130 s.next_read_length(1);
92f5a8d4
TL
1131 sb.consume(sb.size());
1132 bytes_transferred = boost::asio::read(s, sb,
1133 boost::asio::transfer_all());
7c673cae 1134 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4
TL
1135 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1136 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
7c673cae
FG
1137
1138 s.reset(read_data, sizeof(read_data));
1139 s.next_read_length(10);
92f5a8d4
TL
1140 sb.consume(sb.size());
1141 bytes_transferred = boost::asio::read(s, sb,
1142 boost::asio::transfer_all());
7c673cae 1143 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4
TL
1144 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1145 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
7c673cae
FG
1146
1147 s.reset(read_data, sizeof(read_data));
92f5a8d4
TL
1148 sb.consume(sb.size());
1149 bytes_transferred = boost::asio::read(s, sb,
1150 boost::asio::transfer_at_least(1));
7c673cae 1151 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4
TL
1152 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1153 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
7c673cae
FG
1154
1155 s.reset(read_data, sizeof(read_data));
1156 s.next_read_length(1);
92f5a8d4
TL
1157 sb.consume(sb.size());
1158 bytes_transferred = boost::asio::read(s, sb,
1159 boost::asio::transfer_at_least(1));
7c673cae 1160 BOOST_ASIO_CHECK(bytes_transferred == 1);
92f5a8d4
TL
1161 BOOST_ASIO_CHECK(sb.size() == 1);
1162 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
7c673cae
FG
1163
1164 s.reset(read_data, sizeof(read_data));
1165 s.next_read_length(10);
92f5a8d4
TL
1166 sb.consume(sb.size());
1167 bytes_transferred = boost::asio::read(s, sb,
1168 boost::asio::transfer_at_least(1));
7c673cae 1169 BOOST_ASIO_CHECK(bytes_transferred == 10);
92f5a8d4
TL
1170 BOOST_ASIO_CHECK(sb.size() == 10);
1171 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
7c673cae
FG
1172
1173 s.reset(read_data, sizeof(read_data));
92f5a8d4
TL
1174 sb.consume(sb.size());
1175 bytes_transferred = boost::asio::read(s, sb,
1176 boost::asio::transfer_at_least(10));
7c673cae 1177 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4
TL
1178 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1179 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
7c673cae
FG
1180
1181 s.reset(read_data, sizeof(read_data));
1182 s.next_read_length(1);
92f5a8d4
TL
1183 sb.consume(sb.size());
1184 bytes_transferred = boost::asio::read(s, sb,
1185 boost::asio::transfer_at_least(10));
7c673cae 1186 BOOST_ASIO_CHECK(bytes_transferred == 10);
92f5a8d4
TL
1187 BOOST_ASIO_CHECK(sb.size() == 10);
1188 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
7c673cae
FG
1189
1190 s.reset(read_data, sizeof(read_data));
1191 s.next_read_length(10);
92f5a8d4
TL
1192 sb.consume(sb.size());
1193 bytes_transferred = boost::asio::read(s, sb,
1194 boost::asio::transfer_at_least(10));
7c673cae 1195 BOOST_ASIO_CHECK(bytes_transferred == 10);
92f5a8d4
TL
1196 BOOST_ASIO_CHECK(sb.size() == 10);
1197 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
7c673cae
FG
1198
1199 s.reset(read_data, sizeof(read_data));
92f5a8d4
TL
1200 sb.consume(sb.size());
1201 bytes_transferred = boost::asio::read(s, sb,
1202 boost::asio::transfer_at_least(42));
7c673cae 1203 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4
TL
1204 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1205 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
7c673cae
FG
1206
1207 s.reset(read_data, sizeof(read_data));
1208 s.next_read_length(1);
92f5a8d4
TL
1209 sb.consume(sb.size());
1210 bytes_transferred = boost::asio::read(s, sb,
1211 boost::asio::transfer_at_least(42));
7c673cae 1212 BOOST_ASIO_CHECK(bytes_transferred == 42);
92f5a8d4
TL
1213 BOOST_ASIO_CHECK(sb.size() == 42);
1214 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
7c673cae
FG
1215
1216 s.reset(read_data, sizeof(read_data));
1217 s.next_read_length(10);
92f5a8d4
TL
1218 sb.consume(sb.size());
1219 bytes_transferred = boost::asio::read(s, sb,
1220 boost::asio::transfer_at_least(42));
7c673cae 1221 BOOST_ASIO_CHECK(bytes_transferred == 50);
92f5a8d4
TL
1222 BOOST_ASIO_CHECK(sb.size() == 50);
1223 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 50));
7c673cae
FG
1224
1225 s.reset(read_data, sizeof(read_data));
92f5a8d4
TL
1226 sb.consume(sb.size());
1227 bytes_transferred = boost::asio::read(s, sb,
1228 boost::asio::transfer_exactly(1));
7c673cae 1229 BOOST_ASIO_CHECK(bytes_transferred == 1);
92f5a8d4
TL
1230 BOOST_ASIO_CHECK(sb.size() == 1);
1231 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
7c673cae
FG
1232
1233 s.reset(read_data, sizeof(read_data));
1234 s.next_read_length(1);
92f5a8d4
TL
1235 sb.consume(sb.size());
1236 bytes_transferred = boost::asio::read(s, sb,
1237 boost::asio::transfer_exactly(1));
7c673cae 1238 BOOST_ASIO_CHECK(bytes_transferred == 1);
92f5a8d4
TL
1239 BOOST_ASIO_CHECK(sb.size() == 1);
1240 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
7c673cae
FG
1241
1242 s.reset(read_data, sizeof(read_data));
1243 s.next_read_length(10);
92f5a8d4
TL
1244 sb.consume(sb.size());
1245 bytes_transferred = boost::asio::read(s, sb,
1246 boost::asio::transfer_exactly(1));
7c673cae 1247 BOOST_ASIO_CHECK(bytes_transferred == 1);
92f5a8d4
TL
1248 BOOST_ASIO_CHECK(sb.size() == 1);
1249 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
7c673cae
FG
1250
1251 s.reset(read_data, sizeof(read_data));
92f5a8d4
TL
1252 sb.consume(sb.size());
1253 bytes_transferred = boost::asio::read(s, sb,
1254 boost::asio::transfer_exactly(10));
7c673cae 1255 BOOST_ASIO_CHECK(bytes_transferred == 10);
92f5a8d4
TL
1256 BOOST_ASIO_CHECK(sb.size() == 10);
1257 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
7c673cae
FG
1258
1259 s.reset(read_data, sizeof(read_data));
1260 s.next_read_length(1);
92f5a8d4
TL
1261 sb.consume(sb.size());
1262 bytes_transferred = boost::asio::read(s, sb,
1263 boost::asio::transfer_exactly(10));
7c673cae 1264 BOOST_ASIO_CHECK(bytes_transferred == 10);
92f5a8d4
TL
1265 BOOST_ASIO_CHECK(sb.size() == 10);
1266 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
7c673cae
FG
1267
1268 s.reset(read_data, sizeof(read_data));
1269 s.next_read_length(10);
92f5a8d4
TL
1270 sb.consume(sb.size());
1271 bytes_transferred = boost::asio::read(s, sb,
1272 boost::asio::transfer_exactly(10));
7c673cae 1273 BOOST_ASIO_CHECK(bytes_transferred == 10);
92f5a8d4
TL
1274 BOOST_ASIO_CHECK(sb.size() == 10);
1275 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
7c673cae
FG
1276
1277 s.reset(read_data, sizeof(read_data));
92f5a8d4
TL
1278 sb.consume(sb.size());
1279 bytes_transferred = boost::asio::read(s, sb,
1280 boost::asio::transfer_exactly(42));
7c673cae 1281 BOOST_ASIO_CHECK(bytes_transferred == 42);
92f5a8d4
TL
1282 BOOST_ASIO_CHECK(sb.size() == 42);
1283 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
7c673cae
FG
1284
1285 s.reset(read_data, sizeof(read_data));
1286 s.next_read_length(1);
92f5a8d4
TL
1287 sb.consume(sb.size());
1288 bytes_transferred = boost::asio::read(s, sb,
1289 boost::asio::transfer_exactly(42));
7c673cae 1290 BOOST_ASIO_CHECK(bytes_transferred == 42);
92f5a8d4
TL
1291 BOOST_ASIO_CHECK(sb.size() == 42);
1292 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
7c673cae
FG
1293
1294 s.reset(read_data, sizeof(read_data));
1295 s.next_read_length(10);
92f5a8d4
TL
1296 sb.consume(sb.size());
1297 bytes_transferred = boost::asio::read(s, sb,
1298 boost::asio::transfer_exactly(42));
7c673cae 1299 BOOST_ASIO_CHECK(bytes_transferred == 42);
92f5a8d4
TL
1300 BOOST_ASIO_CHECK(sb.size() == 42);
1301 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
7c673cae
FG
1302
1303 s.reset(read_data, sizeof(read_data));
92f5a8d4
TL
1304 sb.consume(sb.size());
1305 bytes_transferred = boost::asio::read(s, sb, old_style_transfer_all);
7c673cae 1306 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4
TL
1307 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1308 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
7c673cae
FG
1309
1310 s.reset(read_data, sizeof(read_data));
1311 s.next_read_length(1);
92f5a8d4
TL
1312 sb.consume(sb.size());
1313 bytes_transferred = boost::asio::read(s, sb, old_style_transfer_all);
7c673cae 1314 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4
TL
1315 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1316 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
7c673cae
FG
1317
1318 s.reset(read_data, sizeof(read_data));
1319 s.next_read_length(10);
92f5a8d4
TL
1320 sb.consume(sb.size());
1321 bytes_transferred = boost::asio::read(s, sb, old_style_transfer_all);
7c673cae 1322 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4
TL
1323 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1324 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
7c673cae
FG
1325
1326 s.reset(read_data, sizeof(read_data));
92f5a8d4
TL
1327 sb.consume(sb.size());
1328 bytes_transferred = boost::asio::read(s, sb, short_transfer());
7c673cae 1329 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4
TL
1330 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1331 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
7c673cae
FG
1332
1333 s.reset(read_data, sizeof(read_data));
1334 s.next_read_length(1);
92f5a8d4
TL
1335 sb.consume(sb.size());
1336 bytes_transferred = boost::asio::read(s, sb, short_transfer());
7c673cae 1337 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4
TL
1338 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1339 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
7c673cae
FG
1340
1341 s.reset(read_data, sizeof(read_data));
1342 s.next_read_length(10);
92f5a8d4
TL
1343 sb.consume(sb.size());
1344 bytes_transferred = boost::asio::read(s, sb, short_transfer());
7c673cae 1345 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4
TL
1346 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1347 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
1348#endif // !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
7c673cae
FG
1349}
1350
92f5a8d4 1351void test_4_arg_mutable_buffer_read()
7c673cae 1352{
b32b8144
FG
1353 boost::asio::io_context ioc;
1354 test_stream s(ioc);
7c673cae 1355 char read_buf[sizeof(read_data)];
92f5a8d4
TL
1356 boost::asio::mutable_buffer buffers
1357 = boost::asio::buffer(read_buf, sizeof(read_buf));
7c673cae
FG
1358
1359 s.reset(read_data, sizeof(read_data));
1360 memset(read_buf, 0, sizeof(read_buf));
1361 boost::system::error_code error;
1362 size_t bytes_transferred = boost::asio::read(s, buffers,
1363 boost::asio::transfer_all(), error);
1364 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1365 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1366 BOOST_ASIO_CHECK(!error);
1367
1368 s.reset(read_data, sizeof(read_data));
1369 s.next_read_length(1);
1370 memset(read_buf, 0, sizeof(read_buf));
1371 error = boost::system::error_code();
1372 bytes_transferred = boost::asio::read(s, buffers,
1373 boost::asio::transfer_all(), error);
1374 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1375 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1376 BOOST_ASIO_CHECK(!error);
1377
1378 s.reset(read_data, sizeof(read_data));
1379 s.next_read_length(10);
1380 memset(read_buf, 0, sizeof(read_buf));
1381 error = boost::system::error_code();
1382 bytes_transferred = boost::asio::read(s, buffers,
1383 boost::asio::transfer_all(), error);
1384 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1385 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1386 BOOST_ASIO_CHECK(!error);
1387
1388 s.reset(read_data, sizeof(read_data));
1389 memset(read_buf, 0, sizeof(read_buf));
1390 error = boost::system::error_code();
1391 bytes_transferred = boost::asio::read(s, buffers,
1392 boost::asio::transfer_at_least(1), error);
1393 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1394 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1395 BOOST_ASIO_CHECK(!error);
1396
1397 s.reset(read_data, sizeof(read_data));
1398 s.next_read_length(1);
1399 memset(read_buf, 0, sizeof(read_buf));
1400 error = boost::system::error_code();
1401 bytes_transferred = boost::asio::read(s, buffers,
1402 boost::asio::transfer_at_least(1), error);
1403 BOOST_ASIO_CHECK(bytes_transferred == 1);
1404 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1405 BOOST_ASIO_CHECK(!error);
1406
1407 s.reset(read_data, sizeof(read_data));
1408 s.next_read_length(10);
1409 memset(read_buf, 0, sizeof(read_buf));
1410 error = boost::system::error_code();
1411 bytes_transferred = boost::asio::read(s, buffers,
1412 boost::asio::transfer_at_least(1), error);
1413 BOOST_ASIO_CHECK(bytes_transferred == 10);
1414 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1415 BOOST_ASIO_CHECK(!error);
1416
1417 s.reset(read_data, sizeof(read_data));
1418 memset(read_buf, 0, sizeof(read_buf));
1419 error = boost::system::error_code();
1420 bytes_transferred = boost::asio::read(s, buffers,
1421 boost::asio::transfer_at_least(10), error);
1422 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1423 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1424 BOOST_ASIO_CHECK(!error);
1425
1426 s.reset(read_data, sizeof(read_data));
1427 s.next_read_length(1);
1428 memset(read_buf, 0, sizeof(read_buf));
1429 error = boost::system::error_code();
1430 bytes_transferred = boost::asio::read(s, buffers,
1431 boost::asio::transfer_at_least(10), error);
1432 BOOST_ASIO_CHECK(bytes_transferred == 10);
1433 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1434 BOOST_ASIO_CHECK(!error);
1435
1436 s.reset(read_data, sizeof(read_data));
1437 s.next_read_length(10);
1438 memset(read_buf, 0, sizeof(read_buf));
1439 error = boost::system::error_code();
1440 bytes_transferred = boost::asio::read(s, buffers,
1441 boost::asio::transfer_at_least(10), error);
1442 BOOST_ASIO_CHECK(bytes_transferred == 10);
1443 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1444 BOOST_ASIO_CHECK(!error);
1445
1446 s.reset(read_data, sizeof(read_data));
1447 memset(read_buf, 0, sizeof(read_buf));
1448 error = boost::system::error_code();
1449 bytes_transferred = boost::asio::read(s, buffers,
1450 boost::asio::transfer_at_least(42), error);
1451 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1452 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1453 BOOST_ASIO_CHECK(!error);
1454
1455 s.reset(read_data, sizeof(read_data));
1456 s.next_read_length(1);
1457 memset(read_buf, 0, sizeof(read_buf));
1458 error = boost::system::error_code();
1459 bytes_transferred = boost::asio::read(s, buffers,
1460 boost::asio::transfer_at_least(42), error);
1461 BOOST_ASIO_CHECK(bytes_transferred == 42);
1462 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1463 BOOST_ASIO_CHECK(!error);
1464
1465 s.reset(read_data, sizeof(read_data));
1466 s.next_read_length(10);
1467 memset(read_buf, 0, sizeof(read_buf));
1468 error = boost::system::error_code();
1469 bytes_transferred = boost::asio::read(s, buffers,
1470 boost::asio::transfer_at_least(42), error);
1471 BOOST_ASIO_CHECK(bytes_transferred == 50);
1472 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
1473 BOOST_ASIO_CHECK(!error);
1474
1475 s.reset(read_data, sizeof(read_data));
1476 memset(read_buf, 0, sizeof(read_buf));
1477 error = boost::system::error_code();
1478 bytes_transferred = boost::asio::read(s, buffers,
1479 boost::asio::transfer_exactly(1), error);
1480 BOOST_ASIO_CHECK(bytes_transferred == 1);
1481 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1482 BOOST_ASIO_CHECK(!error);
1483
1484 s.reset(read_data, sizeof(read_data));
1485 s.next_read_length(1);
1486 memset(read_buf, 0, sizeof(read_buf));
1487 error = boost::system::error_code();
1488 bytes_transferred = boost::asio::read(s, buffers,
1489 boost::asio::transfer_exactly(1), error);
1490 BOOST_ASIO_CHECK(bytes_transferred == 1);
1491 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1492 BOOST_ASIO_CHECK(!error);
1493
1494 s.reset(read_data, sizeof(read_data));
1495 s.next_read_length(10);
1496 memset(read_buf, 0, sizeof(read_buf));
1497 error = boost::system::error_code();
1498 bytes_transferred = boost::asio::read(s, buffers,
1499 boost::asio::transfer_exactly(1), error);
1500 BOOST_ASIO_CHECK(bytes_transferred == 1);
1501 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1502 BOOST_ASIO_CHECK(!error);
1503
1504 s.reset(read_data, sizeof(read_data));
1505 memset(read_buf, 0, sizeof(read_buf));
1506 error = boost::system::error_code();
1507 bytes_transferred = boost::asio::read(s, buffers,
1508 boost::asio::transfer_exactly(10), error);
1509 BOOST_ASIO_CHECK(bytes_transferred == 10);
1510 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1511 BOOST_ASIO_CHECK(!error);
1512
1513 s.reset(read_data, sizeof(read_data));
1514 s.next_read_length(1);
1515 memset(read_buf, 0, sizeof(read_buf));
1516 error = boost::system::error_code();
1517 bytes_transferred = boost::asio::read(s, buffers,
1518 boost::asio::transfer_exactly(10), error);
1519 BOOST_ASIO_CHECK(bytes_transferred == 10);
1520 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1521 BOOST_ASIO_CHECK(!error);
1522
1523 s.reset(read_data, sizeof(read_data));
1524 s.next_read_length(10);
1525 memset(read_buf, 0, sizeof(read_buf));
1526 error = boost::system::error_code();
1527 bytes_transferred = boost::asio::read(s, buffers,
1528 boost::asio::transfer_exactly(10), error);
1529 BOOST_ASIO_CHECK(bytes_transferred == 10);
1530 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1531 BOOST_ASIO_CHECK(!error);
1532
1533 s.reset(read_data, sizeof(read_data));
1534 memset(read_buf, 0, sizeof(read_buf));
1535 error = boost::system::error_code();
1536 bytes_transferred = boost::asio::read(s, buffers,
1537 boost::asio::transfer_exactly(42), error);
1538 BOOST_ASIO_CHECK(bytes_transferred == 42);
1539 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1540 BOOST_ASIO_CHECK(!error);
1541
1542 s.reset(read_data, sizeof(read_data));
1543 s.next_read_length(1);
1544 memset(read_buf, 0, sizeof(read_buf));
1545 error = boost::system::error_code();
1546 bytes_transferred = boost::asio::read(s, buffers,
1547 boost::asio::transfer_exactly(42), error);
1548 BOOST_ASIO_CHECK(bytes_transferred == 42);
1549 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1550 BOOST_ASIO_CHECK(!error);
1551
1552 s.reset(read_data, sizeof(read_data));
1553 s.next_read_length(10);
1554 memset(read_buf, 0, sizeof(read_buf));
1555 error = boost::system::error_code();
1556 bytes_transferred = boost::asio::read(s, buffers,
1557 boost::asio::transfer_exactly(42), error);
1558 BOOST_ASIO_CHECK(bytes_transferred == 42);
1559 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1560 BOOST_ASIO_CHECK(!error);
1561
1562 s.reset(read_data, sizeof(read_data));
1563 memset(read_buf, 0, sizeof(read_buf));
1564 bytes_transferred = boost::asio::read(s, buffers,
1565 old_style_transfer_all, error);
1566 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1567 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1568 BOOST_ASIO_CHECK(!error);
1569
1570 s.reset(read_data, sizeof(read_data));
1571 s.next_read_length(1);
1572 memset(read_buf, 0, sizeof(read_buf));
1573 error = boost::system::error_code();
1574 bytes_transferred = boost::asio::read(s, buffers,
1575 old_style_transfer_all, error);
1576 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1577 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1578 BOOST_ASIO_CHECK(!error);
1579
1580 s.reset(read_data, sizeof(read_data));
1581 s.next_read_length(10);
1582 memset(read_buf, 0, sizeof(read_buf));
1583 error = boost::system::error_code();
1584 bytes_transferred = boost::asio::read(s, buffers,
1585 old_style_transfer_all, error);
1586 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1587 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1588 BOOST_ASIO_CHECK(!error);
1589
1590 s.reset(read_data, sizeof(read_data));
1591 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 1592 bytes_transferred = boost::asio::read(s, buffers, short_transfer(), error);
7c673cae
FG
1593 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1594 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1595 BOOST_ASIO_CHECK(!error);
1596
1597 s.reset(read_data, sizeof(read_data));
1598 s.next_read_length(1);
1599 memset(read_buf, 0, sizeof(read_buf));
1600 error = boost::system::error_code();
92f5a8d4 1601 bytes_transferred = boost::asio::read(s, buffers, short_transfer(), error);
7c673cae
FG
1602 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1603 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1604 BOOST_ASIO_CHECK(!error);
1605
1606 s.reset(read_data, sizeof(read_data));
1607 s.next_read_length(10);
1608 memset(read_buf, 0, sizeof(read_buf));
1609 error = boost::system::error_code();
92f5a8d4 1610 bytes_transferred = boost::asio::read(s, buffers, short_transfer(), error);
7c673cae
FG
1611 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1612 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1613 BOOST_ASIO_CHECK(!error);
1614}
1615
92f5a8d4 1616void test_4_arg_vector_buffers_read()
7c673cae 1617{
b32b8144
FG
1618 boost::asio::io_context ioc;
1619 test_stream s(ioc);
92f5a8d4
TL
1620 char read_buf[sizeof(read_data)];
1621 std::vector<boost::asio::mutable_buffer> buffers;
1622 buffers.push_back(boost::asio::buffer(read_buf, 32));
1623 buffers.push_back(boost::asio::buffer(read_buf, 39) + 32);
1624 buffers.push_back(boost::asio::buffer(read_buf) + 39);
7c673cae
FG
1625
1626 s.reset(read_data, sizeof(read_data));
92f5a8d4 1627 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1628 boost::system::error_code error;
92f5a8d4 1629 size_t bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1630 boost::asio::transfer_all(), error);
1631 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4 1632 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
7c673cae
FG
1633 BOOST_ASIO_CHECK(!error);
1634
1635 s.reset(read_data, sizeof(read_data));
1636 s.next_read_length(1);
92f5a8d4 1637 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1638 error = boost::system::error_code();
92f5a8d4 1639 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1640 boost::asio::transfer_all(), error);
1641 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4 1642 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
7c673cae
FG
1643 BOOST_ASIO_CHECK(!error);
1644
1645 s.reset(read_data, sizeof(read_data));
1646 s.next_read_length(10);
92f5a8d4 1647 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1648 error = boost::system::error_code();
92f5a8d4 1649 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1650 boost::asio::transfer_all(), error);
1651 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4 1652 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
7c673cae
FG
1653 BOOST_ASIO_CHECK(!error);
1654
1655 s.reset(read_data, sizeof(read_data));
92f5a8d4 1656 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1657 error = boost::system::error_code();
92f5a8d4 1658 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1659 boost::asio::transfer_at_least(1), error);
1660 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4 1661 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
7c673cae
FG
1662 BOOST_ASIO_CHECK(!error);
1663
1664 s.reset(read_data, sizeof(read_data));
1665 s.next_read_length(1);
92f5a8d4 1666 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1667 error = boost::system::error_code();
92f5a8d4 1668 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1669 boost::asio::transfer_at_least(1), error);
1670 BOOST_ASIO_CHECK(bytes_transferred == 1);
92f5a8d4 1671 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
7c673cae
FG
1672 BOOST_ASIO_CHECK(!error);
1673
1674 s.reset(read_data, sizeof(read_data));
1675 s.next_read_length(10);
92f5a8d4 1676 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1677 error = boost::system::error_code();
92f5a8d4 1678 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1679 boost::asio::transfer_at_least(1), error);
1680 BOOST_ASIO_CHECK(bytes_transferred == 10);
92f5a8d4 1681 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
7c673cae
FG
1682 BOOST_ASIO_CHECK(!error);
1683
1684 s.reset(read_data, sizeof(read_data));
92f5a8d4 1685 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1686 error = boost::system::error_code();
92f5a8d4 1687 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1688 boost::asio::transfer_at_least(10), error);
1689 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4 1690 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
7c673cae
FG
1691 BOOST_ASIO_CHECK(!error);
1692
1693 s.reset(read_data, sizeof(read_data));
1694 s.next_read_length(1);
92f5a8d4 1695 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1696 error = boost::system::error_code();
92f5a8d4 1697 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1698 boost::asio::transfer_at_least(10), error);
1699 BOOST_ASIO_CHECK(bytes_transferred == 10);
92f5a8d4 1700 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
7c673cae
FG
1701 BOOST_ASIO_CHECK(!error);
1702
1703 s.reset(read_data, sizeof(read_data));
1704 s.next_read_length(10);
92f5a8d4 1705 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1706 error = boost::system::error_code();
92f5a8d4 1707 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1708 boost::asio::transfer_at_least(10), error);
1709 BOOST_ASIO_CHECK(bytes_transferred == 10);
92f5a8d4 1710 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
7c673cae
FG
1711 BOOST_ASIO_CHECK(!error);
1712
1713 s.reset(read_data, sizeof(read_data));
92f5a8d4 1714 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1715 error = boost::system::error_code();
92f5a8d4 1716 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1717 boost::asio::transfer_at_least(42), error);
1718 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
92f5a8d4 1719 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
7c673cae
FG
1720 BOOST_ASIO_CHECK(!error);
1721
1722 s.reset(read_data, sizeof(read_data));
1723 s.next_read_length(1);
92f5a8d4 1724 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1725 error = boost::system::error_code();
92f5a8d4 1726 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1727 boost::asio::transfer_at_least(42), error);
1728 BOOST_ASIO_CHECK(bytes_transferred == 42);
92f5a8d4 1729 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
7c673cae
FG
1730 BOOST_ASIO_CHECK(!error);
1731
1732 s.reset(read_data, sizeof(read_data));
1733 s.next_read_length(10);
92f5a8d4 1734 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1735 error = boost::system::error_code();
92f5a8d4 1736 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1737 boost::asio::transfer_at_least(42), error);
1738 BOOST_ASIO_CHECK(bytes_transferred == 50);
92f5a8d4 1739 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
7c673cae
FG
1740 BOOST_ASIO_CHECK(!error);
1741
1742 s.reset(read_data, sizeof(read_data));
92f5a8d4 1743 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1744 error = boost::system::error_code();
92f5a8d4 1745 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1746 boost::asio::transfer_exactly(1), error);
1747 BOOST_ASIO_CHECK(bytes_transferred == 1);
92f5a8d4 1748 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
7c673cae
FG
1749 BOOST_ASIO_CHECK(!error);
1750
1751 s.reset(read_data, sizeof(read_data));
1752 s.next_read_length(1);
92f5a8d4 1753 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1754 error = boost::system::error_code();
92f5a8d4 1755 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1756 boost::asio::transfer_exactly(1), error);
1757 BOOST_ASIO_CHECK(bytes_transferred == 1);
92f5a8d4 1758 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
7c673cae
FG
1759 BOOST_ASIO_CHECK(!error);
1760
1761 s.reset(read_data, sizeof(read_data));
1762 s.next_read_length(10);
92f5a8d4 1763 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1764 error = boost::system::error_code();
92f5a8d4 1765 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1766 boost::asio::transfer_exactly(1), error);
1767 BOOST_ASIO_CHECK(bytes_transferred == 1);
92f5a8d4 1768 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
7c673cae
FG
1769 BOOST_ASIO_CHECK(!error);
1770
1771 s.reset(read_data, sizeof(read_data));
92f5a8d4 1772 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1773 error = boost::system::error_code();
92f5a8d4 1774 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1775 boost::asio::transfer_exactly(10), error);
1776 BOOST_ASIO_CHECK(bytes_transferred == 10);
92f5a8d4 1777 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
7c673cae
FG
1778 BOOST_ASIO_CHECK(!error);
1779
1780 s.reset(read_data, sizeof(read_data));
1781 s.next_read_length(1);
92f5a8d4 1782 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1783 error = boost::system::error_code();
92f5a8d4 1784 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1785 boost::asio::transfer_exactly(10), error);
1786 BOOST_ASIO_CHECK(bytes_transferred == 10);
92f5a8d4 1787 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
7c673cae
FG
1788 BOOST_ASIO_CHECK(!error);
1789
1790 s.reset(read_data, sizeof(read_data));
1791 s.next_read_length(10);
92f5a8d4 1792 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1793 error = boost::system::error_code();
92f5a8d4 1794 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1795 boost::asio::transfer_exactly(10), error);
1796 BOOST_ASIO_CHECK(bytes_transferred == 10);
92f5a8d4 1797 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
7c673cae
FG
1798 BOOST_ASIO_CHECK(!error);
1799
1800 s.reset(read_data, sizeof(read_data));
92f5a8d4 1801 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1802 error = boost::system::error_code();
92f5a8d4 1803 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1804 boost::asio::transfer_exactly(42), error);
1805 BOOST_ASIO_CHECK(bytes_transferred == 42);
92f5a8d4 1806 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
7c673cae
FG
1807 BOOST_ASIO_CHECK(!error);
1808
1809 s.reset(read_data, sizeof(read_data));
1810 s.next_read_length(1);
92f5a8d4 1811 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1812 error = boost::system::error_code();
92f5a8d4 1813 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1814 boost::asio::transfer_exactly(42), error);
1815 BOOST_ASIO_CHECK(bytes_transferred == 42);
92f5a8d4 1816 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
7c673cae
FG
1817 BOOST_ASIO_CHECK(!error);
1818
1819 s.reset(read_data, sizeof(read_data));
1820 s.next_read_length(10);
92f5a8d4 1821 memset(read_buf, 0, sizeof(read_buf));
7c673cae 1822 error = boost::system::error_code();
92f5a8d4 1823 bytes_transferred = boost::asio::read(s, buffers,
7c673cae
FG
1824 boost::asio::transfer_exactly(42), error);
1825 BOOST_ASIO_CHECK(bytes_transferred == 42);
92f5a8d4
TL
1826 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1827 BOOST_ASIO_CHECK(!error);
1828
1829 s.reset(read_data, sizeof(read_data));
1830 memset(read_buf, 0, sizeof(read_buf));
1831 bytes_transferred = boost::asio::read(s, buffers,
1832 old_style_transfer_all, error);
1833 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1834 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1835 BOOST_ASIO_CHECK(!error);
1836
1837 s.reset(read_data, sizeof(read_data));
1838 s.next_read_length(1);
1839 memset(read_buf, 0, sizeof(read_buf));
1840 error = boost::system::error_code();
1841 bytes_transferred = boost::asio::read(s, buffers,
1842 old_style_transfer_all, error);
1843 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1844 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1845 BOOST_ASIO_CHECK(!error);
1846
1847 s.reset(read_data, sizeof(read_data));
1848 s.next_read_length(10);
1849 memset(read_buf, 0, sizeof(read_buf));
1850 error = boost::system::error_code();
1851 bytes_transferred = boost::asio::read(s, buffers,
1852 old_style_transfer_all, error);
1853 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1854 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1855 BOOST_ASIO_CHECK(!error);
1856
1857 s.reset(read_data, sizeof(read_data));
1858 memset(read_buf, 0, sizeof(read_buf));
1859 bytes_transferred = boost::asio::read(s, buffers, short_transfer(), error);
1860 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1861 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1862 BOOST_ASIO_CHECK(!error);
1863
1864 s.reset(read_data, sizeof(read_data));
1865 s.next_read_length(1);
1866 memset(read_buf, 0, sizeof(read_buf));
1867 error = boost::system::error_code();
1868 bytes_transferred = boost::asio::read(s, buffers, short_transfer(), error);
1869 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1870 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1871 BOOST_ASIO_CHECK(!error);
1872
1873 s.reset(read_data, sizeof(read_data));
1874 s.next_read_length(10);
1875 memset(read_buf, 0, sizeof(read_buf));
1876 error = boost::system::error_code();
1877 bytes_transferred = boost::asio::read(s, buffers, short_transfer(), error);
1878 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1879 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1880 BOOST_ASIO_CHECK(!error);
1881}
1882
1883void test_4_arg_dynamic_string_read()
1884{
1885 boost::asio::io_context ioc;
1886 test_stream s(ioc);
1887 std::string data;
1888 boost::asio::dynamic_string_buffer<char, std::string::traits_type,
1889 std::string::allocator_type> sb
1890 = boost::asio::dynamic_buffer(data, sizeof(read_data));
1891
1892 s.reset(read_data, sizeof(read_data));
1893 sb.consume(sb.size());
1894 boost::system::error_code error;
1895 size_t bytes_transferred = boost::asio::read(s, sb,
1896 boost::asio::transfer_all(), error);
1897 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1898 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1899 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
1900 BOOST_ASIO_CHECK(!error);
1901
1902 s.reset(read_data, sizeof(read_data));
92f5a8d4 1903 s.next_read_length(1);
7c673cae 1904 sb.consume(sb.size());
92f5a8d4 1905 error = boost::system::error_code();
7c673cae 1906 bytes_transferred = boost::asio::read(s, sb,
92f5a8d4 1907 boost::asio::transfer_all(), error);
7c673cae
FG
1908 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1909 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
92f5a8d4
TL
1910 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
1911 BOOST_ASIO_CHECK(!error);
1912
1913 s.reset(read_data, sizeof(read_data));
1914 s.next_read_length(10);
1915 sb.consume(sb.size());
1916 error = boost::system::error_code();
1917 bytes_transferred = boost::asio::read(s, sb,
1918 boost::asio::transfer_all(), error);
1919 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1920 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1921 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
1922 BOOST_ASIO_CHECK(!error);
1923
1924 s.reset(read_data, sizeof(read_data));
1925 sb.consume(sb.size());
1926 error = boost::system::error_code();
1927 bytes_transferred = boost::asio::read(s, sb,
1928 boost::asio::transfer_at_least(1), error);
1929 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1930 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1931 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
1932 BOOST_ASIO_CHECK(!error);
1933
1934 s.reset(read_data, sizeof(read_data));
1935 s.next_read_length(1);
1936 sb.consume(sb.size());
1937 error = boost::system::error_code();
1938 bytes_transferred = boost::asio::read(s, sb,
92f5a8d4
TL
1939 boost::asio::transfer_at_least(1), error);
1940 BOOST_ASIO_CHECK(bytes_transferred == 1);
1941 BOOST_ASIO_CHECK(sb.size() == 1);
1942 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 1));
1943 BOOST_ASIO_CHECK(!error);
1944
1945 s.reset(read_data, sizeof(read_data));
1946 s.next_read_length(10);
1947 sb.consume(sb.size());
1948 error = boost::system::error_code();
1949 bytes_transferred = boost::asio::read(s, sb,
1950 boost::asio::transfer_at_least(1), error);
1951 BOOST_ASIO_CHECK(bytes_transferred == 10);
1952 BOOST_ASIO_CHECK(sb.size() == 10);
1953 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
1954 BOOST_ASIO_CHECK(!error);
1955
1956 s.reset(read_data, sizeof(read_data));
1957 sb.consume(sb.size());
1958 error = boost::system::error_code();
1959 bytes_transferred = boost::asio::read(s, sb,
1960 boost::asio::transfer_at_least(10), error);
7c673cae
FG
1961 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1962 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
92f5a8d4
TL
1963 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
1964 BOOST_ASIO_CHECK(!error);
1965
1966 s.reset(read_data, sizeof(read_data));
1967 s.next_read_length(1);
1968 sb.consume(sb.size());
1969 error = boost::system::error_code();
1970 bytes_transferred = boost::asio::read(s, sb,
1971 boost::asio::transfer_at_least(10), error);
1972 BOOST_ASIO_CHECK(bytes_transferred == 10);
1973 BOOST_ASIO_CHECK(sb.size() == 10);
1974 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
7c673cae
FG
1975 BOOST_ASIO_CHECK(!error);
1976
1977 s.reset(read_data, sizeof(read_data));
1978 s.next_read_length(10);
1979 sb.consume(sb.size());
1980 error = boost::system::error_code();
1981 bytes_transferred = boost::asio::read(s, sb,
92f5a8d4
TL
1982 boost::asio::transfer_at_least(10), error);
1983 BOOST_ASIO_CHECK(bytes_transferred == 10);
1984 BOOST_ASIO_CHECK(sb.size() == 10);
1985 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
1986 BOOST_ASIO_CHECK(!error);
1987
1988 s.reset(read_data, sizeof(read_data));
1989 sb.consume(sb.size());
1990 error = boost::system::error_code();
1991 bytes_transferred = boost::asio::read(s, sb,
1992 boost::asio::transfer_at_least(42), error);
7c673cae
FG
1993 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1994 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
92f5a8d4
TL
1995 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
1996 BOOST_ASIO_CHECK(!error);
1997
1998 s.reset(read_data, sizeof(read_data));
1999 s.next_read_length(1);
2000 sb.consume(sb.size());
2001 error = boost::system::error_code();
2002 bytes_transferred = boost::asio::read(s, sb,
2003 boost::asio::transfer_at_least(42), error);
2004 BOOST_ASIO_CHECK(bytes_transferred == 42);
2005 BOOST_ASIO_CHECK(sb.size() == 42);
2006 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 42));
2007 BOOST_ASIO_CHECK(!error);
2008
2009 s.reset(read_data, sizeof(read_data));
2010 s.next_read_length(10);
2011 sb.consume(sb.size());
2012 error = boost::system::error_code();
2013 bytes_transferred = boost::asio::read(s, sb,
2014 boost::asio::transfer_at_least(42), error);
2015 BOOST_ASIO_CHECK(bytes_transferred == 50);
2016 BOOST_ASIO_CHECK(sb.size() == 50);
2017 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 50));
2018 BOOST_ASIO_CHECK(!error);
2019
2020 s.reset(read_data, sizeof(read_data));
2021 sb.consume(sb.size());
2022 error = boost::system::error_code();
2023 bytes_transferred = boost::asio::read(s, sb,
2024 boost::asio::transfer_exactly(1), error);
2025 BOOST_ASIO_CHECK(bytes_transferred == 1);
2026 BOOST_ASIO_CHECK(sb.size() == 1);
2027 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 1));
2028 BOOST_ASIO_CHECK(!error);
2029
2030 s.reset(read_data, sizeof(read_data));
2031 s.next_read_length(1);
2032 sb.consume(sb.size());
2033 error = boost::system::error_code();
2034 bytes_transferred = boost::asio::read(s, sb,
2035 boost::asio::transfer_exactly(1), error);
2036 BOOST_ASIO_CHECK(bytes_transferred == 1);
2037 BOOST_ASIO_CHECK(sb.size() == 1);
2038 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 1));
2039 BOOST_ASIO_CHECK(!error);
2040
2041 s.reset(read_data, sizeof(read_data));
2042 s.next_read_length(10);
2043 sb.consume(sb.size());
2044 error = boost::system::error_code();
2045 bytes_transferred = boost::asio::read(s, sb,
2046 boost::asio::transfer_exactly(1), error);
2047 BOOST_ASIO_CHECK(bytes_transferred == 1);
2048 BOOST_ASIO_CHECK(sb.size() == 1);
2049 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 1));
2050 BOOST_ASIO_CHECK(!error);
2051
2052 s.reset(read_data, sizeof(read_data));
2053 sb.consume(sb.size());
2054 error = boost::system::error_code();
2055 bytes_transferred = boost::asio::read(s, sb,
2056 boost::asio::transfer_exactly(10), error);
2057 BOOST_ASIO_CHECK(bytes_transferred == 10);
2058 BOOST_ASIO_CHECK(sb.size() == 10);
2059 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
2060 BOOST_ASIO_CHECK(!error);
2061
2062 s.reset(read_data, sizeof(read_data));
2063 s.next_read_length(1);
2064 sb.consume(sb.size());
2065 error = boost::system::error_code();
2066 bytes_transferred = boost::asio::read(s, sb,
2067 boost::asio::transfer_exactly(10), error);
2068 BOOST_ASIO_CHECK(bytes_transferred == 10);
2069 BOOST_ASIO_CHECK(sb.size() == 10);
2070 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
2071 BOOST_ASIO_CHECK(!error);
2072
2073 s.reset(read_data, sizeof(read_data));
2074 s.next_read_length(10);
2075 sb.consume(sb.size());
2076 error = boost::system::error_code();
2077 bytes_transferred = boost::asio::read(s, sb,
2078 boost::asio::transfer_exactly(10), error);
2079 BOOST_ASIO_CHECK(bytes_transferred == 10);
2080 BOOST_ASIO_CHECK(sb.size() == 10);
2081 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
2082 BOOST_ASIO_CHECK(!error);
2083
2084 s.reset(read_data, sizeof(read_data));
2085 sb.consume(sb.size());
2086 error = boost::system::error_code();
2087 bytes_transferred = boost::asio::read(s, sb,
2088 boost::asio::transfer_exactly(42), error);
2089 BOOST_ASIO_CHECK(bytes_transferred == 42);
2090 BOOST_ASIO_CHECK(sb.size() == 42);
2091 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 42));
2092 BOOST_ASIO_CHECK(!error);
2093
2094 s.reset(read_data, sizeof(read_data));
2095 s.next_read_length(1);
2096 sb.consume(sb.size());
2097 error = boost::system::error_code();
2098 bytes_transferred = boost::asio::read(s, sb,
2099 boost::asio::transfer_exactly(42), error);
2100 BOOST_ASIO_CHECK(bytes_transferred == 42);
2101 BOOST_ASIO_CHECK(sb.size() == 42);
2102 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 42));
2103 BOOST_ASIO_CHECK(!error);
2104
2105 s.reset(read_data, sizeof(read_data));
2106 s.next_read_length(10);
2107 sb.consume(sb.size());
2108 error = boost::system::error_code();
2109 bytes_transferred = boost::asio::read(s, sb,
2110 boost::asio::transfer_exactly(42), error);
2111 BOOST_ASIO_CHECK(bytes_transferred == 42);
2112 BOOST_ASIO_CHECK(sb.size() == 42);
2113 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 42));
2114 BOOST_ASIO_CHECK(!error);
2115
2116 s.reset(read_data, sizeof(read_data));
2117 sb.consume(sb.size());
2118 bytes_transferred = boost::asio::read(s, sb,
2119 old_style_transfer_all, error);
2120 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2121 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2122 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
2123 BOOST_ASIO_CHECK(!error);
2124
2125 s.reset(read_data, sizeof(read_data));
2126 s.next_read_length(1);
2127 sb.consume(sb.size());
2128 error = boost::system::error_code();
2129 bytes_transferred = boost::asio::read(s, sb,
2130 old_style_transfer_all, error);
2131 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2132 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2133 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
2134 BOOST_ASIO_CHECK(!error);
2135
2136 s.reset(read_data, sizeof(read_data));
2137 s.next_read_length(10);
2138 sb.consume(sb.size());
2139 error = boost::system::error_code();
2140 bytes_transferred = boost::asio::read(s, sb,
2141 old_style_transfer_all, error);
2142 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2143 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2144 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
2145 BOOST_ASIO_CHECK(!error);
2146
2147 s.reset(read_data, sizeof(read_data));
2148 sb.consume(sb.size());
2149 bytes_transferred = boost::asio::read(s, sb, short_transfer(), error);
2150 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2151 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2152 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
2153 BOOST_ASIO_CHECK(!error);
2154
2155 s.reset(read_data, sizeof(read_data));
2156 s.next_read_length(1);
2157 sb.consume(sb.size());
2158 error = boost::system::error_code();
2159 bytes_transferred = boost::asio::read(s, sb, short_transfer(), error);
2160 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2161 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2162 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
2163 BOOST_ASIO_CHECK(!error);
2164
2165 s.reset(read_data, sizeof(read_data));
2166 s.next_read_length(10);
2167 sb.consume(sb.size());
2168 error = boost::system::error_code();
2169 bytes_transferred = boost::asio::read(s, sb, short_transfer(), error);
2170 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2171 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2172 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
2173 BOOST_ASIO_CHECK(!error);
2174}
2175
2176void test_4_arg_streambuf_read()
2177{
2178#if !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
2179 boost::asio::io_context ioc;
2180 test_stream s(ioc);
2181 boost::asio::streambuf sb(sizeof(read_data));
2182
2183 s.reset(read_data, sizeof(read_data));
2184 sb.consume(sb.size());
2185 boost::system::error_code error;
2186 size_t bytes_transferred = boost::asio::read(s, sb,
2187 boost::asio::transfer_all(), error);
2188 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2189 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2190 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2191 BOOST_ASIO_CHECK(!error);
2192
2193 s.reset(read_data, sizeof(read_data));
2194 s.next_read_length(1);
2195 sb.consume(sb.size());
2196 error = boost::system::error_code();
2197 bytes_transferred = boost::asio::read(s, sb,
2198 boost::asio::transfer_all(), error);
2199 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2200 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2201 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2202 BOOST_ASIO_CHECK(!error);
2203
2204 s.reset(read_data, sizeof(read_data));
2205 s.next_read_length(10);
2206 sb.consume(sb.size());
2207 error = boost::system::error_code();
2208 bytes_transferred = boost::asio::read(s, sb,
2209 boost::asio::transfer_all(), error);
2210 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2211 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2212 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2213 BOOST_ASIO_CHECK(!error);
2214
2215 s.reset(read_data, sizeof(read_data));
2216 sb.consume(sb.size());
2217 error = boost::system::error_code();
2218 bytes_transferred = boost::asio::read(s, sb,
2219 boost::asio::transfer_at_least(1), error);
2220 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2221 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2222 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2223 BOOST_ASIO_CHECK(!error);
2224
2225 s.reset(read_data, sizeof(read_data));
2226 s.next_read_length(1);
2227 sb.consume(sb.size());
2228 error = boost::system::error_code();
2229 bytes_transferred = boost::asio::read(s, sb,
2230 boost::asio::transfer_at_least(1), error);
2231 BOOST_ASIO_CHECK(bytes_transferred == 1);
2232 BOOST_ASIO_CHECK(sb.size() == 1);
2233 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
2234 BOOST_ASIO_CHECK(!error);
2235
2236 s.reset(read_data, sizeof(read_data));
2237 s.next_read_length(10);
2238 sb.consume(sb.size());
2239 error = boost::system::error_code();
2240 bytes_transferred = boost::asio::read(s, sb,
2241 boost::asio::transfer_at_least(1), error);
2242 BOOST_ASIO_CHECK(bytes_transferred == 10);
2243 BOOST_ASIO_CHECK(sb.size() == 10);
2244 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
2245 BOOST_ASIO_CHECK(!error);
2246
2247 s.reset(read_data, sizeof(read_data));
2248 sb.consume(sb.size());
2249 error = boost::system::error_code();
2250 bytes_transferred = boost::asio::read(s, sb,
2251 boost::asio::transfer_at_least(10), error);
2252 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2253 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2254 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2255 BOOST_ASIO_CHECK(!error);
2256
2257 s.reset(read_data, sizeof(read_data));
2258 s.next_read_length(1);
2259 sb.consume(sb.size());
2260 error = boost::system::error_code();
2261 bytes_transferred = boost::asio::read(s, sb,
2262 boost::asio::transfer_at_least(10), error);
2263 BOOST_ASIO_CHECK(bytes_transferred == 10);
2264 BOOST_ASIO_CHECK(sb.size() == 10);
2265 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
2266 BOOST_ASIO_CHECK(!error);
2267
2268 s.reset(read_data, sizeof(read_data));
2269 s.next_read_length(10);
2270 sb.consume(sb.size());
2271 error = boost::system::error_code();
2272 bytes_transferred = boost::asio::read(s, sb,
2273 boost::asio::transfer_at_least(10), error);
2274 BOOST_ASIO_CHECK(bytes_transferred == 10);
2275 BOOST_ASIO_CHECK(sb.size() == 10);
2276 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
2277 BOOST_ASIO_CHECK(!error);
2278
2279 s.reset(read_data, sizeof(read_data));
2280 sb.consume(sb.size());
2281 error = boost::system::error_code();
2282 bytes_transferred = boost::asio::read(s, sb,
2283 boost::asio::transfer_at_least(42), error);
2284 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2285 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2286 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2287 BOOST_ASIO_CHECK(!error);
2288
2289 s.reset(read_data, sizeof(read_data));
2290 s.next_read_length(1);
2291 sb.consume(sb.size());
2292 error = boost::system::error_code();
2293 bytes_transferred = boost::asio::read(s, sb,
2294 boost::asio::transfer_at_least(42), error);
2295 BOOST_ASIO_CHECK(bytes_transferred == 42);
2296 BOOST_ASIO_CHECK(sb.size() == 42);
2297 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
2298 BOOST_ASIO_CHECK(!error);
2299
2300 s.reset(read_data, sizeof(read_data));
2301 s.next_read_length(10);
2302 sb.consume(sb.size());
2303 error = boost::system::error_code();
2304 bytes_transferred = boost::asio::read(s, sb,
2305 boost::asio::transfer_at_least(42), error);
2306 BOOST_ASIO_CHECK(bytes_transferred == 50);
2307 BOOST_ASIO_CHECK(sb.size() == 50);
2308 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 50));
2309 BOOST_ASIO_CHECK(!error);
2310
2311 s.reset(read_data, sizeof(read_data));
2312 sb.consume(sb.size());
2313 error = boost::system::error_code();
2314 bytes_transferred = boost::asio::read(s, sb,
2315 boost::asio::transfer_exactly(1), error);
2316 BOOST_ASIO_CHECK(bytes_transferred == 1);
2317 BOOST_ASIO_CHECK(sb.size() == 1);
2318 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
2319 BOOST_ASIO_CHECK(!error);
2320
2321 s.reset(read_data, sizeof(read_data));
2322 s.next_read_length(1);
2323 sb.consume(sb.size());
2324 error = boost::system::error_code();
2325 bytes_transferred = boost::asio::read(s, sb,
2326 boost::asio::transfer_exactly(1), error);
2327 BOOST_ASIO_CHECK(bytes_transferred == 1);
2328 BOOST_ASIO_CHECK(sb.size() == 1);
2329 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
2330 BOOST_ASIO_CHECK(!error);
2331
2332 s.reset(read_data, sizeof(read_data));
2333 s.next_read_length(10);
2334 sb.consume(sb.size());
2335 error = boost::system::error_code();
2336 bytes_transferred = boost::asio::read(s, sb,
2337 boost::asio::transfer_exactly(1), error);
2338 BOOST_ASIO_CHECK(bytes_transferred == 1);
2339 BOOST_ASIO_CHECK(sb.size() == 1);
2340 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
2341 BOOST_ASIO_CHECK(!error);
2342
2343 s.reset(read_data, sizeof(read_data));
2344 sb.consume(sb.size());
2345 error = boost::system::error_code();
2346 bytes_transferred = boost::asio::read(s, sb,
2347 boost::asio::transfer_exactly(10), error);
2348 BOOST_ASIO_CHECK(bytes_transferred == 10);
2349 BOOST_ASIO_CHECK(sb.size() == 10);
2350 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
2351 BOOST_ASIO_CHECK(!error);
2352
2353 s.reset(read_data, sizeof(read_data));
2354 s.next_read_length(1);
2355 sb.consume(sb.size());
2356 error = boost::system::error_code();
2357 bytes_transferred = boost::asio::read(s, sb,
2358 boost::asio::transfer_exactly(10), error);
2359 BOOST_ASIO_CHECK(bytes_transferred == 10);
2360 BOOST_ASIO_CHECK(sb.size() == 10);
2361 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
2362 BOOST_ASIO_CHECK(!error);
2363
2364 s.reset(read_data, sizeof(read_data));
2365 s.next_read_length(10);
2366 sb.consume(sb.size());
2367 error = boost::system::error_code();
2368 bytes_transferred = boost::asio::read(s, sb,
2369 boost::asio::transfer_exactly(10), error);
2370 BOOST_ASIO_CHECK(bytes_transferred == 10);
2371 BOOST_ASIO_CHECK(sb.size() == 10);
2372 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
2373 BOOST_ASIO_CHECK(!error);
2374
2375 s.reset(read_data, sizeof(read_data));
2376 sb.consume(sb.size());
2377 error = boost::system::error_code();
2378 bytes_transferred = boost::asio::read(s, sb,
2379 boost::asio::transfer_exactly(42), error);
2380 BOOST_ASIO_CHECK(bytes_transferred == 42);
2381 BOOST_ASIO_CHECK(sb.size() == 42);
2382 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
2383 BOOST_ASIO_CHECK(!error);
2384
2385 s.reset(read_data, sizeof(read_data));
2386 s.next_read_length(1);
2387 sb.consume(sb.size());
2388 error = boost::system::error_code();
2389 bytes_transferred = boost::asio::read(s, sb,
2390 boost::asio::transfer_exactly(42), error);
2391 BOOST_ASIO_CHECK(bytes_transferred == 42);
2392 BOOST_ASIO_CHECK(sb.size() == 42);
2393 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
2394 BOOST_ASIO_CHECK(!error);
2395
2396 s.reset(read_data, sizeof(read_data));
2397 s.next_read_length(10);
2398 sb.consume(sb.size());
2399 error = boost::system::error_code();
2400 bytes_transferred = boost::asio::read(s, sb,
2401 boost::asio::transfer_exactly(42), error);
2402 BOOST_ASIO_CHECK(bytes_transferred == 42);
2403 BOOST_ASIO_CHECK(sb.size() == 42);
2404 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
2405 BOOST_ASIO_CHECK(!error);
2406
2407 s.reset(read_data, sizeof(read_data));
2408 sb.consume(sb.size());
2409 bytes_transferred = boost::asio::read(s, sb,
2410 old_style_transfer_all, error);
2411 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2412 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2413 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2414 BOOST_ASIO_CHECK(!error);
2415
2416 s.reset(read_data, sizeof(read_data));
2417 s.next_read_length(1);
2418 sb.consume(sb.size());
2419 error = boost::system::error_code();
2420 bytes_transferred = boost::asio::read(s, sb,
2421 old_style_transfer_all, error);
2422 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2423 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2424 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2425 BOOST_ASIO_CHECK(!error);
2426
2427 s.reset(read_data, sizeof(read_data));
2428 s.next_read_length(10);
2429 sb.consume(sb.size());
2430 error = boost::system::error_code();
2431 bytes_transferred = boost::asio::read(s, sb,
2432 old_style_transfer_all, error);
2433 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2434 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2435 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2436 BOOST_ASIO_CHECK(!error);
2437
2438 s.reset(read_data, sizeof(read_data));
2439 sb.consume(sb.size());
2440 bytes_transferred = boost::asio::read(s, sb, short_transfer(), error);
2441 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2442 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2443 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2444 BOOST_ASIO_CHECK(!error);
2445
2446 s.reset(read_data, sizeof(read_data));
2447 s.next_read_length(1);
2448 sb.consume(sb.size());
2449 error = boost::system::error_code();
2450 bytes_transferred = boost::asio::read(s, sb, short_transfer(), error);
2451 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2452 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2453 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2454 BOOST_ASIO_CHECK(!error);
2455
2456 s.reset(read_data, sizeof(read_data));
2457 s.next_read_length(10);
2458 sb.consume(sb.size());
2459 error = boost::system::error_code();
2460 bytes_transferred = boost::asio::read(s, sb, short_transfer(), error);
2461 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2462 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2463 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2464 BOOST_ASIO_CHECK(!error);
2465#endif // !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
2466}
2467
2468void async_read_handler(const boost::system::error_code& e,
2469 size_t bytes_transferred, size_t expected_bytes_transferred, bool* called)
2470{
2471 *called = true;
2472 BOOST_ASIO_CHECK(!e);
2473 BOOST_ASIO_CHECK(bytes_transferred == expected_bytes_transferred);
2474}
2475
2476void test_3_arg_mutable_buffer_async_read()
2477{
2478#if defined(BOOST_ASIO_HAS_BOOST_BIND)
2479 namespace bindns = boost;
2480#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2481 namespace bindns = std;
92f5a8d4 2482#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
2483 using bindns::placeholders::_1;
2484 using bindns::placeholders::_2;
92f5a8d4
TL
2485
2486 boost::asio::io_context ioc;
2487 test_stream s(ioc);
2488 char read_buf[sizeof(read_data)];
2489 boost::asio::mutable_buffer buffers
2490 = boost::asio::buffer(read_buf, sizeof(read_buf));
2491
2492 s.reset(read_data, sizeof(read_data));
2493 memset(read_buf, 0, sizeof(read_buf));
2494 bool called = false;
2495 boost::asio::async_read(s, buffers,
2496 bindns::bind(async_read_handler,
2497 _1, _2, sizeof(read_data), &called));
2498 ioc.restart();
2499 ioc.run();
2500 BOOST_ASIO_CHECK(called);
2501 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2502
2503 s.reset(read_data, sizeof(read_data));
2504 s.next_read_length(1);
2505 memset(read_buf, 0, sizeof(read_buf));
2506 called = false;
2507 boost::asio::async_read(s, buffers,
2508 bindns::bind(async_read_handler,
2509 _1, _2, sizeof(read_data), &called));
2510 ioc.restart();
2511 ioc.run();
2512 BOOST_ASIO_CHECK(called);
2513 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2514
2515 s.reset(read_data, sizeof(read_data));
2516 s.next_read_length(10);
2517 memset(read_buf, 0, sizeof(read_buf));
2518 called = false;
2519 boost::asio::async_read(s, buffers,
2520 bindns::bind(async_read_handler,
2521 _1, _2, sizeof(read_data), &called));
2522 ioc.restart();
2523 ioc.run();
2524 BOOST_ASIO_CHECK(called);
2525 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2526
2527 s.reset(read_data, sizeof(read_data));
2528 memset(read_buf, 0, sizeof(read_buf));
2529 int i = boost::asio::async_read(s, buffers, archetypes::lazy_handler());
2530 BOOST_ASIO_CHECK(i == 42);
2531 ioc.restart();
2532 ioc.run();
2533 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2534}
2535
2536void test_3_arg_boost_array_buffers_async_read()
2537{
2538#if defined(BOOST_ASIO_HAS_BOOST_BIND)
2539 namespace bindns = boost;
2540#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2541 namespace bindns = std;
92f5a8d4 2542#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
2543 using bindns::placeholders::_1;
2544 using bindns::placeholders::_2;
92f5a8d4
TL
2545
2546#if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
2547 boost::asio::io_context ioc;
2548 test_stream s(ioc);
2549 char read_buf[sizeof(read_data)];
2550 boost::array<boost::asio::mutable_buffer, 2> buffers = { {
2551 boost::asio::buffer(read_buf, 32),
2552 boost::asio::buffer(read_buf) + 32 } };
2553
2554 s.reset(read_data, sizeof(read_data));
2555 memset(read_buf, 0, sizeof(read_buf));
2556 bool called = false;
2557 boost::asio::async_read(s, buffers,
2558 bindns::bind(async_read_handler,
2559 _1, _2, sizeof(read_data), &called));
2560 ioc.restart();
2561 ioc.run();
2562 BOOST_ASIO_CHECK(called);
2563 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2564
2565 s.reset(read_data, sizeof(read_data));
2566 s.next_read_length(1);
2567 memset(read_buf, 0, sizeof(read_buf));
2568 called = false;
2569 boost::asio::async_read(s, buffers,
2570 bindns::bind(async_read_handler,
2571 _1, _2, sizeof(read_data), &called));
2572 ioc.restart();
2573 ioc.run();
2574 BOOST_ASIO_CHECK(called);
2575 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2576
2577 s.reset(read_data, sizeof(read_data));
2578 s.next_read_length(10);
2579 memset(read_buf, 0, sizeof(read_buf));
2580 called = false;
2581 boost::asio::async_read(s, buffers,
2582 bindns::bind(async_read_handler,
2583 _1, _2, sizeof(read_data), &called));
2584 ioc.restart();
2585 ioc.run();
2586 BOOST_ASIO_CHECK(called);
2587 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2588
2589 s.reset(read_data, sizeof(read_data));
2590 memset(read_buf, 0, sizeof(read_buf));
2591 int i = boost::asio::async_read(s, buffers, archetypes::lazy_handler());
2592 BOOST_ASIO_CHECK(i == 42);
2593 ioc.restart();
2594 ioc.run();
2595 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2596#endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
2597}
2598
2599void test_3_arg_std_array_buffers_async_read()
2600{
2601#if defined(BOOST_ASIO_HAS_BOOST_BIND)
2602 namespace bindns = boost;
2603#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2604 namespace bindns = std;
92f5a8d4 2605#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
2606 using bindns::placeholders::_1;
2607 using bindns::placeholders::_2;
92f5a8d4
TL
2608
2609#if defined(BOOST_ASIO_HAS_STD_ARRAY)
2610 boost::asio::io_context ioc;
2611 test_stream s(ioc);
2612 char read_buf[sizeof(read_data)];
2613 std::array<boost::asio::mutable_buffer, 2> buffers = { {
2614 boost::asio::buffer(read_buf, 32),
2615 boost::asio::buffer(read_buf) + 32 } };
2616
2617 s.reset(read_data, sizeof(read_data));
2618 memset(read_buf, 0, sizeof(read_buf));
2619 bool called = false;
2620 boost::asio::async_read(s, buffers,
2621 bindns::bind(async_read_handler,
2622 _1, _2, sizeof(read_data), &called));
2623 ioc.restart();
2624 ioc.run();
2625 BOOST_ASIO_CHECK(called);
2626 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2627
2628 s.reset(read_data, sizeof(read_data));
2629 s.next_read_length(1);
2630 memset(read_buf, 0, sizeof(read_buf));
2631 called = false;
2632 boost::asio::async_read(s, buffers,
2633 bindns::bind(async_read_handler,
2634 _1, _2, sizeof(read_data), &called));
2635 ioc.restart();
2636 ioc.run();
2637 BOOST_ASIO_CHECK(called);
2638 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2639
2640 s.reset(read_data, sizeof(read_data));
2641 s.next_read_length(10);
2642 memset(read_buf, 0, sizeof(read_buf));
2643 called = false;
2644 boost::asio::async_read(s, buffers,
2645 bindns::bind(async_read_handler,
2646 _1, _2, sizeof(read_data), &called));
2647 ioc.restart();
2648 ioc.run();
2649 BOOST_ASIO_CHECK(called);
2650 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2651
2652 s.reset(read_data, sizeof(read_data));
2653 memset(read_buf, 0, sizeof(read_buf));
2654 int i = boost::asio::async_read(s, buffers, archetypes::lazy_handler());
2655 BOOST_ASIO_CHECK(i == 42);
2656 ioc.restart();
2657 ioc.run();
2658 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2659#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
2660}
2661
2662void test_3_arg_vector_buffers_async_read()
2663{
2664#if defined(BOOST_ASIO_HAS_BOOST_BIND)
2665 namespace bindns = boost;
2666#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2667 namespace bindns = std;
92f5a8d4 2668#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
2669 using bindns::placeholders::_1;
2670 using bindns::placeholders::_2;
92f5a8d4
TL
2671
2672 boost::asio::io_context ioc;
2673 test_stream s(ioc);
2674 char read_buf[sizeof(read_data)];
2675 std::vector<boost::asio::mutable_buffer> buffers;
2676 buffers.push_back(boost::asio::buffer(read_buf, 32));
2677 buffers.push_back(boost::asio::buffer(read_buf, 39) + 32);
2678 buffers.push_back(boost::asio::buffer(read_buf) + 39);
2679
2680 s.reset(read_data, sizeof(read_data));
2681 memset(read_buf, 0, sizeof(read_buf));
2682 bool called = false;
2683 boost::asio::async_read(s, buffers,
2684 bindns::bind(async_read_handler,
2685 _1, _2, sizeof(read_data), &called));
2686 ioc.restart();
2687 ioc.run();
2688 BOOST_ASIO_CHECK(called);
2689 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2690
2691 s.reset(read_data, sizeof(read_data));
2692 s.next_read_length(1);
2693 memset(read_buf, 0, sizeof(read_buf));
2694 called = false;
2695 boost::asio::async_read(s, buffers,
2696 bindns::bind(async_read_handler,
2697 _1, _2, sizeof(read_data), &called));
2698 ioc.restart();
2699 ioc.run();
2700 BOOST_ASIO_CHECK(called);
2701 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2702
2703 s.reset(read_data, sizeof(read_data));
2704 s.next_read_length(10);
2705 memset(read_buf, 0, sizeof(read_buf));
2706 called = false;
2707 boost::asio::async_read(s, buffers,
2708 bindns::bind(async_read_handler,
2709 _1, _2, sizeof(read_data), &called));
2710 ioc.restart();
2711 ioc.run();
2712 BOOST_ASIO_CHECK(called);
2713 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2714
2715 s.reset(read_data, sizeof(read_data));
2716 memset(read_buf, 0, sizeof(read_buf));
2717 int i = boost::asio::async_read(s, buffers, archetypes::lazy_handler());
2718 BOOST_ASIO_CHECK(i == 42);
2719 ioc.restart();
2720 ioc.run();
2721 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2722}
2723
2724void test_3_arg_dynamic_string_async_read()
2725{
2726#if defined(BOOST_ASIO_HAS_BOOST_BIND)
2727 namespace bindns = boost;
2728#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2729 namespace bindns = std;
92f5a8d4 2730#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
2731 using bindns::placeholders::_1;
2732 using bindns::placeholders::_2;
92f5a8d4
TL
2733
2734 boost::asio::io_context ioc;
2735 test_stream s(ioc);
2736 std::string data;
2737 boost::asio::dynamic_string_buffer<char, std::string::traits_type,
2738 std::string::allocator_type> sb
2739 = boost::asio::dynamic_buffer(data, sizeof(read_data));
2740
2741 s.reset(read_data, sizeof(read_data));
2742 sb.consume(sb.size());
2743 bool called = false;
2744 boost::asio::async_read(s, sb,
2745 bindns::bind(async_read_handler,
2746 _1, _2, sizeof(read_data), &called));
2747 ioc.restart();
2748 ioc.run();
2749 BOOST_ASIO_CHECK(called);
2750 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2751 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
2752
2753 s.reset(read_data, sizeof(read_data));
2754 s.next_read_length(1);
2755 sb.consume(sb.size());
2756 called = false;
2757 boost::asio::async_read(s, sb,
2758 bindns::bind(async_read_handler,
2759 _1, _2, sizeof(read_data), &called));
2760 ioc.restart();
2761 ioc.run();
2762 BOOST_ASIO_CHECK(called);
2763 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2764 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
2765
2766 s.reset(read_data, sizeof(read_data));
2767 s.next_read_length(10);
2768 sb.consume(sb.size());
2769 called = false;
2770 boost::asio::async_read(s, sb,
2771 bindns::bind(async_read_handler,
2772 _1, _2, sizeof(read_data), &called));
2773 ioc.restart();
2774 ioc.run();
2775 BOOST_ASIO_CHECK(called);
2776 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2777 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
2778
2779 s.reset(read_data, sizeof(read_data));
2780 sb.consume(sb.size());
2781 int i = boost::asio::async_read(s, sb, archetypes::lazy_handler());
2782 BOOST_ASIO_CHECK(i == 42);
2783 ioc.restart();
2784 ioc.run();
2785 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2786 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
2787}
2788
2789void test_3_arg_streambuf_async_read()
2790{
2791#if !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
2792#if defined(BOOST_ASIO_HAS_BOOST_BIND)
2793 namespace bindns = boost;
2794#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2795 namespace bindns = std;
92f5a8d4 2796#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
2797 using bindns::placeholders::_1;
2798 using bindns::placeholders::_2;
92f5a8d4
TL
2799
2800 boost::asio::io_context ioc;
2801 test_stream s(ioc);
2802 boost::asio::streambuf sb(sizeof(read_data));
2803
2804 s.reset(read_data, sizeof(read_data));
2805 sb.consume(sb.size());
2806 bool called = false;
2807 boost::asio::async_read(s, sb,
2808 bindns::bind(async_read_handler,
2809 _1, _2, sizeof(read_data), &called));
2810 ioc.restart();
2811 ioc.run();
2812 BOOST_ASIO_CHECK(called);
2813 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7c673cae 2814 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
7c673cae
FG
2815
2816 s.reset(read_data, sizeof(read_data));
92f5a8d4 2817 s.next_read_length(1);
7c673cae 2818 sb.consume(sb.size());
92f5a8d4
TL
2819 called = false;
2820 boost::asio::async_read(s, sb,
2821 bindns::bind(async_read_handler,
2822 _1, _2, sizeof(read_data), &called));
2823 ioc.restart();
2824 ioc.run();
2825 BOOST_ASIO_CHECK(called);
7c673cae
FG
2826 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2827 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
7c673cae
FG
2828
2829 s.reset(read_data, sizeof(read_data));
92f5a8d4 2830 s.next_read_length(10);
7c673cae 2831 sb.consume(sb.size());
92f5a8d4
TL
2832 called = false;
2833 boost::asio::async_read(s, sb,
2834 bindns::bind(async_read_handler,
2835 _1, _2, sizeof(read_data), &called));
2836 ioc.restart();
2837 ioc.run();
2838 BOOST_ASIO_CHECK(called);
7c673cae
FG
2839 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2840 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
7c673cae
FG
2841
2842 s.reset(read_data, sizeof(read_data));
7c673cae 2843 sb.consume(sb.size());
92f5a8d4
TL
2844 int i = boost::asio::async_read(s, sb, archetypes::lazy_handler());
2845 BOOST_ASIO_CHECK(i == 42);
2846 ioc.restart();
2847 ioc.run();
7c673cae
FG
2848 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2849 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
92f5a8d4 2850#endif // !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
7c673cae
FG
2851}
2852
92f5a8d4 2853void test_4_arg_mutable_buffer_async_read()
7c673cae
FG
2854{
2855#if defined(BOOST_ASIO_HAS_BOOST_BIND)
2856 namespace bindns = boost;
2857#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2858 namespace bindns = std;
7c673cae 2859#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
2860 using bindns::placeholders::_1;
2861 using bindns::placeholders::_2;
7c673cae 2862
b32b8144
FG
2863 boost::asio::io_context ioc;
2864 test_stream s(ioc);
7c673cae 2865 char read_buf[sizeof(read_data)];
b32b8144 2866 boost::asio::mutable_buffer buffers
7c673cae
FG
2867 = boost::asio::buffer(read_buf, sizeof(read_buf));
2868
2869 s.reset(read_data, sizeof(read_data));
2870 memset(read_buf, 0, sizeof(read_buf));
2871 bool called = false;
92f5a8d4 2872 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
7c673cae
FG
2873 bindns::bind(async_read_handler,
2874 _1, _2, sizeof(read_data), &called));
b32b8144
FG
2875 ioc.restart();
2876 ioc.run();
7c673cae
FG
2877 BOOST_ASIO_CHECK(called);
2878 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2879
2880 s.reset(read_data, sizeof(read_data));
2881 s.next_read_length(1);
2882 memset(read_buf, 0, sizeof(read_buf));
2883 called = false;
92f5a8d4 2884 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
7c673cae
FG
2885 bindns::bind(async_read_handler,
2886 _1, _2, sizeof(read_data), &called));
b32b8144
FG
2887 ioc.restart();
2888 ioc.run();
7c673cae
FG
2889 BOOST_ASIO_CHECK(called);
2890 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2891
2892 s.reset(read_data, sizeof(read_data));
2893 s.next_read_length(10);
2894 memset(read_buf, 0, sizeof(read_buf));
2895 called = false;
92f5a8d4 2896 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
7c673cae
FG
2897 bindns::bind(async_read_handler,
2898 _1, _2, sizeof(read_data), &called));
b32b8144
FG
2899 ioc.restart();
2900 ioc.run();
7c673cae
FG
2901 BOOST_ASIO_CHECK(called);
2902 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2903
2904 s.reset(read_data, sizeof(read_data));
2905 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4
TL
2906 called = false;
2907 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
2908 bindns::bind(async_read_handler,
2909 _1, _2, sizeof(read_data), &called));
b32b8144
FG
2910 ioc.restart();
2911 ioc.run();
92f5a8d4 2912 BOOST_ASIO_CHECK(called);
7c673cae 2913 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
7c673cae 2914
92f5a8d4
TL
2915 s.reset(read_data, sizeof(read_data));
2916 s.next_read_length(1);
2917 memset(read_buf, 0, sizeof(read_buf));
2918 called = false;
2919 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
2920 bindns::bind(async_read_handler,
2921 _1, _2, 1, &called));
2922 ioc.restart();
2923 ioc.run();
2924 BOOST_ASIO_CHECK(called);
2925 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
7c673cae 2926
92f5a8d4
TL
2927 s.reset(read_data, sizeof(read_data));
2928 s.next_read_length(10);
2929 memset(read_buf, 0, sizeof(read_buf));
2930 called = false;
2931 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
2932 bindns::bind(async_read_handler,
2933 _1, _2, 10, &called));
2934 ioc.restart();
2935 ioc.run();
2936 BOOST_ASIO_CHECK(called);
2937 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
7c673cae
FG
2938
2939 s.reset(read_data, sizeof(read_data));
2940 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4
TL
2941 called = false;
2942 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
7c673cae
FG
2943 bindns::bind(async_read_handler,
2944 _1, _2, sizeof(read_data), &called));
b32b8144
FG
2945 ioc.restart();
2946 ioc.run();
7c673cae
FG
2947 BOOST_ASIO_CHECK(called);
2948 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2949
2950 s.reset(read_data, sizeof(read_data));
2951 s.next_read_length(1);
2952 memset(read_buf, 0, sizeof(read_buf));
2953 called = false;
92f5a8d4 2954 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
7c673cae 2955 bindns::bind(async_read_handler,
92f5a8d4 2956 _1, _2, 10, &called));
b32b8144
FG
2957 ioc.restart();
2958 ioc.run();
7c673cae 2959 BOOST_ASIO_CHECK(called);
92f5a8d4 2960 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
7c673cae
FG
2961
2962 s.reset(read_data, sizeof(read_data));
2963 s.next_read_length(10);
2964 memset(read_buf, 0, sizeof(read_buf));
2965 called = false;
92f5a8d4
TL
2966 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
2967 bindns::bind(async_read_handler,
2968 _1, _2, 10, &called));
2969 ioc.restart();
2970 ioc.run();
2971 BOOST_ASIO_CHECK(called);
2972 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2973
2974 s.reset(read_data, sizeof(read_data));
2975 memset(read_buf, 0, sizeof(read_buf));
2976 called = false;
2977 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
7c673cae
FG
2978 bindns::bind(async_read_handler,
2979 _1, _2, sizeof(read_data), &called));
b32b8144
FG
2980 ioc.restart();
2981 ioc.run();
7c673cae
FG
2982 BOOST_ASIO_CHECK(called);
2983 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2984
2985 s.reset(read_data, sizeof(read_data));
92f5a8d4 2986 s.next_read_length(1);
7c673cae 2987 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4
TL
2988 called = false;
2989 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
2990 bindns::bind(async_read_handler,
2991 _1, _2, 42, &called));
b32b8144
FG
2992 ioc.restart();
2993 ioc.run();
92f5a8d4
TL
2994 BOOST_ASIO_CHECK(called);
2995 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
7c673cae 2996
92f5a8d4
TL
2997 s.reset(read_data, sizeof(read_data));
2998 s.next_read_length(10);
2999 memset(read_buf, 0, sizeof(read_buf));
3000 called = false;
3001 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
3002 bindns::bind(async_read_handler,
3003 _1, _2, 50, &called));
3004 ioc.restart();
3005 ioc.run();
3006 BOOST_ASIO_CHECK(called);
3007 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
7c673cae 3008
92f5a8d4
TL
3009 s.reset(read_data, sizeof(read_data));
3010 memset(read_buf, 0, sizeof(read_buf));
3011 called = false;
3012 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
3013 bindns::bind(async_read_handler,
3014 _1, _2, 1, &called));
3015 ioc.restart();
3016 ioc.run();
3017 BOOST_ASIO_CHECK(called);
3018 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
7c673cae
FG
3019
3020 s.reset(read_data, sizeof(read_data));
92f5a8d4 3021 s.next_read_length(1);
7c673cae 3022 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4
TL
3023 called = false;
3024 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
7c673cae 3025 bindns::bind(async_read_handler,
92f5a8d4 3026 _1, _2, 1, &called));
b32b8144
FG
3027 ioc.restart();
3028 ioc.run();
7c673cae 3029 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
3030 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3031
3032 s.reset(read_data, sizeof(read_data));
3033 s.next_read_length(10);
3034 memset(read_buf, 0, sizeof(read_buf));
3035 called = false;
3036 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
3037 bindns::bind(async_read_handler,
3038 _1, _2, 1, &called));
3039 ioc.restart();
3040 ioc.run();
3041 BOOST_ASIO_CHECK(called);
3042 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3043
3044 s.reset(read_data, sizeof(read_data));
3045 memset(read_buf, 0, sizeof(read_buf));
3046 called = false;
3047 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
3048 bindns::bind(async_read_handler,
3049 _1, _2, 10, &called));
3050 ioc.restart();
3051 ioc.run();
3052 BOOST_ASIO_CHECK(called);
3053 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
7c673cae
FG
3054
3055 s.reset(read_data, sizeof(read_data));
3056 s.next_read_length(1);
3057 memset(read_buf, 0, sizeof(read_buf));
3058 called = false;
92f5a8d4 3059 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
7c673cae 3060 bindns::bind(async_read_handler,
92f5a8d4 3061 _1, _2, 10, &called));
b32b8144
FG
3062 ioc.restart();
3063 ioc.run();
7c673cae 3064 BOOST_ASIO_CHECK(called);
92f5a8d4 3065 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
7c673cae
FG
3066
3067 s.reset(read_data, sizeof(read_data));
3068 s.next_read_length(10);
3069 memset(read_buf, 0, sizeof(read_buf));
3070 called = false;
92f5a8d4 3071 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
7c673cae 3072 bindns::bind(async_read_handler,
92f5a8d4 3073 _1, _2, 10, &called));
b32b8144
FG
3074 ioc.restart();
3075 ioc.run();
7c673cae 3076 BOOST_ASIO_CHECK(called);
92f5a8d4 3077 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
7c673cae
FG
3078
3079 s.reset(read_data, sizeof(read_data));
3080 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4
TL
3081 called = false;
3082 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
3083 bindns::bind(async_read_handler,
3084 _1, _2, 42, &called));
b32b8144
FG
3085 ioc.restart();
3086 ioc.run();
92f5a8d4
TL
3087 BOOST_ASIO_CHECK(called);
3088 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
7c673cae 3089
92f5a8d4
TL
3090 s.reset(read_data, sizeof(read_data));
3091 s.next_read_length(1);
3092 memset(read_buf, 0, sizeof(read_buf));
3093 called = false;
3094 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
3095 bindns::bind(async_read_handler,
3096 _1, _2, 42, &called));
3097 ioc.restart();
3098 ioc.run();
3099 BOOST_ASIO_CHECK(called);
3100 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
7c673cae 3101
92f5a8d4
TL
3102 s.reset(read_data, sizeof(read_data));
3103 s.next_read_length(10);
3104 memset(read_buf, 0, sizeof(read_buf));
3105 called = false;
3106 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
3107 bindns::bind(async_read_handler,
3108 _1, _2, 42, &called));
3109 ioc.restart();
3110 ioc.run();
3111 BOOST_ASIO_CHECK(called);
3112 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
7c673cae
FG
3113
3114 s.reset(read_data, sizeof(read_data));
3115 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4
TL
3116 called = false;
3117 boost::asio::async_read(s, buffers, old_style_transfer_all,
7c673cae
FG
3118 bindns::bind(async_read_handler,
3119 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3120 ioc.restart();
3121 ioc.run();
7c673cae
FG
3122 BOOST_ASIO_CHECK(called);
3123 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3124
3125 s.reset(read_data, sizeof(read_data));
3126 s.next_read_length(1);
3127 memset(read_buf, 0, sizeof(read_buf));
3128 called = false;
92f5a8d4 3129 boost::asio::async_read(s, buffers, old_style_transfer_all,
7c673cae
FG
3130 bindns::bind(async_read_handler,
3131 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3132 ioc.restart();
3133 ioc.run();
7c673cae
FG
3134 BOOST_ASIO_CHECK(called);
3135 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3136
3137 s.reset(read_data, sizeof(read_data));
3138 s.next_read_length(10);
3139 memset(read_buf, 0, sizeof(read_buf));
3140 called = false;
92f5a8d4 3141 boost::asio::async_read(s, buffers, old_style_transfer_all,
7c673cae
FG
3142 bindns::bind(async_read_handler,
3143 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3144 ioc.restart();
3145 ioc.run();
7c673cae
FG
3146 BOOST_ASIO_CHECK(called);
3147 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3148
3149 s.reset(read_data, sizeof(read_data));
3150 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4
TL
3151 called = false;
3152 boost::asio::async_read(s, buffers, short_transfer(),
7c673cae
FG
3153 bindns::bind(async_read_handler,
3154 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3155 ioc.restart();
3156 ioc.run();
7c673cae 3157 BOOST_ASIO_CHECK(called);
92f5a8d4 3158 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
7c673cae
FG
3159
3160 s.reset(read_data, sizeof(read_data));
3161 s.next_read_length(1);
92f5a8d4 3162 memset(read_buf, 0, sizeof(read_buf));
7c673cae 3163 called = false;
92f5a8d4 3164 boost::asio::async_read(s, buffers, short_transfer(),
7c673cae
FG
3165 bindns::bind(async_read_handler,
3166 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3167 ioc.restart();
3168 ioc.run();
7c673cae 3169 BOOST_ASIO_CHECK(called);
92f5a8d4 3170 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
7c673cae
FG
3171
3172 s.reset(read_data, sizeof(read_data));
3173 s.next_read_length(10);
92f5a8d4 3174 memset(read_buf, 0, sizeof(read_buf));
7c673cae 3175 called = false;
92f5a8d4 3176 boost::asio::async_read(s, buffers, short_transfer(),
7c673cae
FG
3177 bindns::bind(async_read_handler,
3178 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3179 ioc.restart();
3180 ioc.run();
7c673cae 3181 BOOST_ASIO_CHECK(called);
92f5a8d4 3182 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
7c673cae
FG
3183
3184 s.reset(read_data, sizeof(read_data));
92f5a8d4
TL
3185 memset(read_buf, 0, sizeof(read_buf));
3186 int i = boost::asio::async_read(s, buffers,
3187 short_transfer(), archetypes::lazy_handler());
7c673cae 3188 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
3189 ioc.restart();
3190 ioc.run();
92f5a8d4 3191 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
7c673cae
FG
3192}
3193
92f5a8d4 3194void test_4_arg_boost_array_buffers_async_read()
7c673cae
FG
3195{
3196#if defined(BOOST_ASIO_HAS_BOOST_BIND)
3197 namespace bindns = boost;
3198#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3199 namespace bindns = std;
7c673cae 3200#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
3201 using bindns::placeholders::_1;
3202 using bindns::placeholders::_2;
7c673cae 3203
92f5a8d4 3204#if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
b32b8144
FG
3205 boost::asio::io_context ioc;
3206 test_stream s(ioc);
7c673cae 3207 char read_buf[sizeof(read_data)];
92f5a8d4
TL
3208 boost::array<boost::asio::mutable_buffer, 2> buffers = { {
3209 boost::asio::buffer(read_buf, 32),
3210 boost::asio::buffer(read_buf) + 32 } };
7c673cae
FG
3211
3212 s.reset(read_data, sizeof(read_data));
3213 memset(read_buf, 0, sizeof(read_buf));
3214 bool called = false;
3215 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
3216 bindns::bind(async_read_handler,
3217 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3218 ioc.restart();
3219 ioc.run();
7c673cae
FG
3220 BOOST_ASIO_CHECK(called);
3221 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3222
3223 s.reset(read_data, sizeof(read_data));
3224 s.next_read_length(1);
3225 memset(read_buf, 0, sizeof(read_buf));
3226 called = false;
3227 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
3228 bindns::bind(async_read_handler,
3229 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3230 ioc.restart();
3231 ioc.run();
7c673cae
FG
3232 BOOST_ASIO_CHECK(called);
3233 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3234
3235 s.reset(read_data, sizeof(read_data));
3236 s.next_read_length(10);
3237 memset(read_buf, 0, sizeof(read_buf));
3238 called = false;
3239 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
3240 bindns::bind(async_read_handler,
3241 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3242 ioc.restart();
3243 ioc.run();
7c673cae
FG
3244 BOOST_ASIO_CHECK(called);
3245 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3246
3247 s.reset(read_data, sizeof(read_data));
3248 memset(read_buf, 0, sizeof(read_buf));
3249 called = false;
3250 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
3251 bindns::bind(async_read_handler,
3252 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3253 ioc.restart();
3254 ioc.run();
7c673cae
FG
3255 BOOST_ASIO_CHECK(called);
3256 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3257
3258 s.reset(read_data, sizeof(read_data));
3259 s.next_read_length(1);
3260 memset(read_buf, 0, sizeof(read_buf));
3261 called = false;
3262 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
3263 bindns::bind(async_read_handler,
3264 _1, _2, 1, &called));
b32b8144
FG
3265 ioc.restart();
3266 ioc.run();
7c673cae
FG
3267 BOOST_ASIO_CHECK(called);
3268 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3269
3270 s.reset(read_data, sizeof(read_data));
3271 s.next_read_length(10);
3272 memset(read_buf, 0, sizeof(read_buf));
3273 called = false;
3274 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
3275 bindns::bind(async_read_handler,
3276 _1, _2, 10, &called));
b32b8144
FG
3277 ioc.restart();
3278 ioc.run();
7c673cae
FG
3279 BOOST_ASIO_CHECK(called);
3280 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3281
3282 s.reset(read_data, sizeof(read_data));
3283 memset(read_buf, 0, sizeof(read_buf));
3284 called = false;
3285 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
3286 bindns::bind(async_read_handler,
3287 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3288 ioc.restart();
3289 ioc.run();
7c673cae
FG
3290 BOOST_ASIO_CHECK(called);
3291 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3292
3293 s.reset(read_data, sizeof(read_data));
3294 s.next_read_length(1);
3295 memset(read_buf, 0, sizeof(read_buf));
3296 called = false;
3297 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
3298 bindns::bind(async_read_handler,
3299 _1, _2, 10, &called));
b32b8144
FG
3300 ioc.restart();
3301 ioc.run();
7c673cae
FG
3302 BOOST_ASIO_CHECK(called);
3303 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3304
3305 s.reset(read_data, sizeof(read_data));
3306 s.next_read_length(10);
3307 memset(read_buf, 0, sizeof(read_buf));
3308 called = false;
3309 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
3310 bindns::bind(async_read_handler,
3311 _1, _2, 10, &called));
b32b8144
FG
3312 ioc.restart();
3313 ioc.run();
7c673cae
FG
3314 BOOST_ASIO_CHECK(called);
3315 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3316
3317 s.reset(read_data, sizeof(read_data));
3318 memset(read_buf, 0, sizeof(read_buf));
3319 called = false;
3320 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
3321 bindns::bind(async_read_handler,
3322 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3323 ioc.restart();
3324 ioc.run();
7c673cae
FG
3325 BOOST_ASIO_CHECK(called);
3326 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3327
3328 s.reset(read_data, sizeof(read_data));
3329 s.next_read_length(1);
3330 memset(read_buf, 0, sizeof(read_buf));
3331 called = false;
3332 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
3333 bindns::bind(async_read_handler,
3334 _1, _2, 42, &called));
b32b8144
FG
3335 ioc.restart();
3336 ioc.run();
7c673cae
FG
3337 BOOST_ASIO_CHECK(called);
3338 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3339
3340 s.reset(read_data, sizeof(read_data));
3341 s.next_read_length(10);
3342 memset(read_buf, 0, sizeof(read_buf));
3343 called = false;
3344 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
3345 bindns::bind(async_read_handler,
3346 _1, _2, 50, &called));
b32b8144
FG
3347 ioc.restart();
3348 ioc.run();
7c673cae
FG
3349 BOOST_ASIO_CHECK(called);
3350 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
3351
3352 s.reset(read_data, sizeof(read_data));
3353 memset(read_buf, 0, sizeof(read_buf));
3354 called = false;
3355 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
3356 bindns::bind(async_read_handler,
3357 _1, _2, 1, &called));
b32b8144
FG
3358 ioc.restart();
3359 ioc.run();
7c673cae
FG
3360 BOOST_ASIO_CHECK(called);
3361 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3362
3363 s.reset(read_data, sizeof(read_data));
3364 s.next_read_length(1);
3365 memset(read_buf, 0, sizeof(read_buf));
3366 called = false;
3367 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
3368 bindns::bind(async_read_handler,
3369 _1, _2, 1, &called));
b32b8144
FG
3370 ioc.restart();
3371 ioc.run();
7c673cae
FG
3372 BOOST_ASIO_CHECK(called);
3373 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3374
3375 s.reset(read_data, sizeof(read_data));
3376 s.next_read_length(10);
3377 memset(read_buf, 0, sizeof(read_buf));
3378 called = false;
3379 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
3380 bindns::bind(async_read_handler,
3381 _1, _2, 1, &called));
b32b8144
FG
3382 ioc.restart();
3383 ioc.run();
7c673cae
FG
3384 BOOST_ASIO_CHECK(called);
3385 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3386
3387 s.reset(read_data, sizeof(read_data));
3388 memset(read_buf, 0, sizeof(read_buf));
3389 called = false;
3390 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
3391 bindns::bind(async_read_handler,
3392 _1, _2, 10, &called));
b32b8144
FG
3393 ioc.restart();
3394 ioc.run();
7c673cae
FG
3395 BOOST_ASIO_CHECK(called);
3396 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3397
3398 s.reset(read_data, sizeof(read_data));
3399 s.next_read_length(1);
3400 memset(read_buf, 0, sizeof(read_buf));
3401 called = false;
3402 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
3403 bindns::bind(async_read_handler,
3404 _1, _2, 10, &called));
b32b8144
FG
3405 ioc.restart();
3406 ioc.run();
7c673cae
FG
3407 BOOST_ASIO_CHECK(called);
3408 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3409
3410 s.reset(read_data, sizeof(read_data));
3411 s.next_read_length(10);
3412 memset(read_buf, 0, sizeof(read_buf));
3413 called = false;
3414 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
3415 bindns::bind(async_read_handler,
3416 _1, _2, 10, &called));
b32b8144
FG
3417 ioc.restart();
3418 ioc.run();
7c673cae
FG
3419 BOOST_ASIO_CHECK(called);
3420 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3421
3422 s.reset(read_data, sizeof(read_data));
3423 memset(read_buf, 0, sizeof(read_buf));
3424 called = false;
3425 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
3426 bindns::bind(async_read_handler,
3427 _1, _2, 42, &called));
b32b8144
FG
3428 ioc.restart();
3429 ioc.run();
7c673cae
FG
3430 BOOST_ASIO_CHECK(called);
3431 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3432
3433 s.reset(read_data, sizeof(read_data));
3434 s.next_read_length(1);
3435 memset(read_buf, 0, sizeof(read_buf));
3436 called = false;
3437 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
3438 bindns::bind(async_read_handler,
3439 _1, _2, 42, &called));
b32b8144
FG
3440 ioc.restart();
3441 ioc.run();
7c673cae
FG
3442 BOOST_ASIO_CHECK(called);
3443 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3444
3445 s.reset(read_data, sizeof(read_data));
3446 s.next_read_length(10);
3447 memset(read_buf, 0, sizeof(read_buf));
3448 called = false;
3449 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
3450 bindns::bind(async_read_handler,
3451 _1, _2, 42, &called));
b32b8144
FG
3452 ioc.restart();
3453 ioc.run();
7c673cae
FG
3454 BOOST_ASIO_CHECK(called);
3455 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3456
3457 s.reset(read_data, sizeof(read_data));
3458 memset(read_buf, 0, sizeof(read_buf));
3459 called = false;
3460 boost::asio::async_read(s, buffers, old_style_transfer_all,
3461 bindns::bind(async_read_handler,
3462 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3463 ioc.restart();
3464 ioc.run();
7c673cae
FG
3465 BOOST_ASIO_CHECK(called);
3466 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3467
3468 s.reset(read_data, sizeof(read_data));
3469 s.next_read_length(1);
3470 memset(read_buf, 0, sizeof(read_buf));
3471 called = false;
3472 boost::asio::async_read(s, buffers, old_style_transfer_all,
3473 bindns::bind(async_read_handler,
3474 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3475 ioc.restart();
3476 ioc.run();
7c673cae
FG
3477 BOOST_ASIO_CHECK(called);
3478 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3479
3480 s.reset(read_data, sizeof(read_data));
3481 s.next_read_length(10);
3482 memset(read_buf, 0, sizeof(read_buf));
3483 called = false;
3484 boost::asio::async_read(s, buffers, old_style_transfer_all,
3485 bindns::bind(async_read_handler,
3486 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3487 ioc.restart();
3488 ioc.run();
7c673cae
FG
3489 BOOST_ASIO_CHECK(called);
3490 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3491
3492 s.reset(read_data, sizeof(read_data));
3493 memset(read_buf, 0, sizeof(read_buf));
3494 called = false;
92f5a8d4 3495 boost::asio::async_read(s, buffers, short_transfer(),
7c673cae
FG
3496 bindns::bind(async_read_handler,
3497 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3498 ioc.restart();
3499 ioc.run();
7c673cae
FG
3500 BOOST_ASIO_CHECK(called);
3501 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3502
3503 s.reset(read_data, sizeof(read_data));
3504 s.next_read_length(1);
3505 memset(read_buf, 0, sizeof(read_buf));
3506 called = false;
92f5a8d4 3507 boost::asio::async_read(s, buffers, short_transfer(),
7c673cae
FG
3508 bindns::bind(async_read_handler,
3509 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3510 ioc.restart();
3511 ioc.run();
7c673cae
FG
3512 BOOST_ASIO_CHECK(called);
3513 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3514
3515 s.reset(read_data, sizeof(read_data));
3516 s.next_read_length(10);
3517 memset(read_buf, 0, sizeof(read_buf));
3518 called = false;
92f5a8d4 3519 boost::asio::async_read(s, buffers, short_transfer(),
7c673cae
FG
3520 bindns::bind(async_read_handler,
3521 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3522 ioc.restart();
3523 ioc.run();
7c673cae
FG
3524 BOOST_ASIO_CHECK(called);
3525 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3526
3527 s.reset(read_data, sizeof(read_data));
3528 memset(read_buf, 0, sizeof(read_buf));
3529 int i = boost::asio::async_read(s, buffers,
92f5a8d4 3530 short_transfer(), archetypes::lazy_handler());
7c673cae 3531 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
3532 ioc.restart();
3533 ioc.run();
7c673cae 3534 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
92f5a8d4 3535#endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
7c673cae
FG
3536}
3537
92f5a8d4 3538void test_4_arg_std_array_buffers_async_read()
7c673cae
FG
3539{
3540#if defined(BOOST_ASIO_HAS_BOOST_BIND)
3541 namespace bindns = boost;
3542#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3543 namespace bindns = std;
7c673cae 3544#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
3545 using bindns::placeholders::_1;
3546 using bindns::placeholders::_2;
7c673cae 3547
92f5a8d4 3548#if defined(BOOST_ASIO_HAS_STD_ARRAY)
b32b8144
FG
3549 boost::asio::io_context ioc;
3550 test_stream s(ioc);
7c673cae 3551 char read_buf[sizeof(read_data)];
92f5a8d4 3552 std::array<boost::asio::mutable_buffer, 2> buffers = { {
7c673cae
FG
3553 boost::asio::buffer(read_buf, 32),
3554 boost::asio::buffer(read_buf) + 32 } };
3555
3556 s.reset(read_data, sizeof(read_data));
3557 memset(read_buf, 0, sizeof(read_buf));
3558 bool called = false;
3559 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
3560 bindns::bind(async_read_handler,
3561 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3562 ioc.restart();
3563 ioc.run();
7c673cae
FG
3564 BOOST_ASIO_CHECK(called);
3565 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3566
3567 s.reset(read_data, sizeof(read_data));
3568 s.next_read_length(1);
3569 memset(read_buf, 0, sizeof(read_buf));
3570 called = false;
3571 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
3572 bindns::bind(async_read_handler,
3573 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3574 ioc.restart();
3575 ioc.run();
7c673cae
FG
3576 BOOST_ASIO_CHECK(called);
3577 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3578
3579 s.reset(read_data, sizeof(read_data));
3580 s.next_read_length(10);
3581 memset(read_buf, 0, sizeof(read_buf));
3582 called = false;
3583 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
3584 bindns::bind(async_read_handler,
3585 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3586 ioc.restart();
3587 ioc.run();
7c673cae
FG
3588 BOOST_ASIO_CHECK(called);
3589 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3590
3591 s.reset(read_data, sizeof(read_data));
3592 memset(read_buf, 0, sizeof(read_buf));
3593 called = false;
3594 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
3595 bindns::bind(async_read_handler,
3596 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3597 ioc.restart();
3598 ioc.run();
7c673cae
FG
3599 BOOST_ASIO_CHECK(called);
3600 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3601
3602 s.reset(read_data, sizeof(read_data));
3603 s.next_read_length(1);
3604 memset(read_buf, 0, sizeof(read_buf));
3605 called = false;
3606 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
3607 bindns::bind(async_read_handler,
3608 _1, _2, 1, &called));
b32b8144
FG
3609 ioc.restart();
3610 ioc.run();
7c673cae
FG
3611 BOOST_ASIO_CHECK(called);
3612 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3613
3614 s.reset(read_data, sizeof(read_data));
3615 s.next_read_length(10);
3616 memset(read_buf, 0, sizeof(read_buf));
3617 called = false;
3618 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
3619 bindns::bind(async_read_handler,
3620 _1, _2, 10, &called));
b32b8144
FG
3621 ioc.restart();
3622 ioc.run();
7c673cae
FG
3623 BOOST_ASIO_CHECK(called);
3624 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3625
3626 s.reset(read_data, sizeof(read_data));
3627 memset(read_buf, 0, sizeof(read_buf));
3628 called = false;
3629 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
3630 bindns::bind(async_read_handler,
3631 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3632 ioc.restart();
3633 ioc.run();
7c673cae
FG
3634 BOOST_ASIO_CHECK(called);
3635 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3636
3637 s.reset(read_data, sizeof(read_data));
3638 s.next_read_length(1);
3639 memset(read_buf, 0, sizeof(read_buf));
3640 called = false;
3641 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
3642 bindns::bind(async_read_handler,
3643 _1, _2, 10, &called));
b32b8144
FG
3644 ioc.restart();
3645 ioc.run();
7c673cae
FG
3646 BOOST_ASIO_CHECK(called);
3647 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3648
3649 s.reset(read_data, sizeof(read_data));
3650 s.next_read_length(10);
3651 memset(read_buf, 0, sizeof(read_buf));
3652 called = false;
3653 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
3654 bindns::bind(async_read_handler,
3655 _1, _2, 10, &called));
b32b8144
FG
3656 ioc.restart();
3657 ioc.run();
7c673cae
FG
3658 BOOST_ASIO_CHECK(called);
3659 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3660
3661 s.reset(read_data, sizeof(read_data));
3662 memset(read_buf, 0, sizeof(read_buf));
3663 called = false;
3664 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
3665 bindns::bind(async_read_handler,
3666 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3667 ioc.restart();
3668 ioc.run();
7c673cae
FG
3669 BOOST_ASIO_CHECK(called);
3670 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3671
3672 s.reset(read_data, sizeof(read_data));
3673 s.next_read_length(1);
3674 memset(read_buf, 0, sizeof(read_buf));
3675 called = false;
3676 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
3677 bindns::bind(async_read_handler,
3678 _1, _2, 42, &called));
b32b8144
FG
3679 ioc.restart();
3680 ioc.run();
7c673cae
FG
3681 BOOST_ASIO_CHECK(called);
3682 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3683
3684 s.reset(read_data, sizeof(read_data));
3685 s.next_read_length(10);
3686 memset(read_buf, 0, sizeof(read_buf));
3687 called = false;
3688 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
3689 bindns::bind(async_read_handler,
3690 _1, _2, 50, &called));
b32b8144
FG
3691 ioc.restart();
3692 ioc.run();
7c673cae
FG
3693 BOOST_ASIO_CHECK(called);
3694 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
3695
3696 s.reset(read_data, sizeof(read_data));
3697 memset(read_buf, 0, sizeof(read_buf));
3698 called = false;
3699 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
3700 bindns::bind(async_read_handler,
3701 _1, _2, 1, &called));
b32b8144
FG
3702 ioc.restart();
3703 ioc.run();
7c673cae
FG
3704 BOOST_ASIO_CHECK(called);
3705 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3706
3707 s.reset(read_data, sizeof(read_data));
3708 s.next_read_length(1);
3709 memset(read_buf, 0, sizeof(read_buf));
3710 called = false;
3711 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
3712 bindns::bind(async_read_handler,
3713 _1, _2, 1, &called));
b32b8144
FG
3714 ioc.restart();
3715 ioc.run();
7c673cae
FG
3716 BOOST_ASIO_CHECK(called);
3717 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3718
3719 s.reset(read_data, sizeof(read_data));
3720 s.next_read_length(10);
3721 memset(read_buf, 0, sizeof(read_buf));
3722 called = false;
3723 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
3724 bindns::bind(async_read_handler,
3725 _1, _2, 1, &called));
b32b8144
FG
3726 ioc.restart();
3727 ioc.run();
7c673cae
FG
3728 BOOST_ASIO_CHECK(called);
3729 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3730
3731 s.reset(read_data, sizeof(read_data));
3732 memset(read_buf, 0, sizeof(read_buf));
3733 called = false;
3734 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
3735 bindns::bind(async_read_handler,
3736 _1, _2, 10, &called));
b32b8144
FG
3737 ioc.restart();
3738 ioc.run();
7c673cae
FG
3739 BOOST_ASIO_CHECK(called);
3740 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3741
3742 s.reset(read_data, sizeof(read_data));
3743 s.next_read_length(1);
3744 memset(read_buf, 0, sizeof(read_buf));
3745 called = false;
3746 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
3747 bindns::bind(async_read_handler,
3748 _1, _2, 10, &called));
b32b8144
FG
3749 ioc.restart();
3750 ioc.run();
7c673cae
FG
3751 BOOST_ASIO_CHECK(called);
3752 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3753
3754 s.reset(read_data, sizeof(read_data));
3755 s.next_read_length(10);
3756 memset(read_buf, 0, sizeof(read_buf));
3757 called = false;
3758 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
3759 bindns::bind(async_read_handler,
3760 _1, _2, 10, &called));
b32b8144
FG
3761 ioc.restart();
3762 ioc.run();
7c673cae
FG
3763 BOOST_ASIO_CHECK(called);
3764 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3765
3766 s.reset(read_data, sizeof(read_data));
3767 memset(read_buf, 0, sizeof(read_buf));
3768 called = false;
3769 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
3770 bindns::bind(async_read_handler,
3771 _1, _2, 42, &called));
b32b8144
FG
3772 ioc.restart();
3773 ioc.run();
7c673cae
FG
3774 BOOST_ASIO_CHECK(called);
3775 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3776
3777 s.reset(read_data, sizeof(read_data));
3778 s.next_read_length(1);
3779 memset(read_buf, 0, sizeof(read_buf));
3780 called = false;
3781 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
3782 bindns::bind(async_read_handler,
3783 _1, _2, 42, &called));
b32b8144
FG
3784 ioc.restart();
3785 ioc.run();
7c673cae
FG
3786 BOOST_ASIO_CHECK(called);
3787 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3788
3789 s.reset(read_data, sizeof(read_data));
3790 s.next_read_length(10);
3791 memset(read_buf, 0, sizeof(read_buf));
3792 called = false;
3793 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
3794 bindns::bind(async_read_handler,
3795 _1, _2, 42, &called));
b32b8144
FG
3796 ioc.restart();
3797 ioc.run();
7c673cae
FG
3798 BOOST_ASIO_CHECK(called);
3799 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3800
3801 s.reset(read_data, sizeof(read_data));
3802 memset(read_buf, 0, sizeof(read_buf));
3803 called = false;
3804 boost::asio::async_read(s, buffers, old_style_transfer_all,
3805 bindns::bind(async_read_handler,
3806 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3807 ioc.restart();
3808 ioc.run();
7c673cae
FG
3809 BOOST_ASIO_CHECK(called);
3810 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3811
3812 s.reset(read_data, sizeof(read_data));
3813 s.next_read_length(1);
3814 memset(read_buf, 0, sizeof(read_buf));
3815 called = false;
3816 boost::asio::async_read(s, buffers, old_style_transfer_all,
3817 bindns::bind(async_read_handler,
3818 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3819 ioc.restart();
3820 ioc.run();
7c673cae
FG
3821 BOOST_ASIO_CHECK(called);
3822 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3823
3824 s.reset(read_data, sizeof(read_data));
3825 s.next_read_length(10);
3826 memset(read_buf, 0, sizeof(read_buf));
3827 called = false;
3828 boost::asio::async_read(s, buffers, old_style_transfer_all,
3829 bindns::bind(async_read_handler,
3830 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3831 ioc.restart();
3832 ioc.run();
7c673cae
FG
3833 BOOST_ASIO_CHECK(called);
3834 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3835
3836 s.reset(read_data, sizeof(read_data));
3837 memset(read_buf, 0, sizeof(read_buf));
3838 called = false;
92f5a8d4 3839 boost::asio::async_read(s, buffers, short_transfer(),
7c673cae
FG
3840 bindns::bind(async_read_handler,
3841 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3842 ioc.restart();
3843 ioc.run();
7c673cae
FG
3844 BOOST_ASIO_CHECK(called);
3845 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3846
3847 s.reset(read_data, sizeof(read_data));
3848 s.next_read_length(1);
3849 memset(read_buf, 0, sizeof(read_buf));
3850 called = false;
92f5a8d4 3851 boost::asio::async_read(s, buffers, short_transfer(),
7c673cae
FG
3852 bindns::bind(async_read_handler,
3853 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3854 ioc.restart();
3855 ioc.run();
7c673cae
FG
3856 BOOST_ASIO_CHECK(called);
3857 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3858
3859 s.reset(read_data, sizeof(read_data));
3860 s.next_read_length(10);
3861 memset(read_buf, 0, sizeof(read_buf));
3862 called = false;
92f5a8d4 3863 boost::asio::async_read(s, buffers, short_transfer(),
7c673cae
FG
3864 bindns::bind(async_read_handler,
3865 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3866 ioc.restart();
3867 ioc.run();
7c673cae
FG
3868 BOOST_ASIO_CHECK(called);
3869 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3870
3871 s.reset(read_data, sizeof(read_data));
3872 memset(read_buf, 0, sizeof(read_buf));
3873 int i = boost::asio::async_read(s, buffers,
92f5a8d4 3874 short_transfer(), archetypes::lazy_handler());
7c673cae 3875 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
3876 ioc.restart();
3877 ioc.run();
7c673cae 3878 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
92f5a8d4 3879#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
7c673cae
FG
3880}
3881
92f5a8d4 3882void test_4_arg_vector_buffers_async_read()
7c673cae
FG
3883{
3884#if defined(BOOST_ASIO_HAS_BOOST_BIND)
3885 namespace bindns = boost;
3886#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3887 namespace bindns = std;
7c673cae 3888#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
3889 using bindns::placeholders::_1;
3890 using bindns::placeholders::_2;
7c673cae 3891
b32b8144
FG
3892 boost::asio::io_context ioc;
3893 test_stream s(ioc);
7c673cae 3894 char read_buf[sizeof(read_data)];
92f5a8d4
TL
3895 std::vector<boost::asio::mutable_buffer> buffers;
3896 buffers.push_back(boost::asio::buffer(read_buf, 32));
3897 buffers.push_back(boost::asio::buffer(read_buf, 39) + 32);
3898 buffers.push_back(boost::asio::buffer(read_buf) + 39);
7c673cae
FG
3899
3900 s.reset(read_data, sizeof(read_data));
3901 memset(read_buf, 0, sizeof(read_buf));
3902 bool called = false;
3903 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
3904 bindns::bind(async_read_handler,
3905 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3906 ioc.restart();
3907 ioc.run();
7c673cae
FG
3908 BOOST_ASIO_CHECK(called);
3909 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3910
3911 s.reset(read_data, sizeof(read_data));
3912 s.next_read_length(1);
3913 memset(read_buf, 0, sizeof(read_buf));
3914 called = false;
3915 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
3916 bindns::bind(async_read_handler,
3917 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3918 ioc.restart();
3919 ioc.run();
7c673cae
FG
3920 BOOST_ASIO_CHECK(called);
3921 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3922
3923 s.reset(read_data, sizeof(read_data));
3924 s.next_read_length(10);
3925 memset(read_buf, 0, sizeof(read_buf));
3926 called = false;
3927 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
3928 bindns::bind(async_read_handler,
3929 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3930 ioc.restart();
3931 ioc.run();
7c673cae
FG
3932 BOOST_ASIO_CHECK(called);
3933 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3934
3935 s.reset(read_data, sizeof(read_data));
3936 memset(read_buf, 0, sizeof(read_buf));
3937 called = false;
3938 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
3939 bindns::bind(async_read_handler,
3940 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3941 ioc.restart();
3942 ioc.run();
7c673cae
FG
3943 BOOST_ASIO_CHECK(called);
3944 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3945
3946 s.reset(read_data, sizeof(read_data));
3947 s.next_read_length(1);
3948 memset(read_buf, 0, sizeof(read_buf));
3949 called = false;
3950 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
3951 bindns::bind(async_read_handler,
3952 _1, _2, 1, &called));
b32b8144
FG
3953 ioc.restart();
3954 ioc.run();
7c673cae
FG
3955 BOOST_ASIO_CHECK(called);
3956 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3957
3958 s.reset(read_data, sizeof(read_data));
3959 s.next_read_length(10);
3960 memset(read_buf, 0, sizeof(read_buf));
3961 called = false;
3962 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
3963 bindns::bind(async_read_handler,
3964 _1, _2, 10, &called));
b32b8144
FG
3965 ioc.restart();
3966 ioc.run();
7c673cae
FG
3967 BOOST_ASIO_CHECK(called);
3968 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3969
3970 s.reset(read_data, sizeof(read_data));
3971 memset(read_buf, 0, sizeof(read_buf));
3972 called = false;
3973 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
3974 bindns::bind(async_read_handler,
3975 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3976 ioc.restart();
3977 ioc.run();
7c673cae
FG
3978 BOOST_ASIO_CHECK(called);
3979 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3980
3981 s.reset(read_data, sizeof(read_data));
3982 s.next_read_length(1);
3983 memset(read_buf, 0, sizeof(read_buf));
3984 called = false;
3985 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
3986 bindns::bind(async_read_handler,
3987 _1, _2, 10, &called));
b32b8144
FG
3988 ioc.restart();
3989 ioc.run();
7c673cae
FG
3990 BOOST_ASIO_CHECK(called);
3991 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3992
3993 s.reset(read_data, sizeof(read_data));
3994 s.next_read_length(10);
3995 memset(read_buf, 0, sizeof(read_buf));
3996 called = false;
3997 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
3998 bindns::bind(async_read_handler,
3999 _1, _2, 10, &called));
b32b8144
FG
4000 ioc.restart();
4001 ioc.run();
7c673cae
FG
4002 BOOST_ASIO_CHECK(called);
4003 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
4004
4005 s.reset(read_data, sizeof(read_data));
4006 memset(read_buf, 0, sizeof(read_buf));
4007 called = false;
4008 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
4009 bindns::bind(async_read_handler,
4010 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4011 ioc.restart();
4012 ioc.run();
7c673cae
FG
4013 BOOST_ASIO_CHECK(called);
4014 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
4015
4016 s.reset(read_data, sizeof(read_data));
4017 s.next_read_length(1);
4018 memset(read_buf, 0, sizeof(read_buf));
4019 called = false;
4020 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
4021 bindns::bind(async_read_handler,
4022 _1, _2, 42, &called));
b32b8144
FG
4023 ioc.restart();
4024 ioc.run();
7c673cae
FG
4025 BOOST_ASIO_CHECK(called);
4026 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
4027
4028 s.reset(read_data, sizeof(read_data));
4029 s.next_read_length(10);
4030 memset(read_buf, 0, sizeof(read_buf));
4031 called = false;
4032 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
4033 bindns::bind(async_read_handler,
4034 _1, _2, 50, &called));
b32b8144
FG
4035 ioc.restart();
4036 ioc.run();
7c673cae
FG
4037 BOOST_ASIO_CHECK(called);
4038 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
4039
4040 s.reset(read_data, sizeof(read_data));
4041 memset(read_buf, 0, sizeof(read_buf));
4042 called = false;
4043 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
4044 bindns::bind(async_read_handler,
4045 _1, _2, 1, &called));
b32b8144
FG
4046 ioc.restart();
4047 ioc.run();
7c673cae
FG
4048 BOOST_ASIO_CHECK(called);
4049 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
4050
4051 s.reset(read_data, sizeof(read_data));
4052 s.next_read_length(1);
4053 memset(read_buf, 0, sizeof(read_buf));
4054 called = false;
4055 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
4056 bindns::bind(async_read_handler,
4057 _1, _2, 1, &called));
b32b8144
FG
4058 ioc.restart();
4059 ioc.run();
7c673cae
FG
4060 BOOST_ASIO_CHECK(called);
4061 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
4062
4063 s.reset(read_data, sizeof(read_data));
4064 s.next_read_length(10);
4065 memset(read_buf, 0, sizeof(read_buf));
4066 called = false;
4067 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
4068 bindns::bind(async_read_handler,
4069 _1, _2, 1, &called));
b32b8144
FG
4070 ioc.restart();
4071 ioc.run();
7c673cae
FG
4072 BOOST_ASIO_CHECK(called);
4073 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
4074
4075 s.reset(read_data, sizeof(read_data));
4076 memset(read_buf, 0, sizeof(read_buf));
4077 called = false;
4078 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
4079 bindns::bind(async_read_handler,
4080 _1, _2, 10, &called));
b32b8144
FG
4081 ioc.restart();
4082 ioc.run();
7c673cae
FG
4083 BOOST_ASIO_CHECK(called);
4084 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
4085
4086 s.reset(read_data, sizeof(read_data));
4087 s.next_read_length(1);
4088 memset(read_buf, 0, sizeof(read_buf));
4089 called = false;
4090 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
4091 bindns::bind(async_read_handler,
4092 _1, _2, 10, &called));
b32b8144
FG
4093 ioc.restart();
4094 ioc.run();
7c673cae
FG
4095 BOOST_ASIO_CHECK(called);
4096 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
4097
4098 s.reset(read_data, sizeof(read_data));
4099 s.next_read_length(10);
4100 memset(read_buf, 0, sizeof(read_buf));
4101 called = false;
4102 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
4103 bindns::bind(async_read_handler,
4104 _1, _2, 10, &called));
b32b8144
FG
4105 ioc.restart();
4106 ioc.run();
7c673cae
FG
4107 BOOST_ASIO_CHECK(called);
4108 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
4109
4110 s.reset(read_data, sizeof(read_data));
4111 memset(read_buf, 0, sizeof(read_buf));
4112 called = false;
4113 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
4114 bindns::bind(async_read_handler,
4115 _1, _2, 42, &called));
b32b8144
FG
4116 ioc.restart();
4117 ioc.run();
7c673cae
FG
4118 BOOST_ASIO_CHECK(called);
4119 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
4120
4121 s.reset(read_data, sizeof(read_data));
4122 s.next_read_length(1);
4123 memset(read_buf, 0, sizeof(read_buf));
4124 called = false;
4125 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
4126 bindns::bind(async_read_handler,
4127 _1, _2, 42, &called));
b32b8144
FG
4128 ioc.restart();
4129 ioc.run();
7c673cae
FG
4130 BOOST_ASIO_CHECK(called);
4131 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
4132
4133 s.reset(read_data, sizeof(read_data));
4134 s.next_read_length(10);
4135 memset(read_buf, 0, sizeof(read_buf));
4136 called = false;
4137 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
4138 bindns::bind(async_read_handler,
4139 _1, _2, 42, &called));
b32b8144
FG
4140 ioc.restart();
4141 ioc.run();
7c673cae
FG
4142 BOOST_ASIO_CHECK(called);
4143 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
4144
4145 s.reset(read_data, sizeof(read_data));
4146 memset(read_buf, 0, sizeof(read_buf));
4147 called = false;
4148 boost::asio::async_read(s, buffers, old_style_transfer_all,
4149 bindns::bind(async_read_handler,
4150 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4151 ioc.restart();
4152 ioc.run();
7c673cae
FG
4153 BOOST_ASIO_CHECK(called);
4154 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
4155
4156 s.reset(read_data, sizeof(read_data));
4157 s.next_read_length(1);
4158 memset(read_buf, 0, sizeof(read_buf));
4159 called = false;
4160 boost::asio::async_read(s, buffers, old_style_transfer_all,
4161 bindns::bind(async_read_handler,
4162 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4163 ioc.restart();
4164 ioc.run();
7c673cae
FG
4165 BOOST_ASIO_CHECK(called);
4166 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
4167
4168 s.reset(read_data, sizeof(read_data));
4169 s.next_read_length(10);
4170 memset(read_buf, 0, sizeof(read_buf));
4171 called = false;
4172 boost::asio::async_read(s, buffers, old_style_transfer_all,
4173 bindns::bind(async_read_handler,
4174 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4175 ioc.restart();
4176 ioc.run();
7c673cae
FG
4177 BOOST_ASIO_CHECK(called);
4178 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
4179
4180 s.reset(read_data, sizeof(read_data));
4181 memset(read_buf, 0, sizeof(read_buf));
4182 called = false;
92f5a8d4 4183 boost::asio::async_read(s, buffers, short_transfer(),
7c673cae
FG
4184 bindns::bind(async_read_handler,
4185 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4186 ioc.restart();
4187 ioc.run();
7c673cae
FG
4188 BOOST_ASIO_CHECK(called);
4189 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
4190
4191 s.reset(read_data, sizeof(read_data));
4192 s.next_read_length(1);
4193 memset(read_buf, 0, sizeof(read_buf));
4194 called = false;
92f5a8d4 4195 boost::asio::async_read(s, buffers, short_transfer(),
7c673cae
FG
4196 bindns::bind(async_read_handler,
4197 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4198 ioc.restart();
4199 ioc.run();
7c673cae
FG
4200 BOOST_ASIO_CHECK(called);
4201 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
4202
4203 s.reset(read_data, sizeof(read_data));
4204 s.next_read_length(10);
4205 memset(read_buf, 0, sizeof(read_buf));
4206 called = false;
92f5a8d4 4207 boost::asio::async_read(s, buffers, short_transfer(),
7c673cae
FG
4208 bindns::bind(async_read_handler,
4209 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4210 ioc.restart();
4211 ioc.run();
7c673cae
FG
4212 BOOST_ASIO_CHECK(called);
4213 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
4214
4215 s.reset(read_data, sizeof(read_data));
4216 memset(read_buf, 0, sizeof(read_buf));
4217 int i = boost::asio::async_read(s, buffers,
92f5a8d4 4218 short_transfer(), archetypes::lazy_handler());
7c673cae 4219 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
4220 ioc.restart();
4221 ioc.run();
7c673cae 4222 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
7c673cae
FG
4223}
4224
92f5a8d4 4225void test_4_arg_dynamic_string_async_read()
7c673cae
FG
4226{
4227#if defined(BOOST_ASIO_HAS_BOOST_BIND)
4228 namespace bindns = boost;
4229#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
4230 namespace bindns = std;
7c673cae 4231#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
4232 using bindns::placeholders::_1;
4233 using bindns::placeholders::_2;
7c673cae 4234
b32b8144
FG
4235 boost::asio::io_context ioc;
4236 test_stream s(ioc);
92f5a8d4
TL
4237 std::string data;
4238 boost::asio::dynamic_string_buffer<char, std::string::traits_type,
4239 std::string::allocator_type> sb
4240 = boost::asio::dynamic_buffer(data, sizeof(read_data));
7c673cae
FG
4241
4242 s.reset(read_data, sizeof(read_data));
92f5a8d4 4243 sb.consume(sb.size());
7c673cae 4244 bool called = false;
92f5a8d4 4245 boost::asio::async_read(s, sb, boost::asio::transfer_all(),
7c673cae
FG
4246 bindns::bind(async_read_handler,
4247 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4248 ioc.restart();
4249 ioc.run();
7c673cae 4250 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4251 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4252 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
4253
4254 s.reset(read_data, sizeof(read_data));
4255 s.next_read_length(1);
92f5a8d4 4256 sb.consume(sb.size());
7c673cae 4257 called = false;
92f5a8d4 4258 boost::asio::async_read(s, sb, boost::asio::transfer_all(),
7c673cae
FG
4259 bindns::bind(async_read_handler,
4260 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4261 ioc.restart();
4262 ioc.run();
7c673cae 4263 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4264 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4265 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
4266
4267 s.reset(read_data, sizeof(read_data));
4268 s.next_read_length(10);
92f5a8d4 4269 sb.consume(sb.size());
7c673cae 4270 called = false;
92f5a8d4 4271 boost::asio::async_read(s, sb, boost::asio::transfer_all(),
7c673cae
FG
4272 bindns::bind(async_read_handler,
4273 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4274 ioc.restart();
4275 ioc.run();
7c673cae 4276 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4277 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4278 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
4279
4280 s.reset(read_data, sizeof(read_data));
92f5a8d4 4281 sb.consume(sb.size());
7c673cae 4282 called = false;
92f5a8d4 4283 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(1),
7c673cae
FG
4284 bindns::bind(async_read_handler,
4285 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4286 ioc.restart();
4287 ioc.run();
7c673cae 4288 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4289 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4290 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
4291
4292 s.reset(read_data, sizeof(read_data));
4293 s.next_read_length(1);
92f5a8d4 4294 sb.consume(sb.size());
7c673cae 4295 called = false;
92f5a8d4 4296 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(1),
7c673cae
FG
4297 bindns::bind(async_read_handler,
4298 _1, _2, 1, &called));
b32b8144
FG
4299 ioc.restart();
4300 ioc.run();
7c673cae 4301 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4302 BOOST_ASIO_CHECK(sb.size() == 1);
4303 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 1));
7c673cae
FG
4304
4305 s.reset(read_data, sizeof(read_data));
4306 s.next_read_length(10);
92f5a8d4 4307 sb.consume(sb.size());
7c673cae 4308 called = false;
92f5a8d4 4309 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(1),
7c673cae
FG
4310 bindns::bind(async_read_handler,
4311 _1, _2, 10, &called));
b32b8144
FG
4312 ioc.restart();
4313 ioc.run();
7c673cae 4314 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4315 BOOST_ASIO_CHECK(sb.size() == 10);
4316 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
7c673cae
FG
4317
4318 s.reset(read_data, sizeof(read_data));
92f5a8d4 4319 sb.consume(sb.size());
7c673cae 4320 called = false;
92f5a8d4 4321 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(10),
7c673cae
FG
4322 bindns::bind(async_read_handler,
4323 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4324 ioc.restart();
4325 ioc.run();
7c673cae 4326 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4327 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4328 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
4329
4330 s.reset(read_data, sizeof(read_data));
4331 s.next_read_length(1);
92f5a8d4 4332 sb.consume(sb.size());
7c673cae 4333 called = false;
92f5a8d4 4334 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(10),
7c673cae
FG
4335 bindns::bind(async_read_handler,
4336 _1, _2, 10, &called));
b32b8144
FG
4337 ioc.restart();
4338 ioc.run();
7c673cae 4339 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4340 BOOST_ASIO_CHECK(sb.size() == 10);
4341 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
7c673cae
FG
4342
4343 s.reset(read_data, sizeof(read_data));
4344 s.next_read_length(10);
92f5a8d4 4345 sb.consume(sb.size());
7c673cae 4346 called = false;
92f5a8d4 4347 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(10),
7c673cae
FG
4348 bindns::bind(async_read_handler,
4349 _1, _2, 10, &called));
b32b8144
FG
4350 ioc.restart();
4351 ioc.run();
7c673cae 4352 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4353 BOOST_ASIO_CHECK(sb.size() == 10);
4354 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
7c673cae
FG
4355
4356 s.reset(read_data, sizeof(read_data));
92f5a8d4 4357 sb.consume(sb.size());
7c673cae 4358 called = false;
92f5a8d4 4359 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(42),
7c673cae
FG
4360 bindns::bind(async_read_handler,
4361 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4362 ioc.restart();
4363 ioc.run();
7c673cae 4364 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4365 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4366 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
4367
4368 s.reset(read_data, sizeof(read_data));
4369 s.next_read_length(1);
92f5a8d4 4370 sb.consume(sb.size());
7c673cae 4371 called = false;
92f5a8d4 4372 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(42),
7c673cae
FG
4373 bindns::bind(async_read_handler,
4374 _1, _2, 42, &called));
b32b8144
FG
4375 ioc.restart();
4376 ioc.run();
7c673cae 4377 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4378 BOOST_ASIO_CHECK(sb.size() == 42);
4379 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 42));
7c673cae
FG
4380
4381 s.reset(read_data, sizeof(read_data));
4382 s.next_read_length(10);
92f5a8d4 4383 sb.consume(sb.size());
7c673cae 4384 called = false;
92f5a8d4 4385 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(42),
7c673cae
FG
4386 bindns::bind(async_read_handler,
4387 _1, _2, 50, &called));
b32b8144
FG
4388 ioc.restart();
4389 ioc.run();
7c673cae 4390 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4391 BOOST_ASIO_CHECK(sb.size() == 50);
4392 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 50));
7c673cae
FG
4393
4394 s.reset(read_data, sizeof(read_data));
92f5a8d4 4395 sb.consume(sb.size());
7c673cae 4396 called = false;
92f5a8d4 4397 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(1),
7c673cae
FG
4398 bindns::bind(async_read_handler,
4399 _1, _2, 1, &called));
b32b8144
FG
4400 ioc.restart();
4401 ioc.run();
7c673cae 4402 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4403 BOOST_ASIO_CHECK(sb.size() == 1);
4404 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 1));
7c673cae
FG
4405
4406 s.reset(read_data, sizeof(read_data));
4407 s.next_read_length(1);
92f5a8d4 4408 sb.consume(sb.size());
7c673cae 4409 called = false;
92f5a8d4 4410 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(1),
7c673cae
FG
4411 bindns::bind(async_read_handler,
4412 _1, _2, 1, &called));
b32b8144
FG
4413 ioc.restart();
4414 ioc.run();
7c673cae 4415 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4416 BOOST_ASIO_CHECK(sb.size() == 1);
4417 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 1));
7c673cae
FG
4418
4419 s.reset(read_data, sizeof(read_data));
4420 s.next_read_length(10);
92f5a8d4 4421 sb.consume(sb.size());
7c673cae 4422 called = false;
92f5a8d4 4423 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(1),
7c673cae
FG
4424 bindns::bind(async_read_handler,
4425 _1, _2, 1, &called));
b32b8144
FG
4426 ioc.restart();
4427 ioc.run();
7c673cae 4428 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4429 BOOST_ASIO_CHECK(sb.size() == 1);
4430 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 1));
7c673cae
FG
4431
4432 s.reset(read_data, sizeof(read_data));
92f5a8d4 4433 sb.consume(sb.size());
7c673cae 4434 called = false;
92f5a8d4 4435 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(10),
7c673cae
FG
4436 bindns::bind(async_read_handler,
4437 _1, _2, 10, &called));
b32b8144
FG
4438 ioc.restart();
4439 ioc.run();
7c673cae 4440 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4441 BOOST_ASIO_CHECK(sb.size() == 10);
4442 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
7c673cae
FG
4443
4444 s.reset(read_data, sizeof(read_data));
4445 s.next_read_length(1);
92f5a8d4 4446 sb.consume(sb.size());
7c673cae 4447 called = false;
92f5a8d4 4448 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(10),
7c673cae
FG
4449 bindns::bind(async_read_handler,
4450 _1, _2, 10, &called));
b32b8144
FG
4451 ioc.restart();
4452 ioc.run();
7c673cae 4453 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4454 BOOST_ASIO_CHECK(sb.size() == 10);
4455 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
7c673cae
FG
4456
4457 s.reset(read_data, sizeof(read_data));
4458 s.next_read_length(10);
92f5a8d4 4459 sb.consume(sb.size());
7c673cae 4460 called = false;
92f5a8d4 4461 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(10),
7c673cae
FG
4462 bindns::bind(async_read_handler,
4463 _1, _2, 10, &called));
b32b8144
FG
4464 ioc.restart();
4465 ioc.run();
7c673cae 4466 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4467 BOOST_ASIO_CHECK(sb.size() == 10);
4468 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 10));
7c673cae
FG
4469
4470 s.reset(read_data, sizeof(read_data));
92f5a8d4 4471 sb.consume(sb.size());
7c673cae 4472 called = false;
92f5a8d4 4473 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(42),
7c673cae
FG
4474 bindns::bind(async_read_handler,
4475 _1, _2, 42, &called));
b32b8144
FG
4476 ioc.restart();
4477 ioc.run();
7c673cae 4478 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4479 BOOST_ASIO_CHECK(sb.size() == 42);
4480 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 42));
7c673cae
FG
4481
4482 s.reset(read_data, sizeof(read_data));
4483 s.next_read_length(1);
92f5a8d4 4484 sb.consume(sb.size());
7c673cae 4485 called = false;
92f5a8d4 4486 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(42),
7c673cae
FG
4487 bindns::bind(async_read_handler,
4488 _1, _2, 42, &called));
b32b8144
FG
4489 ioc.restart();
4490 ioc.run();
7c673cae 4491 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4492 BOOST_ASIO_CHECK(sb.size() == 42);
4493 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 42));
7c673cae
FG
4494
4495 s.reset(read_data, sizeof(read_data));
4496 s.next_read_length(10);
92f5a8d4 4497 sb.consume(sb.size());
7c673cae 4498 called = false;
92f5a8d4 4499 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(42),
7c673cae
FG
4500 bindns::bind(async_read_handler,
4501 _1, _2, 42, &called));
b32b8144
FG
4502 ioc.restart();
4503 ioc.run();
7c673cae 4504 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4505 BOOST_ASIO_CHECK(sb.size() == 42);
4506 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), 42));
7c673cae
FG
4507
4508 s.reset(read_data, sizeof(read_data));
92f5a8d4 4509 sb.consume(sb.size());
7c673cae 4510 called = false;
92f5a8d4 4511 boost::asio::async_read(s, sb, old_style_transfer_all,
7c673cae
FG
4512 bindns::bind(async_read_handler,
4513 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4514 ioc.restart();
4515 ioc.run();
7c673cae 4516 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4517 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4518 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
4519
4520 s.reset(read_data, sizeof(read_data));
4521 s.next_read_length(1);
92f5a8d4 4522 sb.consume(sb.size());
7c673cae 4523 called = false;
92f5a8d4 4524 boost::asio::async_read(s, sb, old_style_transfer_all,
7c673cae
FG
4525 bindns::bind(async_read_handler,
4526 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4527 ioc.restart();
4528 ioc.run();
7c673cae 4529 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4530 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4531 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
4532
4533 s.reset(read_data, sizeof(read_data));
4534 s.next_read_length(10);
92f5a8d4 4535 sb.consume(sb.size());
7c673cae 4536 called = false;
92f5a8d4 4537 boost::asio::async_read(s, sb, old_style_transfer_all,
7c673cae
FG
4538 bindns::bind(async_read_handler,
4539 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4540 ioc.restart();
4541 ioc.run();
7c673cae 4542 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4543 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4544 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
4545
4546 s.reset(read_data, sizeof(read_data));
92f5a8d4 4547 sb.consume(sb.size());
7c673cae 4548 called = false;
92f5a8d4 4549 boost::asio::async_read(s, sb, short_transfer(),
7c673cae
FG
4550 bindns::bind(async_read_handler,
4551 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4552 ioc.restart();
4553 ioc.run();
7c673cae 4554 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4555 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4556 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
4557
4558 s.reset(read_data, sizeof(read_data));
4559 s.next_read_length(1);
92f5a8d4 4560 sb.consume(sb.size());
7c673cae 4561 called = false;
92f5a8d4 4562 boost::asio::async_read(s, sb, short_transfer(),
7c673cae
FG
4563 bindns::bind(async_read_handler,
4564 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4565 ioc.restart();
4566 ioc.run();
7c673cae 4567 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4568 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4569 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
4570
4571 s.reset(read_data, sizeof(read_data));
4572 s.next_read_length(10);
92f5a8d4 4573 sb.consume(sb.size());
7c673cae 4574 called = false;
92f5a8d4 4575 boost::asio::async_read(s, sb, short_transfer(),
7c673cae
FG
4576 bindns::bind(async_read_handler,
4577 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4578 ioc.restart();
4579 ioc.run();
7c673cae 4580 BOOST_ASIO_CHECK(called);
92f5a8d4
TL
4581 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4582 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
4583
4584 s.reset(read_data, sizeof(read_data));
92f5a8d4
TL
4585 sb.consume(sb.size());
4586 int i = boost::asio::async_read(s, sb,
4587 short_transfer(), archetypes::lazy_handler());
7c673cae 4588 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
4589 ioc.restart();
4590 ioc.run();
92f5a8d4
TL
4591 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4592 BOOST_ASIO_CHECK(s.check_buffers(sb.data(0, sb.size()), sizeof(read_data)));
7c673cae
FG
4593}
4594
4595void test_4_arg_streambuf_async_read()
4596{
92f5a8d4 4597#if !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
7c673cae
FG
4598#if defined(BOOST_ASIO_HAS_BOOST_BIND)
4599 namespace bindns = boost;
4600#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
4601 namespace bindns = std;
7c673cae 4602#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
4603 using bindns::placeholders::_1;
4604 using bindns::placeholders::_2;
7c673cae 4605
b32b8144
FG
4606 boost::asio::io_context ioc;
4607 test_stream s(ioc);
7c673cae
FG
4608 boost::asio::streambuf sb(sizeof(read_data));
4609
4610 s.reset(read_data, sizeof(read_data));
4611 sb.consume(sb.size());
4612 bool called = false;
4613 boost::asio::async_read(s, sb, boost::asio::transfer_all(),
4614 bindns::bind(async_read_handler,
4615 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4616 ioc.restart();
4617 ioc.run();
7c673cae
FG
4618 BOOST_ASIO_CHECK(called);
4619 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4620 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
4621
4622 s.reset(read_data, sizeof(read_data));
4623 s.next_read_length(1);
4624 sb.consume(sb.size());
4625 called = false;
4626 boost::asio::async_read(s, sb, boost::asio::transfer_all(),
4627 bindns::bind(async_read_handler,
4628 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4629 ioc.restart();
4630 ioc.run();
7c673cae
FG
4631 BOOST_ASIO_CHECK(called);
4632 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4633 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
4634
4635 s.reset(read_data, sizeof(read_data));
4636 s.next_read_length(10);
4637 sb.consume(sb.size());
4638 called = false;
4639 boost::asio::async_read(s, sb, boost::asio::transfer_all(),
4640 bindns::bind(async_read_handler,
4641 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4642 ioc.restart();
4643 ioc.run();
7c673cae
FG
4644 BOOST_ASIO_CHECK(called);
4645 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4646 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
4647
4648 s.reset(read_data, sizeof(read_data));
4649 sb.consume(sb.size());
4650 called = false;
4651 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(1),
4652 bindns::bind(async_read_handler,
4653 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4654 ioc.restart();
4655 ioc.run();
7c673cae
FG
4656 BOOST_ASIO_CHECK(called);
4657 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4658 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
4659
4660 s.reset(read_data, sizeof(read_data));
4661 s.next_read_length(1);
4662 sb.consume(sb.size());
4663 called = false;
4664 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(1),
4665 bindns::bind(async_read_handler,
4666 _1, _2, 1, &called));
b32b8144
FG
4667 ioc.restart();
4668 ioc.run();
7c673cae
FG
4669 BOOST_ASIO_CHECK(called);
4670 BOOST_ASIO_CHECK(sb.size() == 1);
4671 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
4672
4673 s.reset(read_data, sizeof(read_data));
4674 s.next_read_length(10);
4675 sb.consume(sb.size());
4676 called = false;
4677 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(1),
4678 bindns::bind(async_read_handler,
4679 _1, _2, 10, &called));
b32b8144
FG
4680 ioc.restart();
4681 ioc.run();
7c673cae
FG
4682 BOOST_ASIO_CHECK(called);
4683 BOOST_ASIO_CHECK(sb.size() == 10);
4684 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
4685
4686 s.reset(read_data, sizeof(read_data));
4687 sb.consume(sb.size());
4688 called = false;
4689 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(10),
4690 bindns::bind(async_read_handler,
4691 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4692 ioc.restart();
4693 ioc.run();
7c673cae
FG
4694 BOOST_ASIO_CHECK(called);
4695 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4696 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
4697
4698 s.reset(read_data, sizeof(read_data));
4699 s.next_read_length(1);
4700 sb.consume(sb.size());
4701 called = false;
4702 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(10),
4703 bindns::bind(async_read_handler,
4704 _1, _2, 10, &called));
b32b8144
FG
4705 ioc.restart();
4706 ioc.run();
7c673cae
FG
4707 BOOST_ASIO_CHECK(called);
4708 BOOST_ASIO_CHECK(sb.size() == 10);
4709 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
4710
4711 s.reset(read_data, sizeof(read_data));
4712 s.next_read_length(10);
4713 sb.consume(sb.size());
4714 called = false;
4715 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(10),
4716 bindns::bind(async_read_handler,
4717 _1, _2, 10, &called));
b32b8144
FG
4718 ioc.restart();
4719 ioc.run();
7c673cae
FG
4720 BOOST_ASIO_CHECK(called);
4721 BOOST_ASIO_CHECK(sb.size() == 10);
4722 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
4723
4724 s.reset(read_data, sizeof(read_data));
4725 sb.consume(sb.size());
4726 called = false;
4727 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(42),
4728 bindns::bind(async_read_handler,
4729 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4730 ioc.restart();
4731 ioc.run();
7c673cae
FG
4732 BOOST_ASIO_CHECK(called);
4733 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4734 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
4735
4736 s.reset(read_data, sizeof(read_data));
4737 s.next_read_length(1);
4738 sb.consume(sb.size());
4739 called = false;
4740 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(42),
4741 bindns::bind(async_read_handler,
4742 _1, _2, 42, &called));
b32b8144
FG
4743 ioc.restart();
4744 ioc.run();
7c673cae
FG
4745 BOOST_ASIO_CHECK(called);
4746 BOOST_ASIO_CHECK(sb.size() == 42);
4747 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
4748
4749 s.reset(read_data, sizeof(read_data));
4750 s.next_read_length(10);
4751 sb.consume(sb.size());
4752 called = false;
4753 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(42),
4754 bindns::bind(async_read_handler,
4755 _1, _2, 50, &called));
b32b8144
FG
4756 ioc.restart();
4757 ioc.run();
7c673cae
FG
4758 BOOST_ASIO_CHECK(called);
4759 BOOST_ASIO_CHECK(sb.size() == 50);
4760 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 50));
4761
4762 s.reset(read_data, sizeof(read_data));
4763 sb.consume(sb.size());
4764 called = false;
4765 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(1),
4766 bindns::bind(async_read_handler,
4767 _1, _2, 1, &called));
b32b8144
FG
4768 ioc.restart();
4769 ioc.run();
7c673cae
FG
4770 BOOST_ASIO_CHECK(called);
4771 BOOST_ASIO_CHECK(sb.size() == 1);
4772 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
4773
4774 s.reset(read_data, sizeof(read_data));
4775 s.next_read_length(1);
4776 sb.consume(sb.size());
4777 called = false;
4778 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(1),
4779 bindns::bind(async_read_handler,
4780 _1, _2, 1, &called));
b32b8144
FG
4781 ioc.restart();
4782 ioc.run();
7c673cae
FG
4783 BOOST_ASIO_CHECK(called);
4784 BOOST_ASIO_CHECK(sb.size() == 1);
4785 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
4786
4787 s.reset(read_data, sizeof(read_data));
4788 s.next_read_length(10);
4789 sb.consume(sb.size());
4790 called = false;
4791 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(1),
4792 bindns::bind(async_read_handler,
4793 _1, _2, 1, &called));
b32b8144
FG
4794 ioc.restart();
4795 ioc.run();
7c673cae
FG
4796 BOOST_ASIO_CHECK(called);
4797 BOOST_ASIO_CHECK(sb.size() == 1);
4798 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
4799
4800 s.reset(read_data, sizeof(read_data));
4801 sb.consume(sb.size());
4802 called = false;
4803 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(10),
4804 bindns::bind(async_read_handler,
4805 _1, _2, 10, &called));
b32b8144
FG
4806 ioc.restart();
4807 ioc.run();
7c673cae
FG
4808 BOOST_ASIO_CHECK(called);
4809 BOOST_ASIO_CHECK(sb.size() == 10);
4810 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
4811
4812 s.reset(read_data, sizeof(read_data));
4813 s.next_read_length(1);
4814 sb.consume(sb.size());
4815 called = false;
4816 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(10),
4817 bindns::bind(async_read_handler,
4818 _1, _2, 10, &called));
b32b8144
FG
4819 ioc.restart();
4820 ioc.run();
7c673cae
FG
4821 BOOST_ASIO_CHECK(called);
4822 BOOST_ASIO_CHECK(sb.size() == 10);
4823 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
4824
4825 s.reset(read_data, sizeof(read_data));
4826 s.next_read_length(10);
4827 sb.consume(sb.size());
4828 called = false;
4829 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(10),
4830 bindns::bind(async_read_handler,
4831 _1, _2, 10, &called));
b32b8144
FG
4832 ioc.restart();
4833 ioc.run();
7c673cae
FG
4834 BOOST_ASIO_CHECK(called);
4835 BOOST_ASIO_CHECK(sb.size() == 10);
4836 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
4837
4838 s.reset(read_data, sizeof(read_data));
4839 sb.consume(sb.size());
4840 called = false;
4841 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(42),
4842 bindns::bind(async_read_handler,
4843 _1, _2, 42, &called));
b32b8144
FG
4844 ioc.restart();
4845 ioc.run();
7c673cae
FG
4846 BOOST_ASIO_CHECK(called);
4847 BOOST_ASIO_CHECK(sb.size() == 42);
4848 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
4849
4850 s.reset(read_data, sizeof(read_data));
4851 s.next_read_length(1);
4852 sb.consume(sb.size());
4853 called = false;
4854 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(42),
4855 bindns::bind(async_read_handler,
4856 _1, _2, 42, &called));
b32b8144
FG
4857 ioc.restart();
4858 ioc.run();
7c673cae
FG
4859 BOOST_ASIO_CHECK(called);
4860 BOOST_ASIO_CHECK(sb.size() == 42);
4861 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
4862
4863 s.reset(read_data, sizeof(read_data));
4864 s.next_read_length(10);
4865 sb.consume(sb.size());
4866 called = false;
4867 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(42),
4868 bindns::bind(async_read_handler,
4869 _1, _2, 42, &called));
b32b8144
FG
4870 ioc.restart();
4871 ioc.run();
7c673cae
FG
4872 BOOST_ASIO_CHECK(called);
4873 BOOST_ASIO_CHECK(sb.size() == 42);
4874 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
4875
4876 s.reset(read_data, sizeof(read_data));
4877 sb.consume(sb.size());
4878 called = false;
4879 boost::asio::async_read(s, sb, old_style_transfer_all,
4880 bindns::bind(async_read_handler,
4881 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4882 ioc.restart();
4883 ioc.run();
7c673cae
FG
4884 BOOST_ASIO_CHECK(called);
4885 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4886 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
4887
4888 s.reset(read_data, sizeof(read_data));
4889 s.next_read_length(1);
4890 sb.consume(sb.size());
4891 called = false;
4892 boost::asio::async_read(s, sb, old_style_transfer_all,
4893 bindns::bind(async_read_handler,
4894 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4895 ioc.restart();
4896 ioc.run();
7c673cae
FG
4897 BOOST_ASIO_CHECK(called);
4898 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4899 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
4900
4901 s.reset(read_data, sizeof(read_data));
4902 s.next_read_length(10);
4903 sb.consume(sb.size());
4904 called = false;
4905 boost::asio::async_read(s, sb, old_style_transfer_all,
4906 bindns::bind(async_read_handler,
4907 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4908 ioc.restart();
4909 ioc.run();
7c673cae
FG
4910 BOOST_ASIO_CHECK(called);
4911 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4912 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
4913
4914 s.reset(read_data, sizeof(read_data));
4915 sb.consume(sb.size());
4916 called = false;
92f5a8d4 4917 boost::asio::async_read(s, sb, short_transfer(),
7c673cae
FG
4918 bindns::bind(async_read_handler,
4919 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4920 ioc.restart();
4921 ioc.run();
7c673cae
FG
4922 BOOST_ASIO_CHECK(called);
4923 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4924 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
4925
4926 s.reset(read_data, sizeof(read_data));
4927 s.next_read_length(1);
4928 sb.consume(sb.size());
4929 called = false;
92f5a8d4 4930 boost::asio::async_read(s, sb, short_transfer(),
7c673cae
FG
4931 bindns::bind(async_read_handler,
4932 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4933 ioc.restart();
4934 ioc.run();
7c673cae
FG
4935 BOOST_ASIO_CHECK(called);
4936 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4937 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
4938
4939 s.reset(read_data, sizeof(read_data));
4940 s.next_read_length(10);
4941 sb.consume(sb.size());
4942 called = false;
92f5a8d4 4943 boost::asio::async_read(s, sb, short_transfer(),
7c673cae
FG
4944 bindns::bind(async_read_handler,
4945 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4946 ioc.restart();
4947 ioc.run();
7c673cae
FG
4948 BOOST_ASIO_CHECK(called);
4949 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4950 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
4951
4952 s.reset(read_data, sizeof(read_data));
4953 sb.consume(sb.size());
4954 int i = boost::asio::async_read(s, sb,
92f5a8d4 4955 short_transfer(), archetypes::lazy_handler());
7c673cae 4956 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
4957 ioc.restart();
4958 ioc.run();
7c673cae
FG
4959 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
4960 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
92f5a8d4 4961#endif // !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
7c673cae
FG
4962}
4963
4964BOOST_ASIO_TEST_SUITE
4965(
4966 "read",
4967 BOOST_ASIO_TEST_CASE(test_2_arg_zero_buffers_read)
b32b8144 4968 BOOST_ASIO_TEST_CASE(test_2_arg_mutable_buffer_read)
7c673cae 4969 BOOST_ASIO_TEST_CASE(test_2_arg_vector_buffers_read)
92f5a8d4 4970 BOOST_ASIO_TEST_CASE(test_2_arg_dynamic_string_read)
7c673cae
FG
4971 BOOST_ASIO_TEST_CASE(test_2_arg_streambuf_read)
4972 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_zero_buffers_read)
b32b8144 4973 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_mutable_buffer_read)
7c673cae 4974 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_vector_buffers_read)
92f5a8d4 4975 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_dynamic_string_read)
7c673cae 4976 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_streambuf_read)
b32b8144 4977 BOOST_ASIO_TEST_CASE(test_3_arg_mutable_buffer_read)
7c673cae 4978 BOOST_ASIO_TEST_CASE(test_3_arg_vector_buffers_read)
92f5a8d4 4979 BOOST_ASIO_TEST_CASE(test_3_arg_dynamic_string_read)
7c673cae 4980 BOOST_ASIO_TEST_CASE(test_3_arg_streambuf_read)
b32b8144 4981 BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffer_read)
7c673cae 4982 BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_read)
92f5a8d4 4983 BOOST_ASIO_TEST_CASE(test_4_arg_dynamic_string_read)
7c673cae 4984 BOOST_ASIO_TEST_CASE(test_4_arg_streambuf_read)
b32b8144 4985 BOOST_ASIO_TEST_CASE(test_3_arg_mutable_buffer_async_read)
7c673cae
FG
4986 BOOST_ASIO_TEST_CASE(test_3_arg_boost_array_buffers_async_read)
4987 BOOST_ASIO_TEST_CASE(test_3_arg_std_array_buffers_async_read)
4988 BOOST_ASIO_TEST_CASE(test_3_arg_vector_buffers_async_read)
92f5a8d4 4989 BOOST_ASIO_TEST_CASE(test_3_arg_dynamic_string_async_read)
7c673cae 4990 BOOST_ASIO_TEST_CASE(test_3_arg_streambuf_async_read)
b32b8144 4991 BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffer_async_read)
7c673cae
FG
4992 BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_async_read)
4993 BOOST_ASIO_TEST_CASE(test_4_arg_boost_array_buffers_async_read)
4994 BOOST_ASIO_TEST_CASE(test_4_arg_std_array_buffers_async_read)
92f5a8d4 4995 BOOST_ASIO_TEST_CASE(test_4_arg_dynamic_string_async_read)
7c673cae
FG
4996 BOOST_ASIO_TEST_CASE(test_4_arg_streambuf_async_read)
4997)