]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/asio/test/read_at.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / asio / test / read_at.cpp
CommitLineData
7c673cae
FG
1//
2// read_at.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_at.hpp>
18
19#include <cstring>
20#include "archetypes/async_result.hpp"
b32b8144
FG
21#include <boost/asio/io_context.hpp>
22#include <boost/asio/post.hpp>
7c673cae
FG
23#include <boost/asio/streambuf.hpp>
24#include "unit_test.hpp"
25
26#if defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2 27# include <boost/bind/bind.hpp>
7c673cae
FG
28#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
29# include <functional>
30#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
31
32#if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
33#include <boost/array.hpp>
34#endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
35
36#if defined(BOOST_ASIO_HAS_STD_ARRAY)
37# include <array>
38#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
39
40using namespace std; // For memcmp, memcpy and memset.
41
42class test_random_access_device
43{
44public:
b32b8144 45 typedef boost::asio::io_context::executor_type executor_type;
7c673cae 46
b32b8144
FG
47 test_random_access_device(boost::asio::io_context& io_context)
48 : io_context_(io_context),
7c673cae
FG
49 length_(0),
50 next_read_length_(0)
51 {
52 }
53
b32b8144 54 executor_type get_executor() BOOST_ASIO_NOEXCEPT
7c673cae 55 {
b32b8144 56 return io_context_.get_executor();
7c673cae
FG
57 }
58
59 void reset(const void* data, size_t length)
60 {
61 BOOST_ASIO_CHECK(length <= max_length);
62
63 length_ = 0;
64 while (length_ + length < max_length)
65 {
66 memcpy(data_ + length_, data, length);
67 length_ += length;
68 }
69
70 next_read_length_ = length;
71 }
72
73 void next_read_length(size_t length)
74 {
75 next_read_length_ = length;
76 }
77
b32b8144 78 template <typename Iterator>
7c673cae 79 bool check_buffers(boost::asio::uint64_t offset,
b32b8144 80 Iterator begin, Iterator end, size_t length)
7c673cae
FG
81 {
82 if (offset + length > max_length)
83 return false;
84
b32b8144 85 Iterator iter = begin;
7c673cae
FG
86 size_t checked_length = 0;
87 for (; iter != end && checked_length < length; ++iter)
88 {
89 size_t buffer_length = boost::asio::buffer_size(*iter);
90 if (buffer_length > length - checked_length)
91 buffer_length = length - checked_length;
92 if (memcmp(data_ + offset + checked_length,
b32b8144 93 iter->data(), buffer_length) != 0)
7c673cae
FG
94 return false;
95 checked_length += buffer_length;
96 }
97
98 return true;
99 }
100
b32b8144
FG
101 template <typename Const_Buffers>
102 bool check_buffers(boost::asio::uint64_t offset,
103 const Const_Buffers& buffers, size_t length)
104 {
105 return check_buffers(offset, boost::asio::buffer_sequence_begin(buffers),
106 boost::asio::buffer_sequence_end(buffers), length);
107 }
108
7c673cae
FG
109 template <typename Mutable_Buffers>
110 size_t read_some_at(boost::asio::uint64_t offset,
111 const Mutable_Buffers& buffers)
112 {
113 return boost::asio::buffer_copy(buffers,
114 boost::asio::buffer(data_, length_) + offset,
115 next_read_length_);
116 }
117
118 template <typename Mutable_Buffers>
119 size_t read_some_at(boost::asio::uint64_t offset,
120 const Mutable_Buffers& buffers, boost::system::error_code& ec)
121 {
122 ec = boost::system::error_code();
123 return read_some_at(offset, buffers);
124 }
125
126 template <typename Mutable_Buffers, typename Handler>
127 void async_read_some_at(boost::asio::uint64_t offset,
92f5a8d4 128 const Mutable_Buffers& buffers, BOOST_ASIO_MOVE_ARG(Handler) handler)
7c673cae
FG
129 {
130 size_t bytes_transferred = read_some_at(offset, buffers);
b32b8144
FG
131 boost::asio::post(get_executor(),
132 boost::asio::detail::bind_handler(
133 BOOST_ASIO_MOVE_CAST(Handler)(handler),
134 boost::system::error_code(), bytes_transferred));
7c673cae
FG
135 }
136
137private:
b32b8144 138 boost::asio::io_context& io_context_;
7c673cae
FG
139 enum { max_length = 8192 };
140 char data_[max_length];
141 size_t length_;
142 size_t next_read_length_;
143};
144
145static const char read_data[]
146 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
147
b32b8144 148void test_3_arg_mutable_buffer_read_at()
7c673cae 149{
b32b8144
FG
150 boost::asio::io_context ioc;
151 test_random_access_device s(ioc);
7c673cae 152 char read_buf[sizeof(read_data)];
b32b8144 153 boost::asio::mutable_buffer buffers
7c673cae
FG
154 = boost::asio::buffer(read_buf, sizeof(read_buf));
155
156 s.reset(read_data, sizeof(read_data));
157 memset(read_buf, 0, sizeof(read_buf));
158 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers);
159 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
160 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
161
162 s.reset(read_data, sizeof(read_data));
163 memset(read_buf, 0, sizeof(read_buf));
164 bytes_transferred = boost::asio::read_at(s, 1234, buffers);
165 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
166 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
167
168 s.reset(read_data, sizeof(read_data));
169 s.next_read_length(1);
170 memset(read_buf, 0, sizeof(read_buf));
171 bytes_transferred = boost::asio::read_at(s, 0, buffers);
172 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
173 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
174
175 s.reset(read_data, sizeof(read_data));
176 s.next_read_length(1);
177 memset(read_buf, 0, sizeof(read_buf));
178 bytes_transferred = boost::asio::read_at(s, 1234, buffers);
179 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
180 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
181
182 s.reset(read_data, sizeof(read_data));
183 s.next_read_length(10);
184 memset(read_buf, 0, sizeof(read_buf));
185 bytes_transferred = boost::asio::read_at(s, 0, buffers);
186 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
187 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
188
189 s.reset(read_data, sizeof(read_data));
190 s.next_read_length(10);
191 memset(read_buf, 0, sizeof(read_buf));
192 bytes_transferred = boost::asio::read_at(s, 1234, buffers);
193 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
194 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
195}
196
197void test_3_arg_vector_buffers_read_at()
198{
b32b8144
FG
199 boost::asio::io_context ioc;
200 test_random_access_device s(ioc);
7c673cae
FG
201 char read_buf[sizeof(read_data)];
202 std::vector<boost::asio::mutable_buffer> buffers;
203 buffers.push_back(boost::asio::buffer(read_buf, 32));
204 buffers.push_back(boost::asio::buffer(read_buf) + 32);
205
206 s.reset(read_data, sizeof(read_data));
207 memset(read_buf, 0, sizeof(read_buf));
208 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers);
209 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
210 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
211
212 s.reset(read_data, sizeof(read_data));
213 memset(read_buf, 0, sizeof(read_buf));
214 bytes_transferred = boost::asio::read_at(s, 1234, buffers);
215 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
216 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
217
218 s.reset(read_data, sizeof(read_data));
219 s.next_read_length(1);
220 memset(read_buf, 0, sizeof(read_buf));
221 bytes_transferred = boost::asio::read_at(s, 0, buffers);
222 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
223 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
224
225 s.reset(read_data, sizeof(read_data));
226 s.next_read_length(1);
227 memset(read_buf, 0, sizeof(read_buf));
228 bytes_transferred = boost::asio::read_at(s, 1234, buffers);
229 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
230 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
231
232 s.reset(read_data, sizeof(read_data));
233 s.next_read_length(10);
234 memset(read_buf, 0, sizeof(read_buf));
235 bytes_transferred = boost::asio::read_at(s, 0, buffers);
236 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
237 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
238
239 s.reset(read_data, sizeof(read_data));
240 s.next_read_length(10);
241 memset(read_buf, 0, sizeof(read_buf));
242 bytes_transferred = boost::asio::read_at(s, 1234, buffers);
243 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
244 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
245}
246
247void test_3_arg_streambuf_read_at()
248{
b32b8144
FG
249 boost::asio::io_context ioc;
250 test_random_access_device s(ioc);
7c673cae
FG
251 boost::asio::streambuf sb(sizeof(read_data));
252
253 s.reset(read_data, sizeof(read_data));
254 sb.consume(sb.size());
255 size_t bytes_transferred = boost::asio::read_at(s, 0, sb);
256 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
257 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
258 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
259
260 s.reset(read_data, sizeof(read_data));
261 sb.consume(sb.size());
262 bytes_transferred = boost::asio::read_at(s, 1234, sb);
263 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
264 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
265 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
266
267 s.reset(read_data, sizeof(read_data));
268 s.next_read_length(1);
269 sb.consume(sb.size());
270 bytes_transferred = boost::asio::read_at(s, 0, sb);
271 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
272 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
273 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
274
275 s.reset(read_data, sizeof(read_data));
276 s.next_read_length(1);
277 sb.consume(sb.size());
278 bytes_transferred = boost::asio::read_at(s, 1234, sb);
279 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
280 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
281 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
282
283 s.reset(read_data, sizeof(read_data));
284 s.next_read_length(10);
285 sb.consume(sb.size());
286 bytes_transferred = boost::asio::read_at(s, 0, sb);
287 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
288 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
289 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
290
291 s.reset(read_data, sizeof(read_data));
292 s.next_read_length(10);
293 sb.consume(sb.size());
294 bytes_transferred = boost::asio::read_at(s, 1234, sb);
295 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
296 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
297 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
298}
299
b32b8144 300void test_4_arg_nothrow_mutable_buffer_read_at()
7c673cae 301{
b32b8144
FG
302 boost::asio::io_context ioc;
303 test_random_access_device s(ioc);
7c673cae 304 char read_buf[sizeof(read_data)];
b32b8144 305 boost::asio::mutable_buffer buffers
7c673cae
FG
306 = boost::asio::buffer(read_buf, sizeof(read_buf));
307
308 s.reset(read_data, sizeof(read_data));
309 memset(read_buf, 0, sizeof(read_buf));
310 boost::system::error_code error;
311 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers, error);
312 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
313 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
314 BOOST_ASIO_CHECK(!error);
315
316 s.reset(read_data, sizeof(read_data));
317 memset(read_buf, 0, sizeof(read_buf));
318 bytes_transferred = boost::asio::read_at(s, 1234, buffers, error);
319 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
320 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
321 BOOST_ASIO_CHECK(!error);
322
323 s.reset(read_data, sizeof(read_data));
324 s.next_read_length(1);
325 memset(read_buf, 0, sizeof(read_buf));
326 bytes_transferred = boost::asio::read_at(s, 0, buffers, error);
327 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
328 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
329 BOOST_ASIO_CHECK(!error);
330
331 s.reset(read_data, sizeof(read_data));
332 s.next_read_length(1);
333 memset(read_buf, 0, sizeof(read_buf));
334 bytes_transferred = boost::asio::read_at(s, 1234, buffers, error);
335 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
336 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
337 BOOST_ASIO_CHECK(!error);
338
339 s.reset(read_data, sizeof(read_data));
340 s.next_read_length(10);
341 memset(read_buf, 0, sizeof(read_buf));
342 bytes_transferred = boost::asio::read_at(s, 0, buffers, error);
343 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
344 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
345 BOOST_ASIO_CHECK(!error);
346
347 s.reset(read_data, sizeof(read_data));
348 s.next_read_length(10);
349 memset(read_buf, 0, sizeof(read_buf));
350 bytes_transferred = boost::asio::read_at(s, 1234, buffers, error);
351 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
352 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
353 BOOST_ASIO_CHECK(!error);
354}
355
356void test_4_arg_nothrow_vector_buffers_read_at()
357{
b32b8144
FG
358 boost::asio::io_context ioc;
359 test_random_access_device s(ioc);
7c673cae
FG
360 char read_buf[sizeof(read_data)];
361 std::vector<boost::asio::mutable_buffer> buffers;
362 buffers.push_back(boost::asio::buffer(read_buf, 32));
363 buffers.push_back(boost::asio::buffer(read_buf) + 32);
364
365 s.reset(read_data, sizeof(read_data));
366 memset(read_buf, 0, sizeof(read_buf));
367 boost::system::error_code error;
368 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers, error);
369 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
370 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
371 BOOST_ASIO_CHECK(!error);
372
373 s.reset(read_data, sizeof(read_data));
374 memset(read_buf, 0, sizeof(read_buf));
375 bytes_transferred = boost::asio::read_at(s, 1234, buffers, error);
376 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
377 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
378 BOOST_ASIO_CHECK(!error);
379
380 s.reset(read_data, sizeof(read_data));
381 s.next_read_length(1);
382 memset(read_buf, 0, sizeof(read_buf));
383 bytes_transferred = boost::asio::read_at(s, 0, buffers, error);
384 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
385 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
386 BOOST_ASIO_CHECK(!error);
387
388 s.reset(read_data, sizeof(read_data));
389 s.next_read_length(1);
390 memset(read_buf, 0, sizeof(read_buf));
391 bytes_transferred = boost::asio::read_at(s, 1234, buffers, error);
392 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
393 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
394 BOOST_ASIO_CHECK(!error);
395
396 s.reset(read_data, sizeof(read_data));
397 s.next_read_length(10);
398 memset(read_buf, 0, sizeof(read_buf));
399 bytes_transferred = boost::asio::read_at(s, 0, buffers, error);
400 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
401 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
402 BOOST_ASIO_CHECK(!error);
403
404 s.reset(read_data, sizeof(read_data));
405 s.next_read_length(10);
406 memset(read_buf, 0, sizeof(read_buf));
407 bytes_transferred = boost::asio::read_at(s, 1234, buffers, error);
408 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
409 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
410 BOOST_ASIO_CHECK(!error);
411}
412
413void test_4_arg_nothrow_streambuf_read_at()
414{
b32b8144
FG
415 boost::asio::io_context ioc;
416 test_random_access_device s(ioc);
7c673cae
FG
417 boost::asio::streambuf sb(sizeof(read_data));
418
419 s.reset(read_data, sizeof(read_data));
420 sb.consume(sb.size());
421 boost::system::error_code error;
422 size_t bytes_transferred = boost::asio::read_at(s, 0, sb, error);
423 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
424 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
425 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
426 BOOST_ASIO_CHECK(!error);
427
428 s.reset(read_data, sizeof(read_data));
429 sb.consume(sb.size());
430 bytes_transferred = boost::asio::read_at(s, 1234, sb, error);
431 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
432 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
433 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
434 BOOST_ASIO_CHECK(!error);
435
436 s.reset(read_data, sizeof(read_data));
437 s.next_read_length(1);
438 sb.consume(sb.size());
439 bytes_transferred = boost::asio::read_at(s, 0, sb, error);
440 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
441 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
442 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
443 BOOST_ASIO_CHECK(!error);
444
445 s.reset(read_data, sizeof(read_data));
446 s.next_read_length(1);
447 sb.consume(sb.size());
448 bytes_transferred = boost::asio::read_at(s, 1234, sb, error);
449 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
450 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
451 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
452 BOOST_ASIO_CHECK(!error);
453
454 s.reset(read_data, sizeof(read_data));
455 s.next_read_length(10);
456 sb.consume(sb.size());
457 bytes_transferred = boost::asio::read_at(s, 0, sb, error);
458 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
459 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
460 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
461 BOOST_ASIO_CHECK(!error);
462
463 s.reset(read_data, sizeof(read_data));
464 s.next_read_length(10);
465 sb.consume(sb.size());
466 bytes_transferred = boost::asio::read_at(s, 1234, sb, error);
467 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
468 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
469 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
470 BOOST_ASIO_CHECK(!error);
471}
472
473bool old_style_transfer_all(const boost::system::error_code& ec,
474 size_t /*bytes_transferred*/)
475{
476 return !!ec;
477}
478
92f5a8d4 479struct short_transfer
7c673cae 480{
92f5a8d4
TL
481 short_transfer() {}
482#if defined(BOOST_ASIO_HAS_MOVE)
483 short_transfer(short_transfer&&) {}
484#else // defined(BOOST_ASIO_HAS_MOVE)
485 short_transfer(const short_transfer&) {}
486#endif // defined(BOOST_ASIO_HAS_MOVE)
487 size_t operator()(const boost::system::error_code& ec,
488 size_t /*bytes_transferred*/)
489 {
490 return !!ec ? 0 : 3;
491 }
492};
7c673cae 493
b32b8144 494void test_4_arg_mutable_buffer_read_at()
7c673cae 495{
b32b8144
FG
496 boost::asio::io_context ioc;
497 test_random_access_device s(ioc);
7c673cae 498 char read_buf[sizeof(read_data)];
b32b8144 499 boost::asio::mutable_buffer buffers
7c673cae
FG
500 = boost::asio::buffer(read_buf, sizeof(read_buf));
501
502 s.reset(read_data, sizeof(read_data));
503 memset(read_buf, 0, sizeof(read_buf));
504 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers,
505 boost::asio::transfer_all());
506 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
507 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
508
509 s.reset(read_data, sizeof(read_data));
510 memset(read_buf, 0, sizeof(read_buf));
511 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
512 boost::asio::transfer_all());
513 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
514 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
515
516 s.reset(read_data, sizeof(read_data));
517 s.next_read_length(1);
518 memset(read_buf, 0, sizeof(read_buf));
519 bytes_transferred = boost::asio::read_at(s, 0, buffers,
520 boost::asio::transfer_all());
521 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
522 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
523
524 s.reset(read_data, sizeof(read_data));
525 s.next_read_length(1);
526 memset(read_buf, 0, sizeof(read_buf));
527 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
528 boost::asio::transfer_all());
529 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
530 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
531
532 s.reset(read_data, sizeof(read_data));
533 s.next_read_length(10);
534 memset(read_buf, 0, sizeof(read_buf));
535 bytes_transferred = boost::asio::read_at(s, 0, buffers,
536 boost::asio::transfer_all());
537 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
538 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
539
540 s.reset(read_data, sizeof(read_data));
541 s.next_read_length(10);
542 memset(read_buf, 0, sizeof(read_buf));
543 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
544 boost::asio::transfer_all());
545 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
546 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
547
548 s.reset(read_data, sizeof(read_data));
549 memset(read_buf, 0, sizeof(read_buf));
550 bytes_transferred = boost::asio::read_at(s, 0, buffers,
551 boost::asio::transfer_at_least(1));
552 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
553 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
554
555 s.reset(read_data, sizeof(read_data));
556 memset(read_buf, 0, sizeof(read_buf));
557 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
558 boost::asio::transfer_at_least(1));
559 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
560 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
561
562 s.reset(read_data, sizeof(read_data));
563 s.next_read_length(1);
564 memset(read_buf, 0, sizeof(read_buf));
565 bytes_transferred = boost::asio::read_at(s, 0, buffers,
566 boost::asio::transfer_at_least(1));
567 BOOST_ASIO_CHECK(bytes_transferred == 1);
568 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
569
570 s.reset(read_data, sizeof(read_data));
571 s.next_read_length(1);
572 memset(read_buf, 0, sizeof(read_buf));
573 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
574 boost::asio::transfer_at_least(1));
575 BOOST_ASIO_CHECK(bytes_transferred == 1);
576 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
577
578 s.reset(read_data, sizeof(read_data));
579 s.next_read_length(10);
580 memset(read_buf, 0, sizeof(read_buf));
581 bytes_transferred = boost::asio::read_at(s, 0, buffers,
582 boost::asio::transfer_at_least(1));
583 BOOST_ASIO_CHECK(bytes_transferred == 10);
584 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
585
586 s.reset(read_data, sizeof(read_data));
587 s.next_read_length(10);
588 memset(read_buf, 0, sizeof(read_buf));
589 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
590 boost::asio::transfer_at_least(1));
591 BOOST_ASIO_CHECK(bytes_transferred == 10);
592 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
593
594 s.reset(read_data, sizeof(read_data));
595 memset(read_buf, 0, sizeof(read_buf));
596 bytes_transferred = boost::asio::read_at(s, 0, buffers,
597 boost::asio::transfer_at_least(10));
598 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
599 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
600
601 s.reset(read_data, sizeof(read_data));
602 memset(read_buf, 0, sizeof(read_buf));
603 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
604 boost::asio::transfer_at_least(10));
605 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
606 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
607
608 s.reset(read_data, sizeof(read_data));
609 s.next_read_length(1);
610 memset(read_buf, 0, sizeof(read_buf));
611 bytes_transferred = boost::asio::read_at(s, 0, buffers,
612 boost::asio::transfer_at_least(10));
613 BOOST_ASIO_CHECK(bytes_transferred == 10);
614 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
615
616 s.reset(read_data, sizeof(read_data));
617 s.next_read_length(1);
618 memset(read_buf, 0, sizeof(read_buf));
619 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
620 boost::asio::transfer_at_least(10));
621 BOOST_ASIO_CHECK(bytes_transferred == 10);
622 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
623
624 s.reset(read_data, sizeof(read_data));
625 s.next_read_length(10);
626 memset(read_buf, 0, sizeof(read_buf));
627 bytes_transferred = boost::asio::read_at(s, 0, buffers,
628 boost::asio::transfer_at_least(10));
629 BOOST_ASIO_CHECK(bytes_transferred == 10);
630 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
631
632 s.reset(read_data, sizeof(read_data));
633 s.next_read_length(10);
634 memset(read_buf, 0, sizeof(read_buf));
635 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
636 boost::asio::transfer_at_least(10));
637 BOOST_ASIO_CHECK(bytes_transferred == 10);
638 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
639
640 s.reset(read_data, sizeof(read_data));
641 memset(read_buf, 0, sizeof(read_buf));
642 bytes_transferred = boost::asio::read_at(s, 0, buffers,
643 boost::asio::transfer_at_least(42));
644 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
645 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
646
647 s.reset(read_data, sizeof(read_data));
648 memset(read_buf, 0, sizeof(read_buf));
649 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
650 boost::asio::transfer_at_least(42));
651 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
652 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
653
654 s.reset(read_data, sizeof(read_data));
655 s.next_read_length(1);
656 memset(read_buf, 0, sizeof(read_buf));
657 bytes_transferred = boost::asio::read_at(s, 0, buffers,
658 boost::asio::transfer_at_least(42));
659 BOOST_ASIO_CHECK(bytes_transferred == 42);
660 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
661
662 s.reset(read_data, sizeof(read_data));
663 s.next_read_length(1);
664 memset(read_buf, 0, sizeof(read_buf));
665 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
666 boost::asio::transfer_at_least(42));
667 BOOST_ASIO_CHECK(bytes_transferred == 42);
668 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
669
670 s.reset(read_data, sizeof(read_data));
671 s.next_read_length(10);
672 memset(read_buf, 0, sizeof(read_buf));
673 bytes_transferred = boost::asio::read_at(s, 0, buffers,
674 boost::asio::transfer_at_least(42));
675 BOOST_ASIO_CHECK(bytes_transferred == 50);
676 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
677
678 s.reset(read_data, sizeof(read_data));
679 s.next_read_length(10);
680 memset(read_buf, 0, sizeof(read_buf));
681 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
682 boost::asio::transfer_at_least(42));
683 BOOST_ASIO_CHECK(bytes_transferred == 50);
684 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
685
686 s.reset(read_data, sizeof(read_data));
687 memset(read_buf, 0, sizeof(read_buf));
688 bytes_transferred = boost::asio::read_at(s, 0, buffers,
689 boost::asio::transfer_exactly(1));
690 BOOST_ASIO_CHECK(bytes_transferred == 1);
691 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
692
693 s.reset(read_data, sizeof(read_data));
694 memset(read_buf, 0, sizeof(read_buf));
695 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
696 boost::asio::transfer_exactly(1));
697 BOOST_ASIO_CHECK(bytes_transferred == 1);
698 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
699
700 s.reset(read_data, sizeof(read_data));
701 s.next_read_length(1);
702 memset(read_buf, 0, sizeof(read_buf));
703 bytes_transferred = boost::asio::read_at(s, 0, buffers,
704 boost::asio::transfer_exactly(1));
705 BOOST_ASIO_CHECK(bytes_transferred == 1);
706 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
707
708 s.reset(read_data, sizeof(read_data));
709 s.next_read_length(1);
710 memset(read_buf, 0, sizeof(read_buf));
711 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
712 boost::asio::transfer_exactly(1));
713 BOOST_ASIO_CHECK(bytes_transferred == 1);
714 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
715
716 s.reset(read_data, sizeof(read_data));
717 s.next_read_length(10);
718 memset(read_buf, 0, sizeof(read_buf));
719 bytes_transferred = boost::asio::read_at(s, 0, buffers,
720 boost::asio::transfer_exactly(1));
721 BOOST_ASIO_CHECK(bytes_transferred == 1);
722 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
723
724 s.reset(read_data, sizeof(read_data));
725 s.next_read_length(10);
726 memset(read_buf, 0, sizeof(read_buf));
727 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
728 boost::asio::transfer_exactly(1));
729 BOOST_ASIO_CHECK(bytes_transferred == 1);
730 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
731
732 s.reset(read_data, sizeof(read_data));
733 memset(read_buf, 0, sizeof(read_buf));
734 bytes_transferred = boost::asio::read_at(s, 0, buffers,
735 boost::asio::transfer_exactly(10));
736 BOOST_ASIO_CHECK(bytes_transferred == 10);
737 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
738
739 s.reset(read_data, sizeof(read_data));
740 memset(read_buf, 0, sizeof(read_buf));
741 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
742 boost::asio::transfer_exactly(10));
743 BOOST_ASIO_CHECK(bytes_transferred == 10);
744 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
745
746 s.reset(read_data, sizeof(read_data));
747 s.next_read_length(1);
748 memset(read_buf, 0, sizeof(read_buf));
749 bytes_transferred = boost::asio::read_at(s, 0, buffers,
750 boost::asio::transfer_exactly(10));
751 BOOST_ASIO_CHECK(bytes_transferred == 10);
752 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
753
754 s.reset(read_data, sizeof(read_data));
755 s.next_read_length(1);
756 memset(read_buf, 0, sizeof(read_buf));
757 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
758 boost::asio::transfer_exactly(10));
759 BOOST_ASIO_CHECK(bytes_transferred == 10);
760 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
761
762 s.reset(read_data, sizeof(read_data));
763 s.next_read_length(10);
764 memset(read_buf, 0, sizeof(read_buf));
765 bytes_transferred = boost::asio::read_at(s, 0, buffers,
766 boost::asio::transfer_exactly(10));
767 BOOST_ASIO_CHECK(bytes_transferred == 10);
768 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
769
770 s.reset(read_data, sizeof(read_data));
771 s.next_read_length(10);
772 memset(read_buf, 0, sizeof(read_buf));
773 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
774 boost::asio::transfer_exactly(10));
775 BOOST_ASIO_CHECK(bytes_transferred == 10);
776 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
777
778 s.reset(read_data, sizeof(read_data));
779 memset(read_buf, 0, sizeof(read_buf));
780 bytes_transferred = boost::asio::read_at(s, 0, buffers,
781 boost::asio::transfer_exactly(42));
782 BOOST_ASIO_CHECK(bytes_transferred == 42);
783 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
784
785 s.reset(read_data, sizeof(read_data));
786 memset(read_buf, 0, sizeof(read_buf));
787 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
788 boost::asio::transfer_exactly(42));
789 BOOST_ASIO_CHECK(bytes_transferred == 42);
790 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
791
792 s.reset(read_data, sizeof(read_data));
793 s.next_read_length(1);
794 memset(read_buf, 0, sizeof(read_buf));
795 bytes_transferred = boost::asio::read_at(s, 0, buffers,
796 boost::asio::transfer_exactly(42));
797 BOOST_ASIO_CHECK(bytes_transferred == 42);
798 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
799
800 s.reset(read_data, sizeof(read_data));
801 s.next_read_length(1);
802 memset(read_buf, 0, sizeof(read_buf));
803 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
804 boost::asio::transfer_exactly(42));
805 BOOST_ASIO_CHECK(bytes_transferred == 42);
806 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
807
808 s.reset(read_data, sizeof(read_data));
809 s.next_read_length(10);
810 memset(read_buf, 0, sizeof(read_buf));
811 bytes_transferred = boost::asio::read_at(s, 0, buffers,
812 boost::asio::transfer_exactly(42));
813 BOOST_ASIO_CHECK(bytes_transferred == 42);
814 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
815
816 s.reset(read_data, sizeof(read_data));
817 s.next_read_length(10);
818 memset(read_buf, 0, sizeof(read_buf));
819 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
820 boost::asio::transfer_exactly(42));
821 BOOST_ASIO_CHECK(bytes_transferred == 42);
822 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
823
824 s.reset(read_data, sizeof(read_data));
825 memset(read_buf, 0, sizeof(read_buf));
826 bytes_transferred = boost::asio::read_at(s, 0, buffers,
827 old_style_transfer_all);
828 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
829 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
830
831 s.reset(read_data, sizeof(read_data));
832 memset(read_buf, 0, sizeof(read_buf));
833 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
834 old_style_transfer_all);
835 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
836 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
837
838 s.reset(read_data, sizeof(read_data));
839 s.next_read_length(1);
840 memset(read_buf, 0, sizeof(read_buf));
841 bytes_transferred = boost::asio::read_at(s, 0, buffers,
842 old_style_transfer_all);
843 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
844 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
845
846 s.reset(read_data, sizeof(read_data));
847 s.next_read_length(1);
848 memset(read_buf, 0, sizeof(read_buf));
849 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
850 old_style_transfer_all);
851 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
852 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
853
854 s.reset(read_data, sizeof(read_data));
855 s.next_read_length(10);
856 memset(read_buf, 0, sizeof(read_buf));
857 bytes_transferred = boost::asio::read_at(s, 0, buffers,
858 old_style_transfer_all);
859 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
860 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
861
862 s.reset(read_data, sizeof(read_data));
863 s.next_read_length(10);
864 memset(read_buf, 0, sizeof(read_buf));
865 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
866 old_style_transfer_all);
867 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
868 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
869
870 s.reset(read_data, sizeof(read_data));
871 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 872 bytes_transferred = boost::asio::read_at(s, 0, buffers, short_transfer());
7c673cae
FG
873 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
874 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
875
876 s.reset(read_data, sizeof(read_data));
877 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 878 bytes_transferred = boost::asio::read_at(s, 1234, buffers, short_transfer());
7c673cae
FG
879 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
880 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
881
882 s.reset(read_data, sizeof(read_data));
883 s.next_read_length(1);
884 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 885 bytes_transferred = boost::asio::read_at(s, 0, buffers, short_transfer());
7c673cae
FG
886 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
887 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
888
889 s.reset(read_data, sizeof(read_data));
890 s.next_read_length(1);
891 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 892 bytes_transferred = boost::asio::read_at(s, 1234, buffers, short_transfer());
7c673cae
FG
893 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
894 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
895
896 s.reset(read_data, sizeof(read_data));
897 s.next_read_length(10);
898 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 899 bytes_transferred = boost::asio::read_at(s, 0, buffers, short_transfer());
7c673cae
FG
900 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
901 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
902
903 s.reset(read_data, sizeof(read_data));
904 s.next_read_length(10);
905 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 906 bytes_transferred = boost::asio::read_at(s, 1234, buffers, short_transfer());
7c673cae
FG
907 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
908 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
909}
910
911void test_4_arg_vector_buffers_read_at()
912{
b32b8144
FG
913 boost::asio::io_context ioc;
914 test_random_access_device s(ioc);
7c673cae
FG
915 char read_buf[sizeof(read_data)];
916 std::vector<boost::asio::mutable_buffer> buffers;
917 buffers.push_back(boost::asio::buffer(read_buf, 32));
918 buffers.push_back(boost::asio::buffer(read_buf) + 32);
919
920 s.reset(read_data, sizeof(read_data));
921 memset(read_buf, 0, sizeof(read_buf));
922 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers,
923 boost::asio::transfer_all());
924 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
925 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
926
927 s.reset(read_data, sizeof(read_data));
928 memset(read_buf, 0, sizeof(read_buf));
929 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
930 boost::asio::transfer_all());
931 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
932 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
933
934 s.reset(read_data, sizeof(read_data));
935 s.next_read_length(1);
936 memset(read_buf, 0, sizeof(read_buf));
937 bytes_transferred = boost::asio::read_at(s, 0, buffers,
938 boost::asio::transfer_all());
939 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
940 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
941
942 s.reset(read_data, sizeof(read_data));
943 s.next_read_length(1);
944 memset(read_buf, 0, sizeof(read_buf));
945 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
946 boost::asio::transfer_all());
947 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
948 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
949
950 s.reset(read_data, sizeof(read_data));
951 s.next_read_length(10);
952 memset(read_buf, 0, sizeof(read_buf));
953 bytes_transferred = boost::asio::read_at(s, 0, buffers,
954 boost::asio::transfer_all());
955 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
956 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
957
958 s.reset(read_data, sizeof(read_data));
959 s.next_read_length(10);
960 memset(read_buf, 0, sizeof(read_buf));
961 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
962 boost::asio::transfer_all());
963 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
964 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
965
966 s.reset(read_data, sizeof(read_data));
967 memset(read_buf, 0, sizeof(read_buf));
968 bytes_transferred = boost::asio::read_at(s, 0, buffers,
969 boost::asio::transfer_at_least(1));
970 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
971 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
972
973 s.reset(read_data, sizeof(read_data));
974 memset(read_buf, 0, sizeof(read_buf));
975 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
976 boost::asio::transfer_at_least(1));
977 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
978 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
979
980 s.reset(read_data, sizeof(read_data));
981 s.next_read_length(1);
982 memset(read_buf, 0, sizeof(read_buf));
983 bytes_transferred = boost::asio::read_at(s, 0, buffers,
984 boost::asio::transfer_at_least(1));
985 BOOST_ASIO_CHECK(bytes_transferred == 1);
986 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
987
988 s.reset(read_data, sizeof(read_data));
989 s.next_read_length(1);
990 memset(read_buf, 0, sizeof(read_buf));
991 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
992 boost::asio::transfer_at_least(1));
993 BOOST_ASIO_CHECK(bytes_transferred == 1);
994 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
995
996 s.reset(read_data, sizeof(read_data));
997 s.next_read_length(10);
998 memset(read_buf, 0, sizeof(read_buf));
999 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1000 boost::asio::transfer_at_least(1));
1001 BOOST_ASIO_CHECK(bytes_transferred == 10);
1002 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1003
1004 s.reset(read_data, sizeof(read_data));
1005 s.next_read_length(10);
1006 memset(read_buf, 0, sizeof(read_buf));
1007 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1008 boost::asio::transfer_at_least(1));
1009 BOOST_ASIO_CHECK(bytes_transferred == 10);
1010 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1011
1012 s.reset(read_data, sizeof(read_data));
1013 memset(read_buf, 0, sizeof(read_buf));
1014 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1015 boost::asio::transfer_at_least(10));
1016 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1017 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1018
1019 s.reset(read_data, sizeof(read_data));
1020 memset(read_buf, 0, sizeof(read_buf));
1021 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1022 boost::asio::transfer_at_least(10));
1023 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1024 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1025
1026 s.reset(read_data, sizeof(read_data));
1027 s.next_read_length(1);
1028 memset(read_buf, 0, sizeof(read_buf));
1029 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1030 boost::asio::transfer_at_least(10));
1031 BOOST_ASIO_CHECK(bytes_transferred == 10);
1032 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1033
1034 s.reset(read_data, sizeof(read_data));
1035 s.next_read_length(1);
1036 memset(read_buf, 0, sizeof(read_buf));
1037 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1038 boost::asio::transfer_at_least(10));
1039 BOOST_ASIO_CHECK(bytes_transferred == 10);
1040 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1041
1042 s.reset(read_data, sizeof(read_data));
1043 s.next_read_length(10);
1044 memset(read_buf, 0, sizeof(read_buf));
1045 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1046 boost::asio::transfer_at_least(10));
1047 BOOST_ASIO_CHECK(bytes_transferred == 10);
1048 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1049
1050 s.reset(read_data, sizeof(read_data));
1051 s.next_read_length(10);
1052 memset(read_buf, 0, sizeof(read_buf));
1053 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1054 boost::asio::transfer_at_least(10));
1055 BOOST_ASIO_CHECK(bytes_transferred == 10);
1056 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1057
1058 s.reset(read_data, sizeof(read_data));
1059 memset(read_buf, 0, sizeof(read_buf));
1060 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1061 boost::asio::transfer_at_least(42));
1062 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1063 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1064
1065 s.reset(read_data, sizeof(read_data));
1066 memset(read_buf, 0, sizeof(read_buf));
1067 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1068 boost::asio::transfer_at_least(42));
1069 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1070 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1071
1072 s.reset(read_data, sizeof(read_data));
1073 s.next_read_length(1);
1074 memset(read_buf, 0, sizeof(read_buf));
1075 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1076 boost::asio::transfer_at_least(42));
1077 BOOST_ASIO_CHECK(bytes_transferred == 42);
1078 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
1079
1080 s.reset(read_data, sizeof(read_data));
1081 s.next_read_length(1);
1082 memset(read_buf, 0, sizeof(read_buf));
1083 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1084 boost::asio::transfer_at_least(42));
1085 BOOST_ASIO_CHECK(bytes_transferred == 42);
1086 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
1087
1088 s.reset(read_data, sizeof(read_data));
1089 s.next_read_length(10);
1090 memset(read_buf, 0, sizeof(read_buf));
1091 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1092 boost::asio::transfer_at_least(42));
1093 BOOST_ASIO_CHECK(bytes_transferred == 50);
1094 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
1095
1096 s.reset(read_data, sizeof(read_data));
1097 s.next_read_length(10);
1098 memset(read_buf, 0, sizeof(read_buf));
1099 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1100 boost::asio::transfer_at_least(42));
1101 BOOST_ASIO_CHECK(bytes_transferred == 50);
1102 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
1103
1104 s.reset(read_data, sizeof(read_data));
1105 memset(read_buf, 0, sizeof(read_buf));
1106 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1107 boost::asio::transfer_exactly(1));
1108 BOOST_ASIO_CHECK(bytes_transferred == 1);
1109 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
1110
1111 s.reset(read_data, sizeof(read_data));
1112 memset(read_buf, 0, sizeof(read_buf));
1113 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1114 boost::asio::transfer_exactly(1));
1115 BOOST_ASIO_CHECK(bytes_transferred == 1);
1116 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
1117
1118 s.reset(read_data, sizeof(read_data));
1119 s.next_read_length(1);
1120 memset(read_buf, 0, sizeof(read_buf));
1121 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1122 boost::asio::transfer_exactly(1));
1123 BOOST_ASIO_CHECK(bytes_transferred == 1);
1124 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
1125
1126 s.reset(read_data, sizeof(read_data));
1127 s.next_read_length(1);
1128 memset(read_buf, 0, sizeof(read_buf));
1129 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1130 boost::asio::transfer_exactly(1));
1131 BOOST_ASIO_CHECK(bytes_transferred == 1);
1132 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
1133
1134 s.reset(read_data, sizeof(read_data));
1135 s.next_read_length(10);
1136 memset(read_buf, 0, sizeof(read_buf));
1137 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1138 boost::asio::transfer_exactly(1));
1139 BOOST_ASIO_CHECK(bytes_transferred == 1);
1140 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
1141
1142 s.reset(read_data, sizeof(read_data));
1143 s.next_read_length(10);
1144 memset(read_buf, 0, sizeof(read_buf));
1145 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1146 boost::asio::transfer_exactly(1));
1147 BOOST_ASIO_CHECK(bytes_transferred == 1);
1148 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
1149
1150 s.reset(read_data, sizeof(read_data));
1151 memset(read_buf, 0, sizeof(read_buf));
1152 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1153 boost::asio::transfer_exactly(10));
1154 BOOST_ASIO_CHECK(bytes_transferred == 10);
1155 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1156
1157 s.reset(read_data, sizeof(read_data));
1158 memset(read_buf, 0, sizeof(read_buf));
1159 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1160 boost::asio::transfer_exactly(10));
1161 BOOST_ASIO_CHECK(bytes_transferred == 10);
1162 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1163
1164 s.reset(read_data, sizeof(read_data));
1165 s.next_read_length(1);
1166 memset(read_buf, 0, sizeof(read_buf));
1167 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1168 boost::asio::transfer_exactly(10));
1169 BOOST_ASIO_CHECK(bytes_transferred == 10);
1170 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1171
1172 s.reset(read_data, sizeof(read_data));
1173 s.next_read_length(1);
1174 memset(read_buf, 0, sizeof(read_buf));
1175 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1176 boost::asio::transfer_exactly(10));
1177 BOOST_ASIO_CHECK(bytes_transferred == 10);
1178 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1179
1180 s.reset(read_data, sizeof(read_data));
1181 s.next_read_length(10);
1182 memset(read_buf, 0, sizeof(read_buf));
1183 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1184 boost::asio::transfer_exactly(10));
1185 BOOST_ASIO_CHECK(bytes_transferred == 10);
1186 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1187
1188 s.reset(read_data, sizeof(read_data));
1189 s.next_read_length(10);
1190 memset(read_buf, 0, sizeof(read_buf));
1191 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1192 boost::asio::transfer_exactly(10));
1193 BOOST_ASIO_CHECK(bytes_transferred == 10);
1194 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1195
1196 s.reset(read_data, sizeof(read_data));
1197 memset(read_buf, 0, sizeof(read_buf));
1198 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1199 boost::asio::transfer_exactly(42));
1200 BOOST_ASIO_CHECK(bytes_transferred == 42);
1201 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
1202
1203 s.reset(read_data, sizeof(read_data));
1204 memset(read_buf, 0, sizeof(read_buf));
1205 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1206 boost::asio::transfer_exactly(42));
1207 BOOST_ASIO_CHECK(bytes_transferred == 42);
1208 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
1209
1210 s.reset(read_data, sizeof(read_data));
1211 s.next_read_length(1);
1212 memset(read_buf, 0, sizeof(read_buf));
1213 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1214 boost::asio::transfer_exactly(42));
1215 BOOST_ASIO_CHECK(bytes_transferred == 42);
1216 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
1217
1218 s.reset(read_data, sizeof(read_data));
1219 s.next_read_length(1);
1220 memset(read_buf, 0, sizeof(read_buf));
1221 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1222 boost::asio::transfer_exactly(42));
1223 BOOST_ASIO_CHECK(bytes_transferred == 42);
1224 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
1225
1226 s.reset(read_data, sizeof(read_data));
1227 s.next_read_length(10);
1228 memset(read_buf, 0, sizeof(read_buf));
1229 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1230 boost::asio::transfer_exactly(42));
1231 BOOST_ASIO_CHECK(bytes_transferred == 42);
1232 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
1233
1234 s.reset(read_data, sizeof(read_data));
1235 s.next_read_length(10);
1236 memset(read_buf, 0, sizeof(read_buf));
1237 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1238 boost::asio::transfer_exactly(42));
1239 BOOST_ASIO_CHECK(bytes_transferred == 42);
1240 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
1241
1242 s.reset(read_data, sizeof(read_data));
1243 memset(read_buf, 0, sizeof(read_buf));
1244 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1245 old_style_transfer_all);
1246 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1247 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1248
1249 s.reset(read_data, sizeof(read_data));
1250 memset(read_buf, 0, sizeof(read_buf));
1251 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1252 old_style_transfer_all);
1253 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1254 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1255
1256 s.reset(read_data, sizeof(read_data));
1257 s.next_read_length(1);
1258 memset(read_buf, 0, sizeof(read_buf));
1259 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1260 old_style_transfer_all);
1261 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1262 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1263
1264 s.reset(read_data, sizeof(read_data));
1265 s.next_read_length(1);
1266 memset(read_buf, 0, sizeof(read_buf));
1267 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1268 old_style_transfer_all);
1269 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1270 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1271
1272 s.reset(read_data, sizeof(read_data));
1273 s.next_read_length(10);
1274 memset(read_buf, 0, sizeof(read_buf));
1275 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1276 old_style_transfer_all);
1277 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1278 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1279
1280 s.reset(read_data, sizeof(read_data));
1281 s.next_read_length(10);
1282 memset(read_buf, 0, sizeof(read_buf));
1283 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1284 old_style_transfer_all);
1285 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1286 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1287
1288 s.reset(read_data, sizeof(read_data));
1289 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 1290 bytes_transferred = boost::asio::read_at(s, 0, buffers, short_transfer());
7c673cae
FG
1291 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1292 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1293
1294 s.reset(read_data, sizeof(read_data));
1295 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 1296 bytes_transferred = boost::asio::read_at(s, 1234, buffers, short_transfer());
7c673cae
FG
1297 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1298 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1299
1300 s.reset(read_data, sizeof(read_data));
1301 s.next_read_length(1);
1302 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 1303 bytes_transferred = boost::asio::read_at(s, 0, buffers, short_transfer());
7c673cae
FG
1304 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1305 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1306
1307 s.reset(read_data, sizeof(read_data));
1308 s.next_read_length(1);
1309 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 1310 bytes_transferred = boost::asio::read_at(s, 1234, buffers, short_transfer());
7c673cae
FG
1311 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1312 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1313
1314 s.reset(read_data, sizeof(read_data));
1315 s.next_read_length(10);
1316 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 1317 bytes_transferred = boost::asio::read_at(s, 0, buffers, short_transfer());
7c673cae
FG
1318 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1319 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1320
1321 s.reset(read_data, sizeof(read_data));
1322 s.next_read_length(10);
1323 memset(read_buf, 0, sizeof(read_buf));
92f5a8d4 1324 bytes_transferred = boost::asio::read_at(s, 1234, buffers, short_transfer());
7c673cae
FG
1325 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1326 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1327}
1328
1329void test_4_arg_streambuf_read_at()
1330{
b32b8144
FG
1331 boost::asio::io_context ioc;
1332 test_random_access_device s(ioc);
7c673cae
FG
1333 boost::asio::streambuf sb(sizeof(read_data));
1334
1335 s.reset(read_data, sizeof(read_data));
1336 sb.consume(sb.size());
1337 size_t bytes_transferred = boost::asio::read_at(s, 0, sb,
1338 boost::asio::transfer_all());
1339 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1340 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1341 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1342
1343 s.reset(read_data, sizeof(read_data));
1344 sb.consume(sb.size());
1345 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1346 boost::asio::transfer_all());
1347 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1348 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1349 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1350
1351 s.reset(read_data, sizeof(read_data));
1352 s.next_read_length(1);
1353 sb.consume(sb.size());
1354 bytes_transferred = boost::asio::read_at(s, 0, sb,
1355 boost::asio::transfer_all());
1356 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1357 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1358 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1359
1360 s.reset(read_data, sizeof(read_data));
1361 s.next_read_length(1);
1362 sb.consume(sb.size());
1363 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1364 boost::asio::transfer_all());
1365 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1366 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1367 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1368
1369 s.reset(read_data, sizeof(read_data));
1370 s.next_read_length(10);
1371 sb.consume(sb.size());
1372 bytes_transferred = boost::asio::read_at(s, 0, sb,
1373 boost::asio::transfer_all());
1374 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1375 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1376 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1377
1378 s.reset(read_data, sizeof(read_data));
1379 s.next_read_length(10);
1380 sb.consume(sb.size());
1381 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1382 boost::asio::transfer_all());
1383 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1384 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1385 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1386
1387 s.reset(read_data, sizeof(read_data));
1388 sb.consume(sb.size());
1389 bytes_transferred = boost::asio::read_at(s, 0, sb,
1390 boost::asio::transfer_at_least(1));
1391 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1392 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1393 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1394
1395 s.reset(read_data, sizeof(read_data));
1396 sb.consume(sb.size());
1397 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1398 boost::asio::transfer_at_least(1));
1399 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1400 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1401 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1402
1403 s.reset(read_data, sizeof(read_data));
1404 s.next_read_length(1);
1405 sb.consume(sb.size());
1406 bytes_transferred = boost::asio::read_at(s, 0, sb,
1407 boost::asio::transfer_at_least(1));
1408 BOOST_ASIO_CHECK(bytes_transferred == 1);
1409 BOOST_ASIO_CHECK(sb.size() == 1);
1410 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
1411
1412 s.reset(read_data, sizeof(read_data));
1413 s.next_read_length(1);
1414 sb.consume(sb.size());
1415 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1416 boost::asio::transfer_at_least(1));
1417 BOOST_ASIO_CHECK(bytes_transferred == 1);
1418 BOOST_ASIO_CHECK(sb.size() == 1);
1419 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
1420
1421 s.reset(read_data, sizeof(read_data));
1422 s.next_read_length(10);
1423 sb.consume(sb.size());
1424 bytes_transferred = boost::asio::read_at(s, 0, sb,
1425 boost::asio::transfer_at_least(1));
1426 BOOST_ASIO_CHECK(bytes_transferred == 10);
1427 BOOST_ASIO_CHECK(sb.size() == 10);
1428 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
1429
1430 s.reset(read_data, sizeof(read_data));
1431 s.next_read_length(10);
1432 sb.consume(sb.size());
1433 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1434 boost::asio::transfer_at_least(1));
1435 BOOST_ASIO_CHECK(bytes_transferred == 10);
1436 BOOST_ASIO_CHECK(sb.size() == 10);
1437 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
1438
1439 s.reset(read_data, sizeof(read_data));
1440 sb.consume(sb.size());
1441 bytes_transferred = boost::asio::read_at(s, 0, sb,
1442 boost::asio::transfer_at_least(10));
1443 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1444 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1445 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1446
1447 s.reset(read_data, sizeof(read_data));
1448 sb.consume(sb.size());
1449 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1450 boost::asio::transfer_at_least(10));
1451 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1452 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1453 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1454
1455 s.reset(read_data, sizeof(read_data));
1456 s.next_read_length(1);
1457 sb.consume(sb.size());
1458 bytes_transferred = boost::asio::read_at(s, 0, sb,
1459 boost::asio::transfer_at_least(10));
1460 BOOST_ASIO_CHECK(bytes_transferred == 10);
1461 BOOST_ASIO_CHECK(sb.size() == 10);
1462 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
1463
1464 s.reset(read_data, sizeof(read_data));
1465 s.next_read_length(1);
1466 sb.consume(sb.size());
1467 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1468 boost::asio::transfer_at_least(10));
1469 BOOST_ASIO_CHECK(bytes_transferred == 10);
1470 BOOST_ASIO_CHECK(sb.size() == 10);
1471 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
1472
1473 s.reset(read_data, sizeof(read_data));
1474 s.next_read_length(10);
1475 sb.consume(sb.size());
1476 bytes_transferred = boost::asio::read_at(s, 0, sb,
1477 boost::asio::transfer_at_least(10));
1478 BOOST_ASIO_CHECK(bytes_transferred == 10);
1479 BOOST_ASIO_CHECK(sb.size() == 10);
1480 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
1481
1482 s.reset(read_data, sizeof(read_data));
1483 s.next_read_length(10);
1484 sb.consume(sb.size());
1485 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1486 boost::asio::transfer_at_least(10));
1487 BOOST_ASIO_CHECK(bytes_transferred == 10);
1488 BOOST_ASIO_CHECK(sb.size() == 10);
1489 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
1490
1491 s.reset(read_data, sizeof(read_data));
1492 sb.consume(sb.size());
1493 bytes_transferred = boost::asio::read_at(s, 0, sb,
1494 boost::asio::transfer_at_least(42));
1495 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1496 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1497 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1498
1499 s.reset(read_data, sizeof(read_data));
1500 sb.consume(sb.size());
1501 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1502 boost::asio::transfer_at_least(42));
1503 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1504 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1505 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1506
1507 s.reset(read_data, sizeof(read_data));
1508 s.next_read_length(1);
1509 sb.consume(sb.size());
1510 bytes_transferred = boost::asio::read_at(s, 0, sb,
1511 boost::asio::transfer_at_least(42));
1512 BOOST_ASIO_CHECK(bytes_transferred == 42);
1513 BOOST_ASIO_CHECK(sb.size() == 42);
1514 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
1515
1516 s.reset(read_data, sizeof(read_data));
1517 s.next_read_length(1);
1518 sb.consume(sb.size());
1519 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1520 boost::asio::transfer_at_least(42));
1521 BOOST_ASIO_CHECK(bytes_transferred == 42);
1522 BOOST_ASIO_CHECK(sb.size() == 42);
1523 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
1524
1525 s.reset(read_data, sizeof(read_data));
1526 s.next_read_length(10);
1527 sb.consume(sb.size());
1528 bytes_transferred = boost::asio::read_at(s, 0, sb,
1529 boost::asio::transfer_at_least(42));
1530 BOOST_ASIO_CHECK(bytes_transferred == 50);
1531 BOOST_ASIO_CHECK(sb.size() == 50);
1532 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 50));
1533
1534 s.reset(read_data, sizeof(read_data));
1535 s.next_read_length(10);
1536 sb.consume(sb.size());
1537 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1538 boost::asio::transfer_at_least(42));
1539 BOOST_ASIO_CHECK(bytes_transferred == 50);
1540 BOOST_ASIO_CHECK(sb.size() == 50);
1541 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 50));
1542
1543 s.reset(read_data, sizeof(read_data));
1544 sb.consume(sb.size());
1545 bytes_transferred = boost::asio::read_at(s, 0, sb,
1546 boost::asio::transfer_exactly(1));
1547 BOOST_ASIO_CHECK(bytes_transferred == 1);
1548 BOOST_ASIO_CHECK(sb.size() == 1);
1549 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
1550
1551 s.reset(read_data, sizeof(read_data));
1552 sb.consume(sb.size());
1553 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1554 boost::asio::transfer_exactly(1));
1555 BOOST_ASIO_CHECK(bytes_transferred == 1);
1556 BOOST_ASIO_CHECK(sb.size() == 1);
1557 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
1558
1559 s.reset(read_data, sizeof(read_data));
1560 s.next_read_length(1);
1561 sb.consume(sb.size());
1562 bytes_transferred = boost::asio::read_at(s, 0, sb,
1563 boost::asio::transfer_exactly(1));
1564 BOOST_ASIO_CHECK(bytes_transferred == 1);
1565 BOOST_ASIO_CHECK(sb.size() == 1);
1566 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
1567
1568 s.reset(read_data, sizeof(read_data));
1569 s.next_read_length(1);
1570 sb.consume(sb.size());
1571 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1572 boost::asio::transfer_exactly(1));
1573 BOOST_ASIO_CHECK(bytes_transferred == 1);
1574 BOOST_ASIO_CHECK(sb.size() == 1);
1575 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
1576
1577 s.reset(read_data, sizeof(read_data));
1578 s.next_read_length(10);
1579 sb.consume(sb.size());
1580 bytes_transferred = boost::asio::read_at(s, 0, sb,
1581 boost::asio::transfer_exactly(1));
1582 BOOST_ASIO_CHECK(bytes_transferred == 1);
1583 BOOST_ASIO_CHECK(sb.size() == 1);
1584 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
1585
1586 s.reset(read_data, sizeof(read_data));
1587 s.next_read_length(10);
1588 sb.consume(sb.size());
1589 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1590 boost::asio::transfer_exactly(1));
1591 BOOST_ASIO_CHECK(bytes_transferred == 1);
1592 BOOST_ASIO_CHECK(sb.size() == 1);
1593 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
1594
1595 s.reset(read_data, sizeof(read_data));
1596 sb.consume(sb.size());
1597 bytes_transferred = boost::asio::read_at(s, 0, sb,
1598 boost::asio::transfer_exactly(10));
1599 BOOST_ASIO_CHECK(bytes_transferred == 10);
1600 BOOST_ASIO_CHECK(sb.size() == 10);
1601 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
1602
1603 s.reset(read_data, sizeof(read_data));
1604 sb.consume(sb.size());
1605 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1606 boost::asio::transfer_exactly(10));
1607 BOOST_ASIO_CHECK(bytes_transferred == 10);
1608 BOOST_ASIO_CHECK(sb.size() == 10);
1609 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
1610
1611 s.reset(read_data, sizeof(read_data));
1612 s.next_read_length(1);
1613 sb.consume(sb.size());
1614 bytes_transferred = boost::asio::read_at(s, 0, sb,
1615 boost::asio::transfer_exactly(10));
1616 BOOST_ASIO_CHECK(bytes_transferred == 10);
1617 BOOST_ASIO_CHECK(sb.size() == 10);
1618 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
1619
1620 s.reset(read_data, sizeof(read_data));
1621 s.next_read_length(1);
1622 sb.consume(sb.size());
1623 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1624 boost::asio::transfer_exactly(10));
1625 BOOST_ASIO_CHECK(bytes_transferred == 10);
1626 BOOST_ASIO_CHECK(sb.size() == 10);
1627 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
1628
1629 s.reset(read_data, sizeof(read_data));
1630 s.next_read_length(10);
1631 sb.consume(sb.size());
1632 bytes_transferred = boost::asio::read_at(s, 0, sb,
1633 boost::asio::transfer_exactly(10));
1634 BOOST_ASIO_CHECK(bytes_transferred == 10);
1635 BOOST_ASIO_CHECK(sb.size() == 10);
1636 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
1637
1638 s.reset(read_data, sizeof(read_data));
1639 s.next_read_length(10);
1640 sb.consume(sb.size());
1641 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1642 boost::asio::transfer_exactly(10));
1643 BOOST_ASIO_CHECK(bytes_transferred == 10);
1644 BOOST_ASIO_CHECK(sb.size() == 10);
1645 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
1646
1647 s.reset(read_data, sizeof(read_data));
1648 sb.consume(sb.size());
1649 bytes_transferred = boost::asio::read_at(s, 0, sb,
1650 boost::asio::transfer_exactly(42));
1651 BOOST_ASIO_CHECK(bytes_transferred == 42);
1652 BOOST_ASIO_CHECK(sb.size() == 42);
1653 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
1654
1655 s.reset(read_data, sizeof(read_data));
1656 sb.consume(sb.size());
1657 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1658 boost::asio::transfer_exactly(42));
1659 BOOST_ASIO_CHECK(bytes_transferred == 42);
1660 BOOST_ASIO_CHECK(sb.size() == 42);
1661 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
1662
1663 s.reset(read_data, sizeof(read_data));
1664 s.next_read_length(1);
1665 sb.consume(sb.size());
1666 bytes_transferred = boost::asio::read_at(s, 0, sb,
1667 boost::asio::transfer_exactly(42));
1668 BOOST_ASIO_CHECK(bytes_transferred == 42);
1669 BOOST_ASIO_CHECK(sb.size() == 42);
1670 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
1671
1672 s.reset(read_data, sizeof(read_data));
1673 s.next_read_length(1);
1674 sb.consume(sb.size());
1675 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1676 boost::asio::transfer_exactly(42));
1677 BOOST_ASIO_CHECK(bytes_transferred == 42);
1678 BOOST_ASIO_CHECK(sb.size() == 42);
1679 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
1680
1681 s.reset(read_data, sizeof(read_data));
1682 s.next_read_length(10);
1683 sb.consume(sb.size());
1684 bytes_transferred = boost::asio::read_at(s, 0, sb,
1685 boost::asio::transfer_exactly(42));
1686 BOOST_ASIO_CHECK(bytes_transferred == 42);
1687 BOOST_ASIO_CHECK(sb.size() == 42);
1688 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
1689
1690 s.reset(read_data, sizeof(read_data));
1691 s.next_read_length(10);
1692 sb.consume(sb.size());
1693 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1694 boost::asio::transfer_exactly(42));
1695 BOOST_ASIO_CHECK(bytes_transferred == 42);
1696 BOOST_ASIO_CHECK(sb.size() == 42);
1697 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
1698
1699 s.reset(read_data, sizeof(read_data));
1700 sb.consume(sb.size());
1701 bytes_transferred = boost::asio::read_at(s, 0, sb,
1702 old_style_transfer_all);
1703 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1704 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1705 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1706
1707 s.reset(read_data, sizeof(read_data));
1708 sb.consume(sb.size());
1709 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1710 old_style_transfer_all);
1711 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1712 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1713 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1714
1715 s.reset(read_data, sizeof(read_data));
1716 s.next_read_length(1);
1717 sb.consume(sb.size());
1718 bytes_transferred = boost::asio::read_at(s, 0, sb,
1719 old_style_transfer_all);
1720 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1721 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1722 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1723
1724 s.reset(read_data, sizeof(read_data));
1725 s.next_read_length(1);
1726 sb.consume(sb.size());
1727 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1728 old_style_transfer_all);
1729 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1730 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1731 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1732
1733 s.reset(read_data, sizeof(read_data));
1734 s.next_read_length(10);
1735 sb.consume(sb.size());
1736 bytes_transferred = boost::asio::read_at(s, 0, sb,
1737 old_style_transfer_all);
1738 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1739 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1740 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1741
1742 s.reset(read_data, sizeof(read_data));
1743 s.next_read_length(10);
1744 sb.consume(sb.size());
1745 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1746 old_style_transfer_all);
1747 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1748 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1749 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1750
1751 s.reset(read_data, sizeof(read_data));
1752 sb.consume(sb.size());
92f5a8d4 1753 bytes_transferred = boost::asio::read_at(s, 0, sb, short_transfer());
7c673cae
FG
1754 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1755 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1756 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1757
1758 s.reset(read_data, sizeof(read_data));
1759 sb.consume(sb.size());
92f5a8d4 1760 bytes_transferred = boost::asio::read_at(s, 1234, sb, short_transfer());
7c673cae
FG
1761 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1762 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1763 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1764
1765 s.reset(read_data, sizeof(read_data));
1766 s.next_read_length(1);
1767 sb.consume(sb.size());
92f5a8d4 1768 bytes_transferred = boost::asio::read_at(s, 0, sb, short_transfer());
7c673cae
FG
1769 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1770 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1771 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1772
1773 s.reset(read_data, sizeof(read_data));
1774 s.next_read_length(1);
1775 sb.consume(sb.size());
92f5a8d4 1776 bytes_transferred = boost::asio::read_at(s, 1234, sb, short_transfer());
7c673cae
FG
1777 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1778 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1779 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1780
1781 s.reset(read_data, sizeof(read_data));
1782 s.next_read_length(10);
1783 sb.consume(sb.size());
92f5a8d4 1784 bytes_transferred = boost::asio::read_at(s, 0, sb, short_transfer());
7c673cae
FG
1785 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1786 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1787 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1788
1789 s.reset(read_data, sizeof(read_data));
1790 s.next_read_length(10);
1791 sb.consume(sb.size());
92f5a8d4 1792 bytes_transferred = boost::asio::read_at(s, 1234, sb, short_transfer());
7c673cae
FG
1793 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1794 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1795 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1796}
1797
b32b8144 1798void test_5_arg_mutable_buffer_read_at()
7c673cae 1799{
b32b8144
FG
1800 boost::asio::io_context ioc;
1801 test_random_access_device s(ioc);
7c673cae 1802 char read_buf[sizeof(read_data)];
b32b8144 1803 boost::asio::mutable_buffer buffers
7c673cae
FG
1804 = boost::asio::buffer(read_buf, sizeof(read_buf));
1805
1806 s.reset(read_data, sizeof(read_data));
1807 memset(read_buf, 0, sizeof(read_buf));
1808 boost::system::error_code error;
1809 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers,
1810 boost::asio::transfer_all(), error);
1811 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1812 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1813 BOOST_ASIO_CHECK(!error);
1814
1815 s.reset(read_data, sizeof(read_data));
1816 memset(read_buf, 0, sizeof(read_buf));
1817 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1818 boost::asio::transfer_all(), error);
1819 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1820 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1821 BOOST_ASIO_CHECK(!error);
1822
1823 s.reset(read_data, sizeof(read_data));
1824 s.next_read_length(1);
1825 memset(read_buf, 0, sizeof(read_buf));
1826 error = boost::system::error_code();
1827 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1828 boost::asio::transfer_all(), error);
1829 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1830 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1831 BOOST_ASIO_CHECK(!error);
1832
1833 s.reset(read_data, sizeof(read_data));
1834 s.next_read_length(1);
1835 memset(read_buf, 0, sizeof(read_buf));
1836 error = boost::system::error_code();
1837 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1838 boost::asio::transfer_all(), error);
1839 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1840 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1841 BOOST_ASIO_CHECK(!error);
1842
1843 s.reset(read_data, sizeof(read_data));
1844 s.next_read_length(10);
1845 memset(read_buf, 0, sizeof(read_buf));
1846 error = boost::system::error_code();
1847 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1848 boost::asio::transfer_all(), error);
1849 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1850 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1851 BOOST_ASIO_CHECK(!error);
1852
1853 s.reset(read_data, sizeof(read_data));
1854 s.next_read_length(10);
1855 memset(read_buf, 0, sizeof(read_buf));
1856 error = boost::system::error_code();
1857 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1858 boost::asio::transfer_all(), error);
1859 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1860 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1861 BOOST_ASIO_CHECK(!error);
1862
1863 s.reset(read_data, sizeof(read_data));
1864 memset(read_buf, 0, sizeof(read_buf));
1865 error = boost::system::error_code();
1866 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1867 boost::asio::transfer_at_least(1), error);
1868 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1869 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1870 BOOST_ASIO_CHECK(!error);
1871
1872 s.reset(read_data, sizeof(read_data));
1873 memset(read_buf, 0, sizeof(read_buf));
1874 error = boost::system::error_code();
1875 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1876 boost::asio::transfer_at_least(1), error);
1877 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1878 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1879 BOOST_ASIO_CHECK(!error);
1880
1881 s.reset(read_data, sizeof(read_data));
1882 s.next_read_length(1);
1883 memset(read_buf, 0, sizeof(read_buf));
1884 error = boost::system::error_code();
1885 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1886 boost::asio::transfer_at_least(1), error);
1887 BOOST_ASIO_CHECK(bytes_transferred == 1);
1888 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
1889 BOOST_ASIO_CHECK(!error);
1890
1891 s.reset(read_data, sizeof(read_data));
1892 s.next_read_length(1);
1893 memset(read_buf, 0, sizeof(read_buf));
1894 error = boost::system::error_code();
1895 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1896 boost::asio::transfer_at_least(1), error);
1897 BOOST_ASIO_CHECK(bytes_transferred == 1);
1898 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
1899 BOOST_ASIO_CHECK(!error);
1900
1901 s.reset(read_data, sizeof(read_data));
1902 s.next_read_length(10);
1903 memset(read_buf, 0, sizeof(read_buf));
1904 error = boost::system::error_code();
1905 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1906 boost::asio::transfer_at_least(1), error);
1907 BOOST_ASIO_CHECK(bytes_transferred == 10);
1908 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1909 BOOST_ASIO_CHECK(!error);
1910
1911 s.reset(read_data, sizeof(read_data));
1912 s.next_read_length(10);
1913 memset(read_buf, 0, sizeof(read_buf));
1914 error = boost::system::error_code();
1915 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1916 boost::asio::transfer_at_least(1), error);
1917 BOOST_ASIO_CHECK(bytes_transferred == 10);
1918 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1919 BOOST_ASIO_CHECK(!error);
1920
1921 s.reset(read_data, sizeof(read_data));
1922 memset(read_buf, 0, sizeof(read_buf));
1923 error = boost::system::error_code();
1924 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1925 boost::asio::transfer_at_least(10), error);
1926 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1927 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1928 BOOST_ASIO_CHECK(!error);
1929
1930 s.reset(read_data, sizeof(read_data));
1931 memset(read_buf, 0, sizeof(read_buf));
1932 error = boost::system::error_code();
1933 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1934 boost::asio::transfer_at_least(10), error);
1935 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1936 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1937 BOOST_ASIO_CHECK(!error);
1938
1939 s.reset(read_data, sizeof(read_data));
1940 s.next_read_length(1);
1941 memset(read_buf, 0, sizeof(read_buf));
1942 error = boost::system::error_code();
1943 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1944 boost::asio::transfer_at_least(10), error);
1945 BOOST_ASIO_CHECK(bytes_transferred == 10);
1946 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1947 BOOST_ASIO_CHECK(!error);
1948
1949 s.reset(read_data, sizeof(read_data));
1950 s.next_read_length(1);
1951 memset(read_buf, 0, sizeof(read_buf));
1952 error = boost::system::error_code();
1953 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1954 boost::asio::transfer_at_least(10), error);
1955 BOOST_ASIO_CHECK(bytes_transferred == 10);
1956 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1957 BOOST_ASIO_CHECK(!error);
1958
1959 s.reset(read_data, sizeof(read_data));
1960 s.next_read_length(10);
1961 memset(read_buf, 0, sizeof(read_buf));
1962 error = boost::system::error_code();
1963 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1964 boost::asio::transfer_at_least(10), error);
1965 BOOST_ASIO_CHECK(bytes_transferred == 10);
1966 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1967 BOOST_ASIO_CHECK(!error);
1968
1969 s.reset(read_data, sizeof(read_data));
1970 s.next_read_length(10);
1971 memset(read_buf, 0, sizeof(read_buf));
1972 error = boost::system::error_code();
1973 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1974 boost::asio::transfer_at_least(10), error);
1975 BOOST_ASIO_CHECK(bytes_transferred == 10);
1976 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1977 BOOST_ASIO_CHECK(!error);
1978
1979 s.reset(read_data, sizeof(read_data));
1980 memset(read_buf, 0, sizeof(read_buf));
1981 error = boost::system::error_code();
1982 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1983 boost::asio::transfer_at_least(42), error);
1984 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1985 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1986 BOOST_ASIO_CHECK(!error);
1987
1988 s.reset(read_data, sizeof(read_data));
1989 memset(read_buf, 0, sizeof(read_buf));
1990 error = boost::system::error_code();
1991 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1992 boost::asio::transfer_at_least(42), error);
1993 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1994 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1995 BOOST_ASIO_CHECK(!error);
1996
1997 s.reset(read_data, sizeof(read_data));
1998 s.next_read_length(1);
1999 memset(read_buf, 0, sizeof(read_buf));
2000 error = boost::system::error_code();
2001 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2002 boost::asio::transfer_at_least(42), error);
2003 BOOST_ASIO_CHECK(bytes_transferred == 42);
2004 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
2005 BOOST_ASIO_CHECK(!error);
2006
2007 s.reset(read_data, sizeof(read_data));
2008 s.next_read_length(1);
2009 memset(read_buf, 0, sizeof(read_buf));
2010 error = boost::system::error_code();
2011 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2012 boost::asio::transfer_at_least(42), error);
2013 BOOST_ASIO_CHECK(bytes_transferred == 42);
2014 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
2015 BOOST_ASIO_CHECK(!error);
2016
2017 s.reset(read_data, sizeof(read_data));
2018 s.next_read_length(10);
2019 memset(read_buf, 0, sizeof(read_buf));
2020 error = boost::system::error_code();
2021 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2022 boost::asio::transfer_at_least(42), error);
2023 BOOST_ASIO_CHECK(bytes_transferred == 50);
2024 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
2025 BOOST_ASIO_CHECK(!error);
2026
2027 s.reset(read_data, sizeof(read_data));
2028 s.next_read_length(10);
2029 memset(read_buf, 0, sizeof(read_buf));
2030 error = boost::system::error_code();
2031 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2032 boost::asio::transfer_at_least(42), error);
2033 BOOST_ASIO_CHECK(bytes_transferred == 50);
2034 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
2035 BOOST_ASIO_CHECK(!error);
2036
2037 s.reset(read_data, sizeof(read_data));
2038 memset(read_buf, 0, sizeof(read_buf));
2039 error = boost::system::error_code();
2040 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2041 boost::asio::transfer_exactly(1), error);
2042 BOOST_ASIO_CHECK(bytes_transferred == 1);
2043 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
2044 BOOST_ASIO_CHECK(!error);
2045
2046 s.reset(read_data, sizeof(read_data));
2047 memset(read_buf, 0, sizeof(read_buf));
2048 error = boost::system::error_code();
2049 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2050 boost::asio::transfer_exactly(1), error);
2051 BOOST_ASIO_CHECK(bytes_transferred == 1);
2052 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
2053 BOOST_ASIO_CHECK(!error);
2054
2055 s.reset(read_data, sizeof(read_data));
2056 s.next_read_length(1);
2057 memset(read_buf, 0, sizeof(read_buf));
2058 error = boost::system::error_code();
2059 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2060 boost::asio::transfer_exactly(1), error);
2061 BOOST_ASIO_CHECK(bytes_transferred == 1);
2062 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
2063 BOOST_ASIO_CHECK(!error);
2064
2065 s.reset(read_data, sizeof(read_data));
2066 s.next_read_length(1);
2067 memset(read_buf, 0, sizeof(read_buf));
2068 error = boost::system::error_code();
2069 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2070 boost::asio::transfer_exactly(1), error);
2071 BOOST_ASIO_CHECK(bytes_transferred == 1);
2072 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
2073 BOOST_ASIO_CHECK(!error);
2074
2075 s.reset(read_data, sizeof(read_data));
2076 s.next_read_length(10);
2077 memset(read_buf, 0, sizeof(read_buf));
2078 error = boost::system::error_code();
2079 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2080 boost::asio::transfer_exactly(1), error);
2081 BOOST_ASIO_CHECK(bytes_transferred == 1);
2082 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
2083 BOOST_ASIO_CHECK(!error);
2084
2085 s.reset(read_data, sizeof(read_data));
2086 s.next_read_length(10);
2087 memset(read_buf, 0, sizeof(read_buf));
2088 error = boost::system::error_code();
2089 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2090 boost::asio::transfer_exactly(1), error);
2091 BOOST_ASIO_CHECK(bytes_transferred == 1);
2092 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
2093 BOOST_ASIO_CHECK(!error);
2094
2095 s.reset(read_data, sizeof(read_data));
2096 memset(read_buf, 0, sizeof(read_buf));
2097 error = boost::system::error_code();
2098 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2099 boost::asio::transfer_exactly(10), error);
2100 BOOST_ASIO_CHECK(bytes_transferred == 10);
2101 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2102 BOOST_ASIO_CHECK(!error);
2103
2104 s.reset(read_data, sizeof(read_data));
2105 memset(read_buf, 0, sizeof(read_buf));
2106 error = boost::system::error_code();
2107 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2108 boost::asio::transfer_exactly(10), error);
2109 BOOST_ASIO_CHECK(bytes_transferred == 10);
2110 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2111 BOOST_ASIO_CHECK(!error);
2112
2113 s.reset(read_data, sizeof(read_data));
2114 s.next_read_length(1);
2115 memset(read_buf, 0, sizeof(read_buf));
2116 error = boost::system::error_code();
2117 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2118 boost::asio::transfer_exactly(10), error);
2119 BOOST_ASIO_CHECK(bytes_transferred == 10);
2120 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2121 BOOST_ASIO_CHECK(!error);
2122
2123 s.reset(read_data, sizeof(read_data));
2124 s.next_read_length(1);
2125 memset(read_buf, 0, sizeof(read_buf));
2126 error = boost::system::error_code();
2127 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2128 boost::asio::transfer_exactly(10), error);
2129 BOOST_ASIO_CHECK(bytes_transferred == 10);
2130 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2131 BOOST_ASIO_CHECK(!error);
2132
2133 s.reset(read_data, sizeof(read_data));
2134 s.next_read_length(10);
2135 memset(read_buf, 0, sizeof(read_buf));
2136 error = boost::system::error_code();
2137 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2138 boost::asio::transfer_exactly(10), error);
2139 BOOST_ASIO_CHECK(bytes_transferred == 10);
2140 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2141 BOOST_ASIO_CHECK(!error);
2142
2143 s.reset(read_data, sizeof(read_data));
2144 s.next_read_length(10);
2145 memset(read_buf, 0, sizeof(read_buf));
2146 error = boost::system::error_code();
2147 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2148 boost::asio::transfer_exactly(10), error);
2149 BOOST_ASIO_CHECK(bytes_transferred == 10);
2150 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2151 BOOST_ASIO_CHECK(!error);
2152
2153 s.reset(read_data, sizeof(read_data));
2154 memset(read_buf, 0, sizeof(read_buf));
2155 error = boost::system::error_code();
2156 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2157 boost::asio::transfer_exactly(42), error);
2158 BOOST_ASIO_CHECK(bytes_transferred == 42);
2159 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
2160 BOOST_ASIO_CHECK(!error);
2161
2162 s.reset(read_data, sizeof(read_data));
2163 memset(read_buf, 0, sizeof(read_buf));
2164 error = boost::system::error_code();
2165 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2166 boost::asio::transfer_exactly(42), error);
2167 BOOST_ASIO_CHECK(bytes_transferred == 42);
2168 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
2169 BOOST_ASIO_CHECK(!error);
2170
2171 s.reset(read_data, sizeof(read_data));
2172 s.next_read_length(1);
2173 memset(read_buf, 0, sizeof(read_buf));
2174 error = boost::system::error_code();
2175 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2176 boost::asio::transfer_exactly(42), error);
2177 BOOST_ASIO_CHECK(bytes_transferred == 42);
2178 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
2179 BOOST_ASIO_CHECK(!error);
2180
2181 s.reset(read_data, sizeof(read_data));
2182 s.next_read_length(1);
2183 memset(read_buf, 0, sizeof(read_buf));
2184 error = boost::system::error_code();
2185 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2186 boost::asio::transfer_exactly(42), error);
2187 BOOST_ASIO_CHECK(bytes_transferred == 42);
2188 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
2189 BOOST_ASIO_CHECK(!error);
2190
2191 s.reset(read_data, sizeof(read_data));
2192 s.next_read_length(10);
2193 memset(read_buf, 0, sizeof(read_buf));
2194 error = boost::system::error_code();
2195 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2196 boost::asio::transfer_exactly(42), error);
2197 BOOST_ASIO_CHECK(bytes_transferred == 42);
2198 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
2199 BOOST_ASIO_CHECK(!error);
2200
2201 s.reset(read_data, sizeof(read_data));
2202 s.next_read_length(10);
2203 memset(read_buf, 0, sizeof(read_buf));
2204 error = boost::system::error_code();
2205 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2206 boost::asio::transfer_exactly(42), error);
2207 BOOST_ASIO_CHECK(bytes_transferred == 42);
2208 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
2209 BOOST_ASIO_CHECK(!error);
2210
2211 s.reset(read_data, sizeof(read_data));
2212 memset(read_buf, 0, sizeof(read_buf));
2213 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2214 old_style_transfer_all, error);
2215 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2216 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2217 BOOST_ASIO_CHECK(!error);
2218
2219 s.reset(read_data, sizeof(read_data));
2220 memset(read_buf, 0, sizeof(read_buf));
2221 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2222 old_style_transfer_all, error);
2223 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2224 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2225 BOOST_ASIO_CHECK(!error);
2226
2227 s.reset(read_data, sizeof(read_data));
2228 s.next_read_length(1);
2229 memset(read_buf, 0, sizeof(read_buf));
2230 error = boost::system::error_code();
2231 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2232 old_style_transfer_all, error);
2233 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2234 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2235 BOOST_ASIO_CHECK(!error);
2236
2237 s.reset(read_data, sizeof(read_data));
2238 s.next_read_length(1);
2239 memset(read_buf, 0, sizeof(read_buf));
2240 error = boost::system::error_code();
2241 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2242 old_style_transfer_all, error);
2243 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2244 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2245 BOOST_ASIO_CHECK(!error);
2246
2247 s.reset(read_data, sizeof(read_data));
2248 s.next_read_length(10);
2249 memset(read_buf, 0, sizeof(read_buf));
2250 error = boost::system::error_code();
2251 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2252 old_style_transfer_all, error);
2253 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2254 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2255 BOOST_ASIO_CHECK(!error);
2256
2257 s.reset(read_data, sizeof(read_data));
2258 s.next_read_length(10);
2259 memset(read_buf, 0, sizeof(read_buf));
2260 error = boost::system::error_code();
2261 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2262 old_style_transfer_all, error);
2263 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2264 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2265 BOOST_ASIO_CHECK(!error);
2266
2267 s.reset(read_data, sizeof(read_data));
2268 memset(read_buf, 0, sizeof(read_buf));
2269 bytes_transferred = boost::asio::read_at(s, 0, buffers,
92f5a8d4 2270 short_transfer(), error);
7c673cae
FG
2271 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2272 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2273 BOOST_ASIO_CHECK(!error);
2274
2275 s.reset(read_data, sizeof(read_data));
2276 memset(read_buf, 0, sizeof(read_buf));
2277 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
92f5a8d4 2278 short_transfer(), error);
7c673cae
FG
2279 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2280 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2281 BOOST_ASIO_CHECK(!error);
2282
2283 s.reset(read_data, sizeof(read_data));
2284 s.next_read_length(1);
2285 memset(read_buf, 0, sizeof(read_buf));
2286 error = boost::system::error_code();
2287 bytes_transferred = boost::asio::read_at(s, 0, buffers,
92f5a8d4 2288 short_transfer(), error);
7c673cae
FG
2289 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2290 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2291 BOOST_ASIO_CHECK(!error);
2292
2293 s.reset(read_data, sizeof(read_data));
2294 s.next_read_length(1);
2295 memset(read_buf, 0, sizeof(read_buf));
2296 error = boost::system::error_code();
2297 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
92f5a8d4 2298 short_transfer(), error);
7c673cae
FG
2299 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2300 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2301 BOOST_ASIO_CHECK(!error);
2302
2303 s.reset(read_data, sizeof(read_data));
2304 s.next_read_length(10);
2305 memset(read_buf, 0, sizeof(read_buf));
2306 error = boost::system::error_code();
2307 bytes_transferred = boost::asio::read_at(s, 0, buffers,
92f5a8d4 2308 short_transfer(), error);
7c673cae
FG
2309 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2310 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2311 BOOST_ASIO_CHECK(!error);
2312
2313 s.reset(read_data, sizeof(read_data));
2314 s.next_read_length(10);
2315 memset(read_buf, 0, sizeof(read_buf));
2316 error = boost::system::error_code();
2317 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
92f5a8d4 2318 short_transfer(), error);
7c673cae
FG
2319 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2320 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2321 BOOST_ASIO_CHECK(!error);
2322}
2323
2324void test_5_arg_vector_buffers_read_at()
2325{
b32b8144
FG
2326 boost::asio::io_context ioc;
2327 test_random_access_device s(ioc);
7c673cae
FG
2328 char read_buf[sizeof(read_data)];
2329 std::vector<boost::asio::mutable_buffer> buffers;
2330 buffers.push_back(boost::asio::buffer(read_buf, 32));
2331 buffers.push_back(boost::asio::buffer(read_buf) + 32);
2332
2333 s.reset(read_data, sizeof(read_data));
2334 memset(read_buf, 0, sizeof(read_buf));
2335 boost::system::error_code error;
2336 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers,
2337 boost::asio::transfer_all(), error);
2338 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2339 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2340 BOOST_ASIO_CHECK(!error);
2341
2342 s.reset(read_data, sizeof(read_data));
2343 memset(read_buf, 0, sizeof(read_buf));
2344 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2345 boost::asio::transfer_all(), error);
2346 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2347 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2348 BOOST_ASIO_CHECK(!error);
2349
2350 s.reset(read_data, sizeof(read_data));
2351 s.next_read_length(1);
2352 memset(read_buf, 0, sizeof(read_buf));
2353 error = boost::system::error_code();
2354 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2355 boost::asio::transfer_all(), error);
2356 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2357 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2358 BOOST_ASIO_CHECK(!error);
2359
2360 s.reset(read_data, sizeof(read_data));
2361 s.next_read_length(1);
2362 memset(read_buf, 0, sizeof(read_buf));
2363 error = boost::system::error_code();
2364 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2365 boost::asio::transfer_all(), error);
2366 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2367 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2368 BOOST_ASIO_CHECK(!error);
2369
2370 s.reset(read_data, sizeof(read_data));
2371 s.next_read_length(10);
2372 memset(read_buf, 0, sizeof(read_buf));
2373 error = boost::system::error_code();
2374 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2375 boost::asio::transfer_all(), error);
2376 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2377 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2378 BOOST_ASIO_CHECK(!error);
2379
2380 s.reset(read_data, sizeof(read_data));
2381 s.next_read_length(10);
2382 memset(read_buf, 0, sizeof(read_buf));
2383 error = boost::system::error_code();
2384 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2385 boost::asio::transfer_all(), error);
2386 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2387 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2388 BOOST_ASIO_CHECK(!error);
2389
2390 s.reset(read_data, sizeof(read_data));
2391 memset(read_buf, 0, sizeof(read_buf));
2392 error = boost::system::error_code();
2393 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2394 boost::asio::transfer_at_least(1), error);
2395 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2396 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2397 BOOST_ASIO_CHECK(!error);
2398
2399 s.reset(read_data, sizeof(read_data));
2400 memset(read_buf, 0, sizeof(read_buf));
2401 error = boost::system::error_code();
2402 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2403 boost::asio::transfer_at_least(1), error);
2404 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2405 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2406 BOOST_ASIO_CHECK(!error);
2407
2408 s.reset(read_data, sizeof(read_data));
2409 s.next_read_length(1);
2410 memset(read_buf, 0, sizeof(read_buf));
2411 error = boost::system::error_code();
2412 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2413 boost::asio::transfer_at_least(1), error);
2414 BOOST_ASIO_CHECK(bytes_transferred == 1);
2415 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
2416 BOOST_ASIO_CHECK(!error);
2417
2418 s.reset(read_data, sizeof(read_data));
2419 s.next_read_length(1);
2420 memset(read_buf, 0, sizeof(read_buf));
2421 error = boost::system::error_code();
2422 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2423 boost::asio::transfer_at_least(1), error);
2424 BOOST_ASIO_CHECK(bytes_transferred == 1);
2425 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
2426 BOOST_ASIO_CHECK(!error);
2427
2428 s.reset(read_data, sizeof(read_data));
2429 s.next_read_length(10);
2430 memset(read_buf, 0, sizeof(read_buf));
2431 error = boost::system::error_code();
2432 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2433 boost::asio::transfer_at_least(1), error);
2434 BOOST_ASIO_CHECK(bytes_transferred == 10);
2435 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2436 BOOST_ASIO_CHECK(!error);
2437
2438 s.reset(read_data, sizeof(read_data));
2439 s.next_read_length(10);
2440 memset(read_buf, 0, sizeof(read_buf));
2441 error = boost::system::error_code();
2442 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2443 boost::asio::transfer_at_least(1), error);
2444 BOOST_ASIO_CHECK(bytes_transferred == 10);
2445 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2446 BOOST_ASIO_CHECK(!error);
2447
2448 s.reset(read_data, sizeof(read_data));
2449 memset(read_buf, 0, sizeof(read_buf));
2450 error = boost::system::error_code();
2451 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2452 boost::asio::transfer_at_least(10), error);
2453 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2454 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2455 BOOST_ASIO_CHECK(!error);
2456
2457 s.reset(read_data, sizeof(read_data));
2458 memset(read_buf, 0, sizeof(read_buf));
2459 error = boost::system::error_code();
2460 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2461 boost::asio::transfer_at_least(10), error);
2462 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2463 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2464 BOOST_ASIO_CHECK(!error);
2465
2466 s.reset(read_data, sizeof(read_data));
2467 s.next_read_length(1);
2468 memset(read_buf, 0, sizeof(read_buf));
2469 error = boost::system::error_code();
2470 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2471 boost::asio::transfer_at_least(10), error);
2472 BOOST_ASIO_CHECK(bytes_transferred == 10);
2473 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2474 BOOST_ASIO_CHECK(!error);
2475
2476 s.reset(read_data, sizeof(read_data));
2477 s.next_read_length(1);
2478 memset(read_buf, 0, sizeof(read_buf));
2479 error = boost::system::error_code();
2480 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2481 boost::asio::transfer_at_least(10), error);
2482 BOOST_ASIO_CHECK(bytes_transferred == 10);
2483 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2484 BOOST_ASIO_CHECK(!error);
2485
2486 s.reset(read_data, sizeof(read_data));
2487 s.next_read_length(10);
2488 memset(read_buf, 0, sizeof(read_buf));
2489 error = boost::system::error_code();
2490 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2491 boost::asio::transfer_at_least(10), error);
2492 BOOST_ASIO_CHECK(bytes_transferred == 10);
2493 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2494 BOOST_ASIO_CHECK(!error);
2495
2496 s.reset(read_data, sizeof(read_data));
2497 s.next_read_length(10);
2498 memset(read_buf, 0, sizeof(read_buf));
2499 error = boost::system::error_code();
2500 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2501 boost::asio::transfer_at_least(10), error);
2502 BOOST_ASIO_CHECK(bytes_transferred == 10);
2503 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2504 BOOST_ASIO_CHECK(!error);
2505
2506 s.reset(read_data, sizeof(read_data));
2507 memset(read_buf, 0, sizeof(read_buf));
2508 error = boost::system::error_code();
2509 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2510 boost::asio::transfer_at_least(42), error);
2511 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2512 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2513 BOOST_ASIO_CHECK(!error);
2514
2515 s.reset(read_data, sizeof(read_data));
2516 memset(read_buf, 0, sizeof(read_buf));
2517 error = boost::system::error_code();
2518 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2519 boost::asio::transfer_at_least(42), error);
2520 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2521 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2522 BOOST_ASIO_CHECK(!error);
2523
2524 s.reset(read_data, sizeof(read_data));
2525 s.next_read_length(1);
2526 memset(read_buf, 0, sizeof(read_buf));
2527 error = boost::system::error_code();
2528 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2529 boost::asio::transfer_at_least(42), error);
2530 BOOST_ASIO_CHECK(bytes_transferred == 42);
2531 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
2532 BOOST_ASIO_CHECK(!error);
2533
2534 s.reset(read_data, sizeof(read_data));
2535 s.next_read_length(1);
2536 memset(read_buf, 0, sizeof(read_buf));
2537 error = boost::system::error_code();
2538 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2539 boost::asio::transfer_at_least(42), error);
2540 BOOST_ASIO_CHECK(bytes_transferred == 42);
2541 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
2542 BOOST_ASIO_CHECK(!error);
2543
2544 s.reset(read_data, sizeof(read_data));
2545 s.next_read_length(10);
2546 memset(read_buf, 0, sizeof(read_buf));
2547 error = boost::system::error_code();
2548 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2549 boost::asio::transfer_at_least(42), error);
2550 BOOST_ASIO_CHECK(bytes_transferred == 50);
2551 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
2552 BOOST_ASIO_CHECK(!error);
2553
2554 s.reset(read_data, sizeof(read_data));
2555 s.next_read_length(10);
2556 memset(read_buf, 0, sizeof(read_buf));
2557 error = boost::system::error_code();
2558 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2559 boost::asio::transfer_at_least(42), error);
2560 BOOST_ASIO_CHECK(bytes_transferred == 50);
2561 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
2562 BOOST_ASIO_CHECK(!error);
2563
2564 s.reset(read_data, sizeof(read_data));
2565 memset(read_buf, 0, sizeof(read_buf));
2566 error = boost::system::error_code();
2567 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2568 boost::asio::transfer_exactly(1), error);
2569 BOOST_ASIO_CHECK(bytes_transferred == 1);
2570 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
2571 BOOST_ASIO_CHECK(!error);
2572
2573 s.reset(read_data, sizeof(read_data));
2574 memset(read_buf, 0, sizeof(read_buf));
2575 error = boost::system::error_code();
2576 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2577 boost::asio::transfer_exactly(1), error);
2578 BOOST_ASIO_CHECK(bytes_transferred == 1);
2579 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
2580 BOOST_ASIO_CHECK(!error);
2581
2582 s.reset(read_data, sizeof(read_data));
2583 s.next_read_length(1);
2584 memset(read_buf, 0, sizeof(read_buf));
2585 error = boost::system::error_code();
2586 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2587 boost::asio::transfer_exactly(1), error);
2588 BOOST_ASIO_CHECK(bytes_transferred == 1);
2589 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
2590 BOOST_ASIO_CHECK(!error);
2591
2592 s.reset(read_data, sizeof(read_data));
2593 s.next_read_length(1);
2594 memset(read_buf, 0, sizeof(read_buf));
2595 error = boost::system::error_code();
2596 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2597 boost::asio::transfer_exactly(1), error);
2598 BOOST_ASIO_CHECK(bytes_transferred == 1);
2599 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
2600 BOOST_ASIO_CHECK(!error);
2601
2602 s.reset(read_data, sizeof(read_data));
2603 s.next_read_length(10);
2604 memset(read_buf, 0, sizeof(read_buf));
2605 error = boost::system::error_code();
2606 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2607 boost::asio::transfer_exactly(1), error);
2608 BOOST_ASIO_CHECK(bytes_transferred == 1);
2609 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
2610 BOOST_ASIO_CHECK(!error);
2611
2612 s.reset(read_data, sizeof(read_data));
2613 s.next_read_length(10);
2614 memset(read_buf, 0, sizeof(read_buf));
2615 error = boost::system::error_code();
2616 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2617 boost::asio::transfer_exactly(1), error);
2618 BOOST_ASIO_CHECK(bytes_transferred == 1);
2619 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
2620 BOOST_ASIO_CHECK(!error);
2621
2622 s.reset(read_data, sizeof(read_data));
2623 memset(read_buf, 0, sizeof(read_buf));
2624 error = boost::system::error_code();
2625 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2626 boost::asio::transfer_exactly(10), error);
2627 BOOST_ASIO_CHECK(bytes_transferred == 10);
2628 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2629 BOOST_ASIO_CHECK(!error);
2630
2631 s.reset(read_data, sizeof(read_data));
2632 memset(read_buf, 0, sizeof(read_buf));
2633 error = boost::system::error_code();
2634 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2635 boost::asio::transfer_exactly(10), error);
2636 BOOST_ASIO_CHECK(bytes_transferred == 10);
2637 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2638 BOOST_ASIO_CHECK(!error);
2639
2640 s.reset(read_data, sizeof(read_data));
2641 s.next_read_length(1);
2642 memset(read_buf, 0, sizeof(read_buf));
2643 error = boost::system::error_code();
2644 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2645 boost::asio::transfer_exactly(10), error);
2646 BOOST_ASIO_CHECK(bytes_transferred == 10);
2647 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2648 BOOST_ASIO_CHECK(!error);
2649
2650 s.reset(read_data, sizeof(read_data));
2651 s.next_read_length(1);
2652 memset(read_buf, 0, sizeof(read_buf));
2653 error = boost::system::error_code();
2654 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2655 boost::asio::transfer_exactly(10), error);
2656 BOOST_ASIO_CHECK(bytes_transferred == 10);
2657 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2658 BOOST_ASIO_CHECK(!error);
2659
2660 s.reset(read_data, sizeof(read_data));
2661 s.next_read_length(10);
2662 memset(read_buf, 0, sizeof(read_buf));
2663 error = boost::system::error_code();
2664 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2665 boost::asio::transfer_exactly(10), error);
2666 BOOST_ASIO_CHECK(bytes_transferred == 10);
2667 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2668 BOOST_ASIO_CHECK(!error);
2669
2670 s.reset(read_data, sizeof(read_data));
2671 s.next_read_length(10);
2672 memset(read_buf, 0, sizeof(read_buf));
2673 error = boost::system::error_code();
2674 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2675 boost::asio::transfer_exactly(10), error);
2676 BOOST_ASIO_CHECK(bytes_transferred == 10);
2677 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2678 BOOST_ASIO_CHECK(!error);
2679
2680 s.reset(read_data, sizeof(read_data));
2681 memset(read_buf, 0, sizeof(read_buf));
2682 error = boost::system::error_code();
2683 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2684 boost::asio::transfer_exactly(42), error);
2685 BOOST_ASIO_CHECK(bytes_transferred == 42);
2686 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
2687 BOOST_ASIO_CHECK(!error);
2688
2689 s.reset(read_data, sizeof(read_data));
2690 memset(read_buf, 0, sizeof(read_buf));
2691 error = boost::system::error_code();
2692 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2693 boost::asio::transfer_exactly(42), error);
2694 BOOST_ASIO_CHECK(bytes_transferred == 42);
2695 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
2696 BOOST_ASIO_CHECK(!error);
2697
2698 s.reset(read_data, sizeof(read_data));
2699 s.next_read_length(1);
2700 memset(read_buf, 0, sizeof(read_buf));
2701 error = boost::system::error_code();
2702 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2703 boost::asio::transfer_exactly(42), error);
2704 BOOST_ASIO_CHECK(bytes_transferred == 42);
2705 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
2706 BOOST_ASIO_CHECK(!error);
2707
2708 s.reset(read_data, sizeof(read_data));
2709 s.next_read_length(1);
2710 memset(read_buf, 0, sizeof(read_buf));
2711 error = boost::system::error_code();
2712 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2713 boost::asio::transfer_exactly(42), error);
2714 BOOST_ASIO_CHECK(bytes_transferred == 42);
2715 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
2716 BOOST_ASIO_CHECK(!error);
2717
2718 s.reset(read_data, sizeof(read_data));
2719 s.next_read_length(10);
2720 memset(read_buf, 0, sizeof(read_buf));
2721 error = boost::system::error_code();
2722 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2723 boost::asio::transfer_exactly(42), error);
2724 BOOST_ASIO_CHECK(bytes_transferred == 42);
2725 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
2726 BOOST_ASIO_CHECK(!error);
2727
2728 s.reset(read_data, sizeof(read_data));
2729 s.next_read_length(10);
2730 memset(read_buf, 0, sizeof(read_buf));
2731 error = boost::system::error_code();
2732 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2733 boost::asio::transfer_exactly(42), error);
2734 BOOST_ASIO_CHECK(bytes_transferred == 42);
2735 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
2736 BOOST_ASIO_CHECK(!error);
2737
2738 s.reset(read_data, sizeof(read_data));
2739 memset(read_buf, 0, sizeof(read_buf));
2740 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2741 old_style_transfer_all, error);
2742 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2743 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2744 BOOST_ASIO_CHECK(!error);
2745
2746 s.reset(read_data, sizeof(read_data));
2747 memset(read_buf, 0, sizeof(read_buf));
2748 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2749 old_style_transfer_all, error);
2750 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2751 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2752 BOOST_ASIO_CHECK(!error);
2753
2754 s.reset(read_data, sizeof(read_data));
2755 s.next_read_length(1);
2756 memset(read_buf, 0, sizeof(read_buf));
2757 error = boost::system::error_code();
2758 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2759 old_style_transfer_all, error);
2760 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2761 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2762 BOOST_ASIO_CHECK(!error);
2763
2764 s.reset(read_data, sizeof(read_data));
2765 s.next_read_length(1);
2766 memset(read_buf, 0, sizeof(read_buf));
2767 error = boost::system::error_code();
2768 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2769 old_style_transfer_all, error);
2770 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2771 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2772 BOOST_ASIO_CHECK(!error);
2773
2774 s.reset(read_data, sizeof(read_data));
2775 s.next_read_length(10);
2776 memset(read_buf, 0, sizeof(read_buf));
2777 error = boost::system::error_code();
2778 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2779 old_style_transfer_all, error);
2780 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2781 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2782 BOOST_ASIO_CHECK(!error);
2783
2784 s.reset(read_data, sizeof(read_data));
2785 s.next_read_length(10);
2786 memset(read_buf, 0, sizeof(read_buf));
2787 error = boost::system::error_code();
2788 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2789 old_style_transfer_all, error);
2790 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2791 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2792 BOOST_ASIO_CHECK(!error);
2793
2794 s.reset(read_data, sizeof(read_data));
2795 memset(read_buf, 0, sizeof(read_buf));
2796 bytes_transferred = boost::asio::read_at(s, 0, buffers,
92f5a8d4 2797 short_transfer(), error);
7c673cae
FG
2798 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2799 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2800 BOOST_ASIO_CHECK(!error);
2801
2802 s.reset(read_data, sizeof(read_data));
2803 memset(read_buf, 0, sizeof(read_buf));
2804 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
92f5a8d4 2805 short_transfer(), error);
7c673cae
FG
2806 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2807 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2808 BOOST_ASIO_CHECK(!error);
2809
2810 s.reset(read_data, sizeof(read_data));
2811 s.next_read_length(1);
2812 memset(read_buf, 0, sizeof(read_buf));
2813 error = boost::system::error_code();
2814 bytes_transferred = boost::asio::read_at(s, 0, buffers,
92f5a8d4 2815 short_transfer(), error);
7c673cae
FG
2816 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2817 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2818 BOOST_ASIO_CHECK(!error);
2819
2820 s.reset(read_data, sizeof(read_data));
2821 s.next_read_length(1);
2822 memset(read_buf, 0, sizeof(read_buf));
2823 error = boost::system::error_code();
2824 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
92f5a8d4 2825 short_transfer(), error);
7c673cae
FG
2826 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2827 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2828 BOOST_ASIO_CHECK(!error);
2829
2830 s.reset(read_data, sizeof(read_data));
2831 s.next_read_length(10);
2832 memset(read_buf, 0, sizeof(read_buf));
2833 error = boost::system::error_code();
2834 bytes_transferred = boost::asio::read_at(s, 0, buffers,
92f5a8d4 2835 short_transfer(), error);
7c673cae
FG
2836 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2837 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2838 BOOST_ASIO_CHECK(!error);
2839
2840 s.reset(read_data, sizeof(read_data));
2841 s.next_read_length(10);
2842 memset(read_buf, 0, sizeof(read_buf));
2843 error = boost::system::error_code();
2844 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
92f5a8d4 2845 short_transfer(), error);
7c673cae
FG
2846 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2847 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2848 BOOST_ASIO_CHECK(!error);
2849}
2850
2851void test_5_arg_streambuf_read_at()
2852{
b32b8144
FG
2853 boost::asio::io_context ioc;
2854 test_random_access_device s(ioc);
7c673cae
FG
2855 boost::asio::streambuf sb(sizeof(read_data));
2856
2857 s.reset(read_data, sizeof(read_data));
2858 sb.consume(sb.size());
2859 boost::system::error_code error;
2860 size_t bytes_transferred = boost::asio::read_at(s, 0, sb,
2861 boost::asio::transfer_all(), error);
2862 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2863 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2864 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
2865 BOOST_ASIO_CHECK(!error);
2866
2867 s.reset(read_data, sizeof(read_data));
2868 sb.consume(sb.size());
2869 bytes_transferred = boost::asio::read_at(s, 1234, sb,
2870 boost::asio::transfer_all(), error);
2871 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2872 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2873 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
2874 BOOST_ASIO_CHECK(!error);
2875
2876 s.reset(read_data, sizeof(read_data));
2877 s.next_read_length(1);
2878 sb.consume(sb.size());
2879 error = boost::system::error_code();
2880 bytes_transferred = boost::asio::read_at(s, 0, sb,
2881 boost::asio::transfer_all(), error);
2882 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2883 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2884 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
2885 BOOST_ASIO_CHECK(!error);
2886
2887 s.reset(read_data, sizeof(read_data));
2888 s.next_read_length(1);
2889 sb.consume(sb.size());
2890 error = boost::system::error_code();
2891 bytes_transferred = boost::asio::read_at(s, 1234, sb,
2892 boost::asio::transfer_all(), error);
2893 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2894 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2895 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
2896 BOOST_ASIO_CHECK(!error);
2897
2898 s.reset(read_data, sizeof(read_data));
2899 s.next_read_length(10);
2900 sb.consume(sb.size());
2901 error = boost::system::error_code();
2902 bytes_transferred = boost::asio::read_at(s, 0, sb,
2903 boost::asio::transfer_all(), error);
2904 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2905 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2906 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
2907 BOOST_ASIO_CHECK(!error);
2908
2909 s.reset(read_data, sizeof(read_data));
2910 s.next_read_length(10);
2911 sb.consume(sb.size());
2912 error = boost::system::error_code();
2913 bytes_transferred = boost::asio::read_at(s, 1234, sb,
2914 boost::asio::transfer_all(), error);
2915 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2916 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2917 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
2918 BOOST_ASIO_CHECK(!error);
2919
2920 s.reset(read_data, sizeof(read_data));
2921 sb.consume(sb.size());
2922 error = boost::system::error_code();
2923 bytes_transferred = boost::asio::read_at(s, 0, sb,
2924 boost::asio::transfer_at_least(1), error);
2925 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2926 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2927 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
2928 BOOST_ASIO_CHECK(!error);
2929
2930 s.reset(read_data, sizeof(read_data));
2931 sb.consume(sb.size());
2932 error = boost::system::error_code();
2933 bytes_transferred = boost::asio::read_at(s, 1234, sb,
2934 boost::asio::transfer_at_least(1), error);
2935 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2936 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2937 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
2938 BOOST_ASIO_CHECK(!error);
2939
2940 s.reset(read_data, sizeof(read_data));
2941 s.next_read_length(1);
2942 sb.consume(sb.size());
2943 error = boost::system::error_code();
2944 bytes_transferred = boost::asio::read_at(s, 0, sb,
2945 boost::asio::transfer_at_least(1), error);
2946 BOOST_ASIO_CHECK(bytes_transferred == 1);
2947 BOOST_ASIO_CHECK(sb.size() == 1);
2948 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
2949 BOOST_ASIO_CHECK(!error);
2950
2951 s.reset(read_data, sizeof(read_data));
2952 s.next_read_length(1);
2953 sb.consume(sb.size());
2954 error = boost::system::error_code();
2955 bytes_transferred = boost::asio::read_at(s, 1234, sb,
2956 boost::asio::transfer_at_least(1), error);
2957 BOOST_ASIO_CHECK(bytes_transferred == 1);
2958 BOOST_ASIO_CHECK(sb.size() == 1);
2959 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
2960 BOOST_ASIO_CHECK(!error);
2961
2962 s.reset(read_data, sizeof(read_data));
2963 s.next_read_length(10);
2964 sb.consume(sb.size());
2965 error = boost::system::error_code();
2966 bytes_transferred = boost::asio::read_at(s, 0, sb,
2967 boost::asio::transfer_at_least(1), error);
2968 BOOST_ASIO_CHECK(bytes_transferred == 10);
2969 BOOST_ASIO_CHECK(sb.size() == 10);
2970 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
2971 BOOST_ASIO_CHECK(!error);
2972
2973 s.reset(read_data, sizeof(read_data));
2974 s.next_read_length(10);
2975 sb.consume(sb.size());
2976 error = boost::system::error_code();
2977 bytes_transferred = boost::asio::read_at(s, 1234, sb,
2978 boost::asio::transfer_at_least(1), error);
2979 BOOST_ASIO_CHECK(bytes_transferred == 10);
2980 BOOST_ASIO_CHECK(sb.size() == 10);
2981 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
2982 BOOST_ASIO_CHECK(!error);
2983
2984 s.reset(read_data, sizeof(read_data));
2985 sb.consume(sb.size());
2986 error = boost::system::error_code();
2987 bytes_transferred = boost::asio::read_at(s, 0, sb,
2988 boost::asio::transfer_at_least(10), error);
2989 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2990 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2991 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
2992 BOOST_ASIO_CHECK(!error);
2993
2994 s.reset(read_data, sizeof(read_data));
2995 sb.consume(sb.size());
2996 error = boost::system::error_code();
2997 bytes_transferred = boost::asio::read_at(s, 1234, sb,
2998 boost::asio::transfer_at_least(10), error);
2999 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3000 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3001 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3002 BOOST_ASIO_CHECK(!error);
3003
3004 s.reset(read_data, sizeof(read_data));
3005 s.next_read_length(1);
3006 sb.consume(sb.size());
3007 error = boost::system::error_code();
3008 bytes_transferred = boost::asio::read_at(s, 0, sb,
3009 boost::asio::transfer_at_least(10), error);
3010 BOOST_ASIO_CHECK(bytes_transferred == 10);
3011 BOOST_ASIO_CHECK(sb.size() == 10);
3012 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
3013 BOOST_ASIO_CHECK(!error);
3014
3015 s.reset(read_data, sizeof(read_data));
3016 s.next_read_length(1);
3017 sb.consume(sb.size());
3018 error = boost::system::error_code();
3019 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3020 boost::asio::transfer_at_least(10), error);
3021 BOOST_ASIO_CHECK(bytes_transferred == 10);
3022 BOOST_ASIO_CHECK(sb.size() == 10);
3023 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
3024 BOOST_ASIO_CHECK(!error);
3025
3026 s.reset(read_data, sizeof(read_data));
3027 s.next_read_length(10);
3028 sb.consume(sb.size());
3029 error = boost::system::error_code();
3030 bytes_transferred = boost::asio::read_at(s, 0, sb,
3031 boost::asio::transfer_at_least(10), error);
3032 BOOST_ASIO_CHECK(bytes_transferred == 10);
3033 BOOST_ASIO_CHECK(sb.size() == 10);
3034 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
3035 BOOST_ASIO_CHECK(!error);
3036
3037 s.reset(read_data, sizeof(read_data));
3038 s.next_read_length(10);
3039 sb.consume(sb.size());
3040 error = boost::system::error_code();
3041 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3042 boost::asio::transfer_at_least(10), error);
3043 BOOST_ASIO_CHECK(bytes_transferred == 10);
3044 BOOST_ASIO_CHECK(sb.size() == 10);
3045 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
3046 BOOST_ASIO_CHECK(!error);
3047
3048 s.reset(read_data, sizeof(read_data));
3049 sb.consume(sb.size());
3050 error = boost::system::error_code();
3051 bytes_transferred = boost::asio::read_at(s, 0, sb,
3052 boost::asio::transfer_at_least(42), error);
3053 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3054 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3055 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3056 BOOST_ASIO_CHECK(!error);
3057
3058 s.reset(read_data, sizeof(read_data));
3059 sb.consume(sb.size());
3060 error = boost::system::error_code();
3061 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3062 boost::asio::transfer_at_least(42), error);
3063 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3064 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3065 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3066 BOOST_ASIO_CHECK(!error);
3067
3068 s.reset(read_data, sizeof(read_data));
3069 s.next_read_length(1);
3070 sb.consume(sb.size());
3071 error = boost::system::error_code();
3072 bytes_transferred = boost::asio::read_at(s, 0, sb,
3073 boost::asio::transfer_at_least(42), error);
3074 BOOST_ASIO_CHECK(bytes_transferred == 42);
3075 BOOST_ASIO_CHECK(sb.size() == 42);
3076 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
3077 BOOST_ASIO_CHECK(!error);
3078
3079 s.reset(read_data, sizeof(read_data));
3080 s.next_read_length(1);
3081 sb.consume(sb.size());
3082 error = boost::system::error_code();
3083 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3084 boost::asio::transfer_at_least(42), error);
3085 BOOST_ASIO_CHECK(bytes_transferred == 42);
3086 BOOST_ASIO_CHECK(sb.size() == 42);
3087 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
3088 BOOST_ASIO_CHECK(!error);
3089
3090 s.reset(read_data, sizeof(read_data));
3091 s.next_read_length(10);
3092 sb.consume(sb.size());
3093 error = boost::system::error_code();
3094 bytes_transferred = boost::asio::read_at(s, 0, sb,
3095 boost::asio::transfer_at_least(42), error);
3096 BOOST_ASIO_CHECK(bytes_transferred == 50);
3097 BOOST_ASIO_CHECK(sb.size() == 50);
3098 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 50));
3099 BOOST_ASIO_CHECK(!error);
3100
3101 s.reset(read_data, sizeof(read_data));
3102 s.next_read_length(10);
3103 sb.consume(sb.size());
3104 error = boost::system::error_code();
3105 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3106 boost::asio::transfer_at_least(42), error);
3107 BOOST_ASIO_CHECK(bytes_transferred == 50);
3108 BOOST_ASIO_CHECK(sb.size() == 50);
3109 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 50));
3110 BOOST_ASIO_CHECK(!error);
3111
3112 s.reset(read_data, sizeof(read_data));
3113 sb.consume(sb.size());
3114 error = boost::system::error_code();
3115 bytes_transferred = boost::asio::read_at(s, 0, sb,
3116 boost::asio::transfer_exactly(1), error);
3117 BOOST_ASIO_CHECK(bytes_transferred == 1);
3118 BOOST_ASIO_CHECK(sb.size() == 1);
3119 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
3120 BOOST_ASIO_CHECK(!error);
3121
3122 s.reset(read_data, sizeof(read_data));
3123 sb.consume(sb.size());
3124 error = boost::system::error_code();
3125 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3126 boost::asio::transfer_exactly(1), error);
3127 BOOST_ASIO_CHECK(bytes_transferred == 1);
3128 BOOST_ASIO_CHECK(sb.size() == 1);
3129 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
3130 BOOST_ASIO_CHECK(!error);
3131
3132 s.reset(read_data, sizeof(read_data));
3133 s.next_read_length(1);
3134 sb.consume(sb.size());
3135 error = boost::system::error_code();
3136 bytes_transferred = boost::asio::read_at(s, 0, sb,
3137 boost::asio::transfer_exactly(1), error);
3138 BOOST_ASIO_CHECK(bytes_transferred == 1);
3139 BOOST_ASIO_CHECK(sb.size() == 1);
3140 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
3141 BOOST_ASIO_CHECK(!error);
3142
3143 s.reset(read_data, sizeof(read_data));
3144 s.next_read_length(1);
3145 sb.consume(sb.size());
3146 error = boost::system::error_code();
3147 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3148 boost::asio::transfer_exactly(1), error);
3149 BOOST_ASIO_CHECK(bytes_transferred == 1);
3150 BOOST_ASIO_CHECK(sb.size() == 1);
3151 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
3152 BOOST_ASIO_CHECK(!error);
3153
3154 s.reset(read_data, sizeof(read_data));
3155 s.next_read_length(10);
3156 sb.consume(sb.size());
3157 error = boost::system::error_code();
3158 bytes_transferred = boost::asio::read_at(s, 0, sb,
3159 boost::asio::transfer_exactly(1), error);
3160 BOOST_ASIO_CHECK(bytes_transferred == 1);
3161 BOOST_ASIO_CHECK(sb.size() == 1);
3162 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
3163 BOOST_ASIO_CHECK(!error);
3164
3165 s.reset(read_data, sizeof(read_data));
3166 s.next_read_length(10);
3167 sb.consume(sb.size());
3168 error = boost::system::error_code();
3169 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3170 boost::asio::transfer_exactly(1), error);
3171 BOOST_ASIO_CHECK(bytes_transferred == 1);
3172 BOOST_ASIO_CHECK(sb.size() == 1);
3173 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
3174 BOOST_ASIO_CHECK(!error);
3175
3176 s.reset(read_data, sizeof(read_data));
3177 sb.consume(sb.size());
3178 error = boost::system::error_code();
3179 bytes_transferred = boost::asio::read_at(s, 0, sb,
3180 boost::asio::transfer_exactly(10), error);
3181 BOOST_ASIO_CHECK(bytes_transferred == 10);
3182 BOOST_ASIO_CHECK(sb.size() == 10);
3183 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
3184 BOOST_ASIO_CHECK(!error);
3185
3186 s.reset(read_data, sizeof(read_data));
3187 sb.consume(sb.size());
3188 error = boost::system::error_code();
3189 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3190 boost::asio::transfer_exactly(10), error);
3191 BOOST_ASIO_CHECK(bytes_transferred == 10);
3192 BOOST_ASIO_CHECK(sb.size() == 10);
3193 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
3194 BOOST_ASIO_CHECK(!error);
3195
3196 s.reset(read_data, sizeof(read_data));
3197 s.next_read_length(1);
3198 sb.consume(sb.size());
3199 error = boost::system::error_code();
3200 bytes_transferred = boost::asio::read_at(s, 0, sb,
3201 boost::asio::transfer_exactly(10), error);
3202 BOOST_ASIO_CHECK(bytes_transferred == 10);
3203 BOOST_ASIO_CHECK(sb.size() == 10);
3204 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
3205 BOOST_ASIO_CHECK(!error);
3206
3207 s.reset(read_data, sizeof(read_data));
3208 s.next_read_length(1);
3209 sb.consume(sb.size());
3210 error = boost::system::error_code();
3211 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3212 boost::asio::transfer_exactly(10), error);
3213 BOOST_ASIO_CHECK(bytes_transferred == 10);
3214 BOOST_ASIO_CHECK(sb.size() == 10);
3215 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
3216 BOOST_ASIO_CHECK(!error);
3217
3218 s.reset(read_data, sizeof(read_data));
3219 s.next_read_length(10);
3220 sb.consume(sb.size());
3221 error = boost::system::error_code();
3222 bytes_transferred = boost::asio::read_at(s, 0, sb,
3223 boost::asio::transfer_exactly(10), error);
3224 BOOST_ASIO_CHECK(bytes_transferred == 10);
3225 BOOST_ASIO_CHECK(sb.size() == 10);
3226 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
3227 BOOST_ASIO_CHECK(!error);
3228
3229 s.reset(read_data, sizeof(read_data));
3230 s.next_read_length(10);
3231 sb.consume(sb.size());
3232 error = boost::system::error_code();
3233 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3234 boost::asio::transfer_exactly(10), error);
3235 BOOST_ASIO_CHECK(bytes_transferred == 10);
3236 BOOST_ASIO_CHECK(sb.size() == 10);
3237 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
3238 BOOST_ASIO_CHECK(!error);
3239
3240 s.reset(read_data, sizeof(read_data));
3241 sb.consume(sb.size());
3242 error = boost::system::error_code();
3243 bytes_transferred = boost::asio::read_at(s, 0, sb,
3244 boost::asio::transfer_exactly(42), error);
3245 BOOST_ASIO_CHECK(bytes_transferred == 42);
3246 BOOST_ASIO_CHECK(sb.size() == 42);
3247 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
3248 BOOST_ASIO_CHECK(!error);
3249
3250 s.reset(read_data, sizeof(read_data));
3251 sb.consume(sb.size());
3252 error = boost::system::error_code();
3253 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3254 boost::asio::transfer_exactly(42), error);
3255 BOOST_ASIO_CHECK(bytes_transferred == 42);
3256 BOOST_ASIO_CHECK(sb.size() == 42);
3257 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
3258 BOOST_ASIO_CHECK(!error);
3259
3260 s.reset(read_data, sizeof(read_data));
3261 s.next_read_length(1);
3262 sb.consume(sb.size());
3263 error = boost::system::error_code();
3264 bytes_transferred = boost::asio::read_at(s, 0, sb,
3265 boost::asio::transfer_exactly(42), error);
3266 BOOST_ASIO_CHECK(bytes_transferred == 42);
3267 BOOST_ASIO_CHECK(sb.size() == 42);
3268 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
3269 BOOST_ASIO_CHECK(!error);
3270
3271 s.reset(read_data, sizeof(read_data));
3272 s.next_read_length(1);
3273 sb.consume(sb.size());
3274 error = boost::system::error_code();
3275 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3276 boost::asio::transfer_exactly(42), error);
3277 BOOST_ASIO_CHECK(bytes_transferred == 42);
3278 BOOST_ASIO_CHECK(sb.size() == 42);
3279 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
3280 BOOST_ASIO_CHECK(!error);
3281
3282 s.reset(read_data, sizeof(read_data));
3283 s.next_read_length(10);
3284 sb.consume(sb.size());
3285 error = boost::system::error_code();
3286 bytes_transferred = boost::asio::read_at(s, 0, sb,
3287 boost::asio::transfer_exactly(42), error);
3288 BOOST_ASIO_CHECK(bytes_transferred == 42);
3289 BOOST_ASIO_CHECK(sb.size() == 42);
3290 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
3291 BOOST_ASIO_CHECK(!error);
3292
3293 s.reset(read_data, sizeof(read_data));
3294 s.next_read_length(10);
3295 sb.consume(sb.size());
3296 error = boost::system::error_code();
3297 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3298 boost::asio::transfer_exactly(42), error);
3299 BOOST_ASIO_CHECK(bytes_transferred == 42);
3300 BOOST_ASIO_CHECK(sb.size() == 42);
3301 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
3302 BOOST_ASIO_CHECK(!error);
3303
3304 s.reset(read_data, sizeof(read_data));
3305 sb.consume(sb.size());
3306 bytes_transferred = boost::asio::read_at(s, 0, sb,
3307 old_style_transfer_all, error);
3308 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3309 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3310 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3311 BOOST_ASIO_CHECK(!error);
3312
3313 s.reset(read_data, sizeof(read_data));
3314 sb.consume(sb.size());
3315 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3316 old_style_transfer_all, error);
3317 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3318 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3319 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3320 BOOST_ASIO_CHECK(!error);
3321
3322 s.reset(read_data, sizeof(read_data));
3323 s.next_read_length(1);
3324 sb.consume(sb.size());
3325 error = boost::system::error_code();
3326 bytes_transferred = boost::asio::read_at(s, 0, sb,
3327 old_style_transfer_all, error);
3328 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3329 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3330 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3331 BOOST_ASIO_CHECK(!error);
3332
3333 s.reset(read_data, sizeof(read_data));
3334 s.next_read_length(1);
3335 sb.consume(sb.size());
3336 error = boost::system::error_code();
3337 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3338 old_style_transfer_all, error);
3339 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3340 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3341 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3342 BOOST_ASIO_CHECK(!error);
3343
3344 s.reset(read_data, sizeof(read_data));
3345 s.next_read_length(10);
3346 sb.consume(sb.size());
3347 error = boost::system::error_code();
3348 bytes_transferred = boost::asio::read_at(s, 0, sb,
3349 old_style_transfer_all, error);
3350 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3351 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3352 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3353 BOOST_ASIO_CHECK(!error);
3354
3355 s.reset(read_data, sizeof(read_data));
3356 s.next_read_length(10);
3357 sb.consume(sb.size());
3358 error = boost::system::error_code();
3359 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3360 old_style_transfer_all, error);
3361 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3362 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3363 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3364 BOOST_ASIO_CHECK(!error);
3365
3366 s.reset(read_data, sizeof(read_data));
3367 sb.consume(sb.size());
3368 bytes_transferred = boost::asio::read_at(s, 0, sb,
92f5a8d4 3369 short_transfer(), error);
7c673cae
FG
3370 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3371 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3372 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3373 BOOST_ASIO_CHECK(!error);
3374
3375 s.reset(read_data, sizeof(read_data));
3376 sb.consume(sb.size());
3377 bytes_transferred = boost::asio::read_at(s, 1234, sb,
92f5a8d4 3378 short_transfer(), error);
7c673cae
FG
3379 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3380 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3381 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3382 BOOST_ASIO_CHECK(!error);
3383
3384 s.reset(read_data, sizeof(read_data));
3385 s.next_read_length(1);
3386 sb.consume(sb.size());
3387 error = boost::system::error_code();
3388 bytes_transferred = boost::asio::read_at(s, 0, sb,
92f5a8d4 3389 short_transfer(), error);
7c673cae
FG
3390 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3391 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3392 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3393 BOOST_ASIO_CHECK(!error);
3394
3395 s.reset(read_data, sizeof(read_data));
3396 s.next_read_length(1);
3397 sb.consume(sb.size());
3398 error = boost::system::error_code();
3399 bytes_transferred = boost::asio::read_at(s, 1234, sb,
92f5a8d4 3400 short_transfer(), error);
7c673cae
FG
3401 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3402 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3403 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3404 BOOST_ASIO_CHECK(!error);
3405
3406 s.reset(read_data, sizeof(read_data));
3407 s.next_read_length(10);
3408 sb.consume(sb.size());
3409 error = boost::system::error_code();
3410 bytes_transferred = boost::asio::read_at(s, 0, sb,
92f5a8d4 3411 short_transfer(), error);
7c673cae
FG
3412 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3413 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3414 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3415 BOOST_ASIO_CHECK(!error);
3416
3417 s.reset(read_data, sizeof(read_data));
3418 s.next_read_length(10);
3419 sb.consume(sb.size());
3420 error = boost::system::error_code();
3421 bytes_transferred = boost::asio::read_at(s, 1234, sb,
92f5a8d4 3422 short_transfer(), error);
7c673cae
FG
3423 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3424 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3425 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3426 BOOST_ASIO_CHECK(!error);
3427}
3428
3429void async_read_handler(const boost::system::error_code& e,
3430 size_t bytes_transferred, size_t expected_bytes_transferred, bool* called)
3431{
3432 *called = true;
3433 BOOST_ASIO_CHECK(!e);
3434 BOOST_ASIO_CHECK(bytes_transferred == expected_bytes_transferred);
3435}
3436
b32b8144 3437void test_4_arg_mutable_buffer_async_read_at()
7c673cae
FG
3438{
3439#if defined(BOOST_ASIO_HAS_BOOST_BIND)
3440 namespace bindns = boost;
3441#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3442 namespace bindns = std;
7c673cae 3443#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
3444 using bindns::placeholders::_1;
3445 using bindns::placeholders::_2;
7c673cae 3446
b32b8144
FG
3447 boost::asio::io_context ioc;
3448 test_random_access_device s(ioc);
7c673cae 3449 char read_buf[sizeof(read_data)];
b32b8144 3450 boost::asio::mutable_buffer buffers
7c673cae
FG
3451 = boost::asio::buffer(read_buf, sizeof(read_buf));
3452
3453 s.reset(read_data, sizeof(read_data));
3454 memset(read_buf, 0, sizeof(read_buf));
3455 bool called = false;
3456 boost::asio::async_read_at(s, 0, buffers,
3457 bindns::bind(async_read_handler,
3458 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3459 ioc.restart();
3460 ioc.run();
7c673cae
FG
3461 BOOST_ASIO_CHECK(called);
3462 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3463
3464 s.reset(read_data, sizeof(read_data));
3465 memset(read_buf, 0, sizeof(read_buf));
3466 called = false;
3467 boost::asio::async_read_at(s, 1234, buffers,
3468 bindns::bind(async_read_handler,
3469 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3470 ioc.restart();
3471 ioc.run();
7c673cae
FG
3472 BOOST_ASIO_CHECK(called);
3473 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3474
3475 s.reset(read_data, sizeof(read_data));
3476 s.next_read_length(1);
3477 memset(read_buf, 0, sizeof(read_buf));
3478 called = false;
3479 boost::asio::async_read_at(s, 0, buffers,
3480 bindns::bind(async_read_handler,
3481 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3482 ioc.restart();
3483 ioc.run();
7c673cae
FG
3484 BOOST_ASIO_CHECK(called);
3485 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3486
3487 s.reset(read_data, sizeof(read_data));
3488 s.next_read_length(1);
3489 memset(read_buf, 0, sizeof(read_buf));
3490 called = false;
3491 boost::asio::async_read_at(s, 1234, buffers,
3492 bindns::bind(async_read_handler,
3493 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3494 ioc.restart();
3495 ioc.run();
7c673cae
FG
3496 BOOST_ASIO_CHECK(called);
3497 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3498
3499 s.reset(read_data, sizeof(read_data));
3500 s.next_read_length(10);
3501 memset(read_buf, 0, sizeof(read_buf));
3502 called = false;
3503 boost::asio::async_read_at(s, 0, buffers,
3504 bindns::bind(async_read_handler,
3505 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3506 ioc.restart();
3507 ioc.run();
7c673cae
FG
3508 BOOST_ASIO_CHECK(called);
3509 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3510
3511 s.reset(read_data, sizeof(read_data));
3512 s.next_read_length(10);
3513 memset(read_buf, 0, sizeof(read_buf));
3514 called = false;
3515 boost::asio::async_read_at(s, 1234, buffers,
3516 bindns::bind(async_read_handler,
3517 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3518 ioc.restart();
3519 ioc.run();
7c673cae
FG
3520 BOOST_ASIO_CHECK(called);
3521 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3522
3523 s.reset(read_data, sizeof(read_data));
3524 memset(read_buf, 0, sizeof(read_buf));
3525 int i = boost::asio::async_read_at(s, 1234, buffers,
3526 archetypes::lazy_handler());
3527 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
3528 ioc.restart();
3529 ioc.run();
7c673cae
FG
3530 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3531}
3532
3533void test_4_arg_boost_array_buffers_async_read_at()
3534{
3535#if defined(BOOST_ASIO_HAS_BOOST_BIND)
3536 namespace bindns = boost;
3537#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3538 namespace bindns = std;
7c673cae 3539#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
3540 using bindns::placeholders::_1;
3541 using bindns::placeholders::_2;
7c673cae
FG
3542
3543#if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
b32b8144
FG
3544 boost::asio::io_context ioc;
3545 test_random_access_device s(ioc);
7c673cae
FG
3546 char read_buf[sizeof(read_data)];
3547 boost::array<boost::asio::mutable_buffer, 2> buffers = { {
3548 boost::asio::buffer(read_buf, 32),
3549 boost::asio::buffer(read_buf) + 32 } };
3550
3551 s.reset(read_data, sizeof(read_data));
3552 memset(read_buf, 0, sizeof(read_buf));
3553 bool called = false;
3554 boost::asio::async_read_at(s, 0, buffers,
3555 bindns::bind(async_read_handler,
3556 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3557 ioc.restart();
3558 ioc.run();
7c673cae
FG
3559 BOOST_ASIO_CHECK(called);
3560 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3561
3562 s.reset(read_data, sizeof(read_data));
3563 memset(read_buf, 0, sizeof(read_buf));
3564 called = false;
3565 boost::asio::async_read_at(s, 1234, buffers,
3566 bindns::bind(async_read_handler,
3567 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3568 ioc.restart();
3569 ioc.run();
7c673cae
FG
3570 BOOST_ASIO_CHECK(called);
3571 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3572
3573 s.reset(read_data, sizeof(read_data));
3574 s.next_read_length(1);
3575 memset(read_buf, 0, sizeof(read_buf));
3576 called = false;
3577 boost::asio::async_read_at(s, 0, buffers,
3578 bindns::bind(async_read_handler,
3579 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3580 ioc.restart();
3581 ioc.run();
7c673cae
FG
3582 BOOST_ASIO_CHECK(called);
3583 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3584
3585 s.reset(read_data, sizeof(read_data));
3586 s.next_read_length(1);
3587 memset(read_buf, 0, sizeof(read_buf));
3588 called = false;
3589 boost::asio::async_read_at(s, 1234, buffers,
3590 bindns::bind(async_read_handler,
3591 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3592 ioc.restart();
3593 ioc.run();
7c673cae
FG
3594 BOOST_ASIO_CHECK(called);
3595 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3596
3597 s.reset(read_data, sizeof(read_data));
3598 s.next_read_length(10);
3599 memset(read_buf, 0, sizeof(read_buf));
3600 called = false;
3601 boost::asio::async_read_at(s, 0, buffers,
3602 bindns::bind(async_read_handler,
3603 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3604 ioc.restart();
3605 ioc.run();
7c673cae
FG
3606 BOOST_ASIO_CHECK(called);
3607 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3608
3609 s.reset(read_data, sizeof(read_data));
3610 s.next_read_length(10);
3611 memset(read_buf, 0, sizeof(read_buf));
3612 called = false;
3613 boost::asio::async_read_at(s, 1234, buffers,
3614 bindns::bind(async_read_handler,
3615 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3616 ioc.restart();
3617 ioc.run();
7c673cae
FG
3618 BOOST_ASIO_CHECK(called);
3619 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3620
3621 s.reset(read_data, sizeof(read_data));
3622 memset(read_buf, 0, sizeof(read_buf));
3623 int i = boost::asio::async_read_at(s, 1234, buffers,
3624 archetypes::lazy_handler());
3625 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
3626 ioc.restart();
3627 ioc.run();
7c673cae
FG
3628 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3629#endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
3630}
3631
3632void test_4_arg_std_array_buffers_async_read_at()
3633{
3634#if defined(BOOST_ASIO_HAS_BOOST_BIND)
3635 namespace bindns = boost;
3636#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3637 namespace bindns = std;
7c673cae 3638#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
3639 using bindns::placeholders::_1;
3640 using bindns::placeholders::_2;
7c673cae
FG
3641
3642#if defined(BOOST_ASIO_HAS_STD_ARRAY)
b32b8144
FG
3643 boost::asio::io_context ioc;
3644 test_random_access_device s(ioc);
7c673cae
FG
3645 char read_buf[sizeof(read_data)];
3646 std::array<boost::asio::mutable_buffer, 2> buffers = { {
3647 boost::asio::buffer(read_buf, 32),
3648 boost::asio::buffer(read_buf) + 32 } };
3649
3650 s.reset(read_data, sizeof(read_data));
3651 memset(read_buf, 0, sizeof(read_buf));
3652 bool called = false;
3653 boost::asio::async_read_at(s, 0, buffers,
3654 bindns::bind(async_read_handler,
3655 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3656 ioc.restart();
3657 ioc.run();
7c673cae
FG
3658 BOOST_ASIO_CHECK(called);
3659 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
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_at(s, 1234, buffers,
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(1234, 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_at(s, 0, buffers,
3677 bindns::bind(async_read_handler,
3678 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3679 ioc.restart();
3680 ioc.run();
7c673cae
FG
3681 BOOST_ASIO_CHECK(called);
3682 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3683
3684 s.reset(read_data, sizeof(read_data));
3685 s.next_read_length(1);
3686 memset(read_buf, 0, sizeof(read_buf));
3687 called = false;
3688 boost::asio::async_read_at(s, 1234, buffers,
3689 bindns::bind(async_read_handler,
3690 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3691 ioc.restart();
3692 ioc.run();
7c673cae
FG
3693 BOOST_ASIO_CHECK(called);
3694 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3695
3696 s.reset(read_data, sizeof(read_data));
3697 s.next_read_length(10);
3698 memset(read_buf, 0, sizeof(read_buf));
3699 called = false;
3700 boost::asio::async_read_at(s, 0, buffers,
3701 bindns::bind(async_read_handler,
3702 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3703 ioc.restart();
3704 ioc.run();
7c673cae
FG
3705 BOOST_ASIO_CHECK(called);
3706 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3707
3708 s.reset(read_data, sizeof(read_data));
3709 s.next_read_length(10);
3710 memset(read_buf, 0, sizeof(read_buf));
3711 called = false;
3712 boost::asio::async_read_at(s, 1234, buffers,
3713 bindns::bind(async_read_handler,
3714 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3715 ioc.restart();
3716 ioc.run();
7c673cae
FG
3717 BOOST_ASIO_CHECK(called);
3718 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3719
3720 s.reset(read_data, sizeof(read_data));
3721 memset(read_buf, 0, sizeof(read_buf));
3722 int i = boost::asio::async_read_at(s, 1234, buffers,
3723 archetypes::lazy_handler());
3724 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
3725 ioc.restart();
3726 ioc.run();
7c673cae
FG
3727 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3728#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
3729}
3730
3731void test_4_arg_vector_buffers_async_read_at()
3732{
3733#if defined(BOOST_ASIO_HAS_BOOST_BIND)
3734 namespace bindns = boost;
3735#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3736 namespace bindns = std;
7c673cae 3737#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
3738 using bindns::placeholders::_1;
3739 using bindns::placeholders::_2;
7c673cae 3740
b32b8144
FG
3741 boost::asio::io_context ioc;
3742 test_random_access_device s(ioc);
7c673cae
FG
3743 char read_buf[sizeof(read_data)];
3744 std::vector<boost::asio::mutable_buffer> buffers;
3745 buffers.push_back(boost::asio::buffer(read_buf, 32));
3746 buffers.push_back(boost::asio::buffer(read_buf) + 32);
3747
3748 s.reset(read_data, sizeof(read_data));
3749 memset(read_buf, 0, sizeof(read_buf));
3750 bool called = false;
3751 boost::asio::async_read_at(s, 0, buffers,
3752 bindns::bind(async_read_handler,
3753 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3754 ioc.restart();
3755 ioc.run();
7c673cae
FG
3756 BOOST_ASIO_CHECK(called);
3757 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3758
3759 s.reset(read_data, sizeof(read_data));
3760 memset(read_buf, 0, sizeof(read_buf));
3761 called = false;
3762 boost::asio::async_read_at(s, 1234, buffers,
3763 bindns::bind(async_read_handler,
3764 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3765 ioc.restart();
3766 ioc.run();
7c673cae
FG
3767 BOOST_ASIO_CHECK(called);
3768 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3769
3770 s.reset(read_data, sizeof(read_data));
3771 s.next_read_length(1);
3772 memset(read_buf, 0, sizeof(read_buf));
3773 called = false;
3774 boost::asio::async_read_at(s, 0, buffers,
3775 bindns::bind(async_read_handler,
3776 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3777 ioc.restart();
3778 ioc.run();
7c673cae
FG
3779 BOOST_ASIO_CHECK(called);
3780 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3781
3782 s.reset(read_data, sizeof(read_data));
3783 s.next_read_length(1);
3784 memset(read_buf, 0, sizeof(read_buf));
3785 called = false;
3786 boost::asio::async_read_at(s, 1234, buffers,
3787 bindns::bind(async_read_handler,
3788 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3789 ioc.restart();
3790 ioc.run();
7c673cae
FG
3791 BOOST_ASIO_CHECK(called);
3792 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3793
3794 s.reset(read_data, sizeof(read_data));
3795 s.next_read_length(10);
3796 memset(read_buf, 0, sizeof(read_buf));
3797 called = false;
3798 boost::asio::async_read_at(s, 0, buffers,
3799 bindns::bind(async_read_handler,
3800 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3801 ioc.restart();
3802 ioc.run();
7c673cae
FG
3803 BOOST_ASIO_CHECK(called);
3804 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3805
3806 s.reset(read_data, sizeof(read_data));
3807 s.next_read_length(10);
3808 memset(read_buf, 0, sizeof(read_buf));
3809 called = false;
3810 boost::asio::async_read_at(s, 1234, buffers,
3811 bindns::bind(async_read_handler,
3812 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3813 ioc.restart();
3814 ioc.run();
7c673cae
FG
3815 BOOST_ASIO_CHECK(called);
3816 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3817
3818 s.reset(read_data, sizeof(read_data));
3819 memset(read_buf, 0, sizeof(read_buf));
3820 int i = boost::asio::async_read_at(s, 1234, buffers,
3821 archetypes::lazy_handler());
3822 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
3823 ioc.restart();
3824 ioc.run();
7c673cae
FG
3825 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3826}
3827
3828void test_4_arg_streambuf_async_read_at()
3829{
3830#if defined(BOOST_ASIO_HAS_BOOST_BIND)
3831 namespace bindns = boost;
3832#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3833 namespace bindns = std;
7c673cae 3834#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
3835 using bindns::placeholders::_1;
3836 using bindns::placeholders::_2;
7c673cae 3837
b32b8144
FG
3838 boost::asio::io_context ioc;
3839 test_random_access_device s(ioc);
7c673cae
FG
3840 boost::asio::streambuf sb(sizeof(read_data));
3841
3842 s.reset(read_data, sizeof(read_data));
3843 sb.consume(sb.size());
3844 bool called = false;
3845 boost::asio::async_read_at(s, 0, sb,
3846 bindns::bind(async_read_handler,
3847 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3848 ioc.restart();
3849 ioc.run();
7c673cae
FG
3850 BOOST_ASIO_CHECK(called);
3851 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3852 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3853
3854 s.reset(read_data, sizeof(read_data));
3855 sb.consume(sb.size());
3856 called = false;
3857 boost::asio::async_read_at(s, 1234, sb,
3858 bindns::bind(async_read_handler,
3859 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3860 ioc.restart();
3861 ioc.run();
7c673cae
FG
3862 BOOST_ASIO_CHECK(called);
3863 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3864 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3865
3866 s.reset(read_data, sizeof(read_data));
3867 s.next_read_length(1);
3868 sb.consume(sb.size());
3869 called = false;
3870 boost::asio::async_read_at(s, 0, sb,
3871 bindns::bind(async_read_handler,
3872 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3873 ioc.restart();
3874 ioc.run();
7c673cae
FG
3875 BOOST_ASIO_CHECK(called);
3876 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3877 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3878
3879 s.reset(read_data, sizeof(read_data));
3880 s.next_read_length(1);
3881 sb.consume(sb.size());
3882 called = false;
3883 boost::asio::async_read_at(s, 1234, sb,
3884 bindns::bind(async_read_handler,
3885 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3886 ioc.restart();
3887 ioc.run();
7c673cae
FG
3888 BOOST_ASIO_CHECK(called);
3889 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3890 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3891
3892 s.reset(read_data, sizeof(read_data));
3893 s.next_read_length(10);
3894 sb.consume(sb.size());
3895 called = false;
3896 boost::asio::async_read_at(s, 0, sb,
3897 bindns::bind(async_read_handler,
3898 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3899 ioc.restart();
3900 ioc.run();
7c673cae
FG
3901 BOOST_ASIO_CHECK(called);
3902 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3903 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3904
3905 s.reset(read_data, sizeof(read_data));
3906 s.next_read_length(10);
3907 sb.consume(sb.size());
3908 called = false;
3909 boost::asio::async_read_at(s, 1234, sb,
3910 bindns::bind(async_read_handler,
3911 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3912 ioc.restart();
3913 ioc.run();
7c673cae
FG
3914 BOOST_ASIO_CHECK(called);
3915 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3916 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3917
3918 s.reset(read_data, sizeof(read_data));
3919 sb.consume(sb.size());
3920 int i = boost::asio::async_read_at(s, 1234, sb,
3921 archetypes::lazy_handler());
3922 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
3923 ioc.restart();
3924 ioc.run();
7c673cae
FG
3925 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3926}
3927
b32b8144 3928void test_5_arg_mutable_buffer_async_read_at()
7c673cae
FG
3929{
3930#if defined(BOOST_ASIO_HAS_BOOST_BIND)
3931 namespace bindns = boost;
3932#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3933 namespace bindns = std;
7c673cae 3934#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
3935 using bindns::placeholders::_1;
3936 using bindns::placeholders::_2;
7c673cae 3937
b32b8144
FG
3938 boost::asio::io_context ioc;
3939 test_random_access_device s(ioc);
7c673cae 3940 char read_buf[sizeof(read_data)];
b32b8144 3941 boost::asio::mutable_buffer buffers
7c673cae
FG
3942 = boost::asio::buffer(read_buf, sizeof(read_buf));
3943
3944 s.reset(read_data, sizeof(read_data));
3945 memset(read_buf, 0, sizeof(read_buf));
3946 bool called = false;
3947 boost::asio::async_read_at(s, 0, buffers,
3948 boost::asio::transfer_all(),
3949 bindns::bind(async_read_handler,
3950 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3951 ioc.restart();
3952 ioc.run();
7c673cae
FG
3953 BOOST_ASIO_CHECK(called);
3954 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3955
3956 s.reset(read_data, sizeof(read_data));
3957 memset(read_buf, 0, sizeof(read_buf));
3958 called = false;
3959 boost::asio::async_read_at(s, 1234, buffers,
3960 boost::asio::transfer_all(),
3961 bindns::bind(async_read_handler,
3962 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3963 ioc.restart();
3964 ioc.run();
7c673cae
FG
3965 BOOST_ASIO_CHECK(called);
3966 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3967
3968 s.reset(read_data, sizeof(read_data));
3969 s.next_read_length(1);
3970 memset(read_buf, 0, sizeof(read_buf));
3971 called = false;
3972 boost::asio::async_read_at(s, 0, buffers,
3973 boost::asio::transfer_all(),
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(0, 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_at(s, 1234, buffers,
3986 boost::asio::transfer_all(),
3987 bindns::bind(async_read_handler,
3988 _1, _2, sizeof(read_data), &called));
b32b8144
FG
3989 ioc.restart();
3990 ioc.run();
7c673cae
FG
3991 BOOST_ASIO_CHECK(called);
3992 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3993
3994 s.reset(read_data, sizeof(read_data));
3995 s.next_read_length(10);
3996 memset(read_buf, 0, sizeof(read_buf));
3997 called = false;
3998 boost::asio::async_read_at(s, 0, buffers,
3999 boost::asio::transfer_all(),
4000 bindns::bind(async_read_handler,
4001 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4002 ioc.restart();
4003 ioc.run();
7c673cae
FG
4004 BOOST_ASIO_CHECK(called);
4005 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4006
4007 s.reset(read_data, sizeof(read_data));
4008 s.next_read_length(10);
4009 memset(read_buf, 0, sizeof(read_buf));
4010 called = false;
4011 boost::asio::async_read_at(s, 1234, buffers,
4012 boost::asio::transfer_all(),
4013 bindns::bind(async_read_handler,
4014 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4015 ioc.restart();
4016 ioc.run();
7c673cae
FG
4017 BOOST_ASIO_CHECK(called);
4018 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4019
4020 s.reset(read_data, sizeof(read_data));
4021 memset(read_buf, 0, sizeof(read_buf));
4022 called = false;
4023 boost::asio::async_read_at(s, 0, buffers,
4024 boost::asio::transfer_at_least(1),
4025 bindns::bind(async_read_handler,
4026 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4027 ioc.restart();
4028 ioc.run();
7c673cae
FG
4029 BOOST_ASIO_CHECK(called);
4030 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4031
4032 s.reset(read_data, sizeof(read_data));
4033 memset(read_buf, 0, sizeof(read_buf));
4034 called = false;
4035 boost::asio::async_read_at(s, 1234, buffers,
4036 boost::asio::transfer_at_least(1),
4037 bindns::bind(async_read_handler,
4038 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4039 ioc.restart();
4040 ioc.run();
7c673cae
FG
4041 BOOST_ASIO_CHECK(called);
4042 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4043
4044 s.reset(read_data, sizeof(read_data));
4045 s.next_read_length(1);
4046 memset(read_buf, 0, sizeof(read_buf));
4047 called = false;
4048 boost::asio::async_read_at(s, 0, buffers,
4049 boost::asio::transfer_at_least(1),
4050 bindns::bind(async_read_handler,
4051 _1, _2, 1, &called));
b32b8144
FG
4052 ioc.restart();
4053 ioc.run();
7c673cae
FG
4054 BOOST_ASIO_CHECK(called);
4055 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
4056
4057 s.reset(read_data, sizeof(read_data));
4058 s.next_read_length(1);
4059 memset(read_buf, 0, sizeof(read_buf));
4060 called = false;
4061 boost::asio::async_read_at(s, 1234, buffers,
4062 boost::asio::transfer_at_least(1),
4063 bindns::bind(async_read_handler,
4064 _1, _2, 1, &called));
b32b8144
FG
4065 ioc.restart();
4066 ioc.run();
7c673cae
FG
4067 BOOST_ASIO_CHECK(called);
4068 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
4069
4070 s.reset(read_data, sizeof(read_data));
4071 s.next_read_length(10);
4072 memset(read_buf, 0, sizeof(read_buf));
4073 called = false;
4074 boost::asio::async_read_at(s, 0, buffers,
4075 boost::asio::transfer_at_least(1),
4076 bindns::bind(async_read_handler,
4077 _1, _2, 10, &called));
b32b8144
FG
4078 ioc.restart();
4079 ioc.run();
7c673cae
FG
4080 BOOST_ASIO_CHECK(called);
4081 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4082
4083 s.reset(read_data, sizeof(read_data));
4084 s.next_read_length(10);
4085 memset(read_buf, 0, sizeof(read_buf));
4086 called = false;
4087 boost::asio::async_read_at(s, 1234, buffers,
4088 boost::asio::transfer_at_least(1),
4089 bindns::bind(async_read_handler,
4090 _1, _2, 10, &called));
b32b8144
FG
4091 ioc.restart();
4092 ioc.run();
7c673cae
FG
4093 BOOST_ASIO_CHECK(called);
4094 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4095
4096 s.reset(read_data, sizeof(read_data));
4097 memset(read_buf, 0, sizeof(read_buf));
4098 called = false;
4099 boost::asio::async_read_at(s, 0, buffers,
4100 boost::asio::transfer_at_least(10),
4101 bindns::bind(async_read_handler,
4102 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4103 ioc.restart();
4104 ioc.run();
7c673cae
FG
4105 BOOST_ASIO_CHECK(called);
4106 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4107
4108 s.reset(read_data, sizeof(read_data));
4109 memset(read_buf, 0, sizeof(read_buf));
4110 called = false;
4111 boost::asio::async_read_at(s, 1234, buffers,
4112 boost::asio::transfer_at_least(10),
4113 bindns::bind(async_read_handler,
4114 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4115 ioc.restart();
4116 ioc.run();
7c673cae
FG
4117 BOOST_ASIO_CHECK(called);
4118 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4119
4120 s.reset(read_data, sizeof(read_data));
4121 s.next_read_length(1);
4122 memset(read_buf, 0, sizeof(read_buf));
4123 called = false;
4124 boost::asio::async_read_at(s, 0, buffers,
4125 boost::asio::transfer_at_least(10),
4126 bindns::bind(async_read_handler,
4127 _1, _2, 10, &called));
b32b8144
FG
4128 ioc.restart();
4129 ioc.run();
7c673cae
FG
4130 BOOST_ASIO_CHECK(called);
4131 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4132
4133 s.reset(read_data, sizeof(read_data));
4134 s.next_read_length(1);
4135 memset(read_buf, 0, sizeof(read_buf));
4136 called = false;
4137 boost::asio::async_read_at(s, 1234, buffers,
4138 boost::asio::transfer_at_least(10),
4139 bindns::bind(async_read_handler,
4140 _1, _2, 10, &called));
b32b8144
FG
4141 ioc.restart();
4142 ioc.run();
7c673cae
FG
4143 BOOST_ASIO_CHECK(called);
4144 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4145
4146 s.reset(read_data, sizeof(read_data));
4147 s.next_read_length(10);
4148 memset(read_buf, 0, sizeof(read_buf));
4149 called = false;
4150 boost::asio::async_read_at(s, 0, buffers,
4151 boost::asio::transfer_at_least(10),
4152 bindns::bind(async_read_handler,
4153 _1, _2, 10, &called));
b32b8144
FG
4154 ioc.restart();
4155 ioc.run();
7c673cae
FG
4156 BOOST_ASIO_CHECK(called);
4157 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4158
4159 s.reset(read_data, sizeof(read_data));
4160 s.next_read_length(10);
4161 memset(read_buf, 0, sizeof(read_buf));
4162 called = false;
4163 boost::asio::async_read_at(s, 1234, buffers,
4164 boost::asio::transfer_at_least(10),
4165 bindns::bind(async_read_handler,
4166 _1, _2, 10, &called));
b32b8144
FG
4167 ioc.restart();
4168 ioc.run();
7c673cae
FG
4169 BOOST_ASIO_CHECK(called);
4170 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4171
4172 s.reset(read_data, sizeof(read_data));
4173 memset(read_buf, 0, sizeof(read_buf));
4174 called = false;
4175 boost::asio::async_read_at(s, 0, buffers,
4176 boost::asio::transfer_at_least(42),
4177 bindns::bind(async_read_handler,
4178 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4179 ioc.restart();
4180 ioc.run();
7c673cae
FG
4181 BOOST_ASIO_CHECK(called);
4182 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4183
4184 s.reset(read_data, sizeof(read_data));
4185 memset(read_buf, 0, sizeof(read_buf));
4186 called = false;
4187 boost::asio::async_read_at(s, 1234, buffers,
4188 boost::asio::transfer_at_least(42),
4189 bindns::bind(async_read_handler,
4190 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4191 ioc.restart();
4192 ioc.run();
7c673cae
FG
4193 BOOST_ASIO_CHECK(called);
4194 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4195
4196 s.reset(read_data, sizeof(read_data));
4197 s.next_read_length(1);
4198 memset(read_buf, 0, sizeof(read_buf));
4199 called = false;
4200 boost::asio::async_read_at(s, 0, buffers,
4201 boost::asio::transfer_at_least(42),
4202 bindns::bind(async_read_handler,
4203 _1, _2, 42, &called));
b32b8144
FG
4204 ioc.restart();
4205 ioc.run();
7c673cae
FG
4206 BOOST_ASIO_CHECK(called);
4207 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
4208
4209 s.reset(read_data, sizeof(read_data));
4210 s.next_read_length(1);
4211 memset(read_buf, 0, sizeof(read_buf));
4212 called = false;
4213 boost::asio::async_read_at(s, 1234, buffers,
4214 boost::asio::transfer_at_least(42),
4215 bindns::bind(async_read_handler,
4216 _1, _2, 42, &called));
b32b8144
FG
4217 ioc.restart();
4218 ioc.run();
7c673cae
FG
4219 BOOST_ASIO_CHECK(called);
4220 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
4221
4222 s.reset(read_data, sizeof(read_data));
4223 s.next_read_length(10);
4224 memset(read_buf, 0, sizeof(read_buf));
4225 called = false;
4226 boost::asio::async_read_at(s, 0, buffers,
4227 boost::asio::transfer_at_least(42),
4228 bindns::bind(async_read_handler,
4229 _1, _2, 50, &called));
b32b8144
FG
4230 ioc.restart();
4231 ioc.run();
7c673cae
FG
4232 BOOST_ASIO_CHECK(called);
4233 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
4234
4235 s.reset(read_data, sizeof(read_data));
4236 s.next_read_length(10);
4237 memset(read_buf, 0, sizeof(read_buf));
4238 called = false;
4239 boost::asio::async_read_at(s, 1234, buffers,
4240 boost::asio::transfer_at_least(42),
4241 bindns::bind(async_read_handler,
4242 _1, _2, 50, &called));
b32b8144
FG
4243 ioc.restart();
4244 ioc.run();
7c673cae
FG
4245 BOOST_ASIO_CHECK(called);
4246 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
4247
4248 s.reset(read_data, sizeof(read_data));
4249 memset(read_buf, 0, sizeof(read_buf));
4250 called = false;
4251 boost::asio::async_read_at(s, 0, buffers,
4252 boost::asio::transfer_exactly(1),
4253 bindns::bind(async_read_handler,
4254 _1, _2, 1, &called));
b32b8144
FG
4255 ioc.restart();
4256 ioc.run();
7c673cae
FG
4257 BOOST_ASIO_CHECK(called);
4258 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
4259
4260 s.reset(read_data, sizeof(read_data));
4261 memset(read_buf, 0, sizeof(read_buf));
4262 called = false;
4263 boost::asio::async_read_at(s, 1234, buffers,
4264 boost::asio::transfer_exactly(1),
4265 bindns::bind(async_read_handler,
4266 _1, _2, 1, &called));
b32b8144
FG
4267 ioc.restart();
4268 ioc.run();
7c673cae
FG
4269 BOOST_ASIO_CHECK(called);
4270 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
4271
4272 s.reset(read_data, sizeof(read_data));
4273 s.next_read_length(1);
4274 memset(read_buf, 0, sizeof(read_buf));
4275 called = false;
4276 boost::asio::async_read_at(s, 0, buffers,
4277 boost::asio::transfer_exactly(1),
4278 bindns::bind(async_read_handler,
4279 _1, _2, 1, &called));
b32b8144
FG
4280 ioc.restart();
4281 ioc.run();
7c673cae
FG
4282 BOOST_ASIO_CHECK(called);
4283 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
4284
4285 s.reset(read_data, sizeof(read_data));
4286 s.next_read_length(1);
4287 memset(read_buf, 0, sizeof(read_buf));
4288 called = false;
4289 boost::asio::async_read_at(s, 1234, buffers,
4290 boost::asio::transfer_exactly(1),
4291 bindns::bind(async_read_handler,
4292 _1, _2, 1, &called));
b32b8144
FG
4293 ioc.restart();
4294 ioc.run();
7c673cae
FG
4295 BOOST_ASIO_CHECK(called);
4296 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
4297
4298 s.reset(read_data, sizeof(read_data));
4299 s.next_read_length(10);
4300 memset(read_buf, 0, sizeof(read_buf));
4301 called = false;
4302 boost::asio::async_read_at(s, 0, buffers,
4303 boost::asio::transfer_exactly(1),
4304 bindns::bind(async_read_handler,
4305 _1, _2, 1, &called));
b32b8144
FG
4306 ioc.restart();
4307 ioc.run();
7c673cae
FG
4308 BOOST_ASIO_CHECK(called);
4309 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
4310
4311 s.reset(read_data, sizeof(read_data));
4312 s.next_read_length(10);
4313 memset(read_buf, 0, sizeof(read_buf));
4314 called = false;
4315 boost::asio::async_read_at(s, 1234, buffers,
4316 boost::asio::transfer_exactly(1),
4317 bindns::bind(async_read_handler,
4318 _1, _2, 1, &called));
b32b8144
FG
4319 ioc.restart();
4320 ioc.run();
7c673cae
FG
4321 BOOST_ASIO_CHECK(called);
4322 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
4323
4324 s.reset(read_data, sizeof(read_data));
4325 memset(read_buf, 0, sizeof(read_buf));
4326 called = false;
4327 boost::asio::async_read_at(s, 0, buffers,
4328 boost::asio::transfer_exactly(10),
4329 bindns::bind(async_read_handler,
4330 _1, _2, 10, &called));
b32b8144
FG
4331 ioc.restart();
4332 ioc.run();
7c673cae
FG
4333 BOOST_ASIO_CHECK(called);
4334 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4335
4336 s.reset(read_data, sizeof(read_data));
4337 memset(read_buf, 0, sizeof(read_buf));
4338 called = false;
4339 boost::asio::async_read_at(s, 1234, buffers,
4340 boost::asio::transfer_exactly(10),
4341 bindns::bind(async_read_handler,
4342 _1, _2, 10, &called));
b32b8144
FG
4343 ioc.restart();
4344 ioc.run();
7c673cae
FG
4345 BOOST_ASIO_CHECK(called);
4346 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4347
4348 s.reset(read_data, sizeof(read_data));
4349 s.next_read_length(1);
4350 memset(read_buf, 0, sizeof(read_buf));
4351 called = false;
4352 boost::asio::async_read_at(s, 0, buffers,
4353 boost::asio::transfer_exactly(10),
4354 bindns::bind(async_read_handler,
4355 _1, _2, 10, &called));
b32b8144
FG
4356 ioc.restart();
4357 ioc.run();
7c673cae
FG
4358 BOOST_ASIO_CHECK(called);
4359 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4360
4361 s.reset(read_data, sizeof(read_data));
4362 s.next_read_length(1);
4363 memset(read_buf, 0, sizeof(read_buf));
4364 called = false;
4365 boost::asio::async_read_at(s, 1234, buffers,
4366 boost::asio::transfer_exactly(10),
4367 bindns::bind(async_read_handler,
4368 _1, _2, 10, &called));
b32b8144
FG
4369 ioc.restart();
4370 ioc.run();
7c673cae
FG
4371 BOOST_ASIO_CHECK(called);
4372 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4373
4374 s.reset(read_data, sizeof(read_data));
4375 s.next_read_length(10);
4376 memset(read_buf, 0, sizeof(read_buf));
4377 called = false;
4378 boost::asio::async_read_at(s, 0, buffers,
4379 boost::asio::transfer_exactly(10),
4380 bindns::bind(async_read_handler,
4381 _1, _2, 10, &called));
b32b8144
FG
4382 ioc.restart();
4383 ioc.run();
7c673cae
FG
4384 BOOST_ASIO_CHECK(called);
4385 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4386
4387 s.reset(read_data, sizeof(read_data));
4388 s.next_read_length(10);
4389 memset(read_buf, 0, sizeof(read_buf));
4390 called = false;
4391 boost::asio::async_read_at(s, 1234, buffers,
4392 boost::asio::transfer_exactly(10),
4393 bindns::bind(async_read_handler,
4394 _1, _2, 10, &called));
b32b8144
FG
4395 ioc.restart();
4396 ioc.run();
7c673cae
FG
4397 BOOST_ASIO_CHECK(called);
4398 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4399
4400 s.reset(read_data, sizeof(read_data));
4401 memset(read_buf, 0, sizeof(read_buf));
4402 called = false;
4403 boost::asio::async_read_at(s, 0, buffers,
4404 boost::asio::transfer_exactly(42),
4405 bindns::bind(async_read_handler,
4406 _1, _2, 42, &called));
b32b8144
FG
4407 ioc.restart();
4408 ioc.run();
7c673cae
FG
4409 BOOST_ASIO_CHECK(called);
4410 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
4411
4412 s.reset(read_data, sizeof(read_data));
4413 memset(read_buf, 0, sizeof(read_buf));
4414 called = false;
4415 boost::asio::async_read_at(s, 1234, buffers,
4416 boost::asio::transfer_exactly(42),
4417 bindns::bind(async_read_handler,
4418 _1, _2, 42, &called));
b32b8144
FG
4419 ioc.restart();
4420 ioc.run();
7c673cae
FG
4421 BOOST_ASIO_CHECK(called);
4422 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
4423
4424 s.reset(read_data, sizeof(read_data));
4425 s.next_read_length(1);
4426 memset(read_buf, 0, sizeof(read_buf));
4427 called = false;
4428 boost::asio::async_read_at(s, 0, buffers,
4429 boost::asio::transfer_exactly(42),
4430 bindns::bind(async_read_handler,
4431 _1, _2, 42, &called));
b32b8144
FG
4432 ioc.restart();
4433 ioc.run();
7c673cae
FG
4434 BOOST_ASIO_CHECK(called);
4435 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
4436
4437 s.reset(read_data, sizeof(read_data));
4438 s.next_read_length(1);
4439 memset(read_buf, 0, sizeof(read_buf));
4440 called = false;
4441 boost::asio::async_read_at(s, 1234, buffers,
4442 boost::asio::transfer_exactly(42),
4443 bindns::bind(async_read_handler,
4444 _1, _2, 42, &called));
b32b8144
FG
4445 ioc.restart();
4446 ioc.run();
7c673cae
FG
4447 BOOST_ASIO_CHECK(called);
4448 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
4449
4450 s.reset(read_data, sizeof(read_data));
4451 s.next_read_length(10);
4452 memset(read_buf, 0, sizeof(read_buf));
4453 called = false;
4454 boost::asio::async_read_at(s, 0, buffers,
4455 boost::asio::transfer_exactly(42),
4456 bindns::bind(async_read_handler,
4457 _1, _2, 42, &called));
b32b8144
FG
4458 ioc.restart();
4459 ioc.run();
7c673cae
FG
4460 BOOST_ASIO_CHECK(called);
4461 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
4462
4463 s.reset(read_data, sizeof(read_data));
4464 s.next_read_length(10);
4465 memset(read_buf, 0, sizeof(read_buf));
4466 called = false;
4467 boost::asio::async_read_at(s, 1234, buffers,
4468 boost::asio::transfer_exactly(42),
4469 bindns::bind(async_read_handler,
4470 _1, _2, 42, &called));
b32b8144
FG
4471 ioc.restart();
4472 ioc.run();
7c673cae
FG
4473 BOOST_ASIO_CHECK(called);
4474 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
4475
4476 s.reset(read_data, sizeof(read_data));
4477 memset(read_buf, 0, sizeof(read_buf));
4478 called = false;
4479 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
4480 bindns::bind(async_read_handler,
4481 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4482 ioc.restart();
4483 ioc.run();
7c673cae
FG
4484 BOOST_ASIO_CHECK(called);
4485 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4486
4487 s.reset(read_data, sizeof(read_data));
4488 memset(read_buf, 0, sizeof(read_buf));
4489 called = false;
4490 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
4491 bindns::bind(async_read_handler,
4492 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4493 ioc.restart();
4494 ioc.run();
7c673cae
FG
4495 BOOST_ASIO_CHECK(called);
4496 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4497
4498 s.reset(read_data, sizeof(read_data));
4499 s.next_read_length(1);
4500 memset(read_buf, 0, sizeof(read_buf));
4501 called = false;
4502 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
4503 bindns::bind(async_read_handler,
4504 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4505 ioc.restart();
4506 ioc.run();
7c673cae
FG
4507 BOOST_ASIO_CHECK(called);
4508 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4509
4510 s.reset(read_data, sizeof(read_data));
4511 s.next_read_length(1);
4512 memset(read_buf, 0, sizeof(read_buf));
4513 called = false;
4514 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
4515 bindns::bind(async_read_handler,
4516 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4517 ioc.restart();
4518 ioc.run();
7c673cae
FG
4519 BOOST_ASIO_CHECK(called);
4520 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4521
4522 s.reset(read_data, sizeof(read_data));
4523 s.next_read_length(10);
4524 memset(read_buf, 0, sizeof(read_buf));
4525 called = false;
4526 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
4527 bindns::bind(async_read_handler,
4528 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4529 ioc.restart();
4530 ioc.run();
7c673cae
FG
4531 BOOST_ASIO_CHECK(called);
4532 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4533
4534 s.reset(read_data, sizeof(read_data));
4535 s.next_read_length(10);
4536 memset(read_buf, 0, sizeof(read_buf));
4537 called = false;
4538 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
4539 bindns::bind(async_read_handler,
4540 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4541 ioc.restart();
4542 ioc.run();
7c673cae
FG
4543 BOOST_ASIO_CHECK(called);
4544 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4545
4546 s.reset(read_data, sizeof(read_data));
4547 memset(read_buf, 0, sizeof(read_buf));
4548 called = false;
92f5a8d4 4549 boost::asio::async_read_at(s, 0, buffers, 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
FG
4554 BOOST_ASIO_CHECK(called);
4555 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4556
4557 s.reset(read_data, sizeof(read_data));
4558 memset(read_buf, 0, sizeof(read_buf));
4559 called = false;
92f5a8d4 4560 boost::asio::async_read_at(s, 1234, buffers, short_transfer(),
7c673cae
FG
4561 bindns::bind(async_read_handler,
4562 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4563 ioc.restart();
4564 ioc.run();
7c673cae
FG
4565 BOOST_ASIO_CHECK(called);
4566 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4567
4568 s.reset(read_data, sizeof(read_data));
4569 s.next_read_length(1);
4570 memset(read_buf, 0, sizeof(read_buf));
4571 called = false;
92f5a8d4 4572 boost::asio::async_read_at(s, 0, buffers, short_transfer(),
7c673cae
FG
4573 bindns::bind(async_read_handler,
4574 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4575 ioc.restart();
4576 ioc.run();
7c673cae
FG
4577 BOOST_ASIO_CHECK(called);
4578 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4579
4580 s.reset(read_data, sizeof(read_data));
4581 s.next_read_length(1);
4582 memset(read_buf, 0, sizeof(read_buf));
4583 called = false;
92f5a8d4 4584 boost::asio::async_read_at(s, 1234, buffers, short_transfer(),
7c673cae
FG
4585 bindns::bind(async_read_handler,
4586 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4587 ioc.restart();
4588 ioc.run();
7c673cae
FG
4589 BOOST_ASIO_CHECK(called);
4590 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4591
4592 s.reset(read_data, sizeof(read_data));
4593 s.next_read_length(10);
4594 memset(read_buf, 0, sizeof(read_buf));
4595 called = false;
92f5a8d4 4596 boost::asio::async_read_at(s, 0, buffers, short_transfer(),
7c673cae
FG
4597 bindns::bind(async_read_handler,
4598 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4599 ioc.restart();
4600 ioc.run();
7c673cae
FG
4601 BOOST_ASIO_CHECK(called);
4602 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4603
4604 s.reset(read_data, sizeof(read_data));
4605 s.next_read_length(10);
4606 memset(read_buf, 0, sizeof(read_buf));
4607 called = false;
92f5a8d4 4608 boost::asio::async_read_at(s, 1234, buffers, short_transfer(),
7c673cae
FG
4609 bindns::bind(async_read_handler,
4610 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4611 ioc.restart();
4612 ioc.run();
7c673cae
FG
4613 BOOST_ASIO_CHECK(called);
4614 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4615
4616 s.reset(read_data, sizeof(read_data));
4617 memset(read_buf, 0, sizeof(read_buf));
4618 int i = boost::asio::async_read_at(s, 1234, buffers,
92f5a8d4 4619 short_transfer(), archetypes::lazy_handler());
7c673cae 4620 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
4621 ioc.restart();
4622 ioc.run();
7c673cae
FG
4623 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4624}
4625
4626void test_5_arg_boost_array_buffers_async_read_at()
4627{
4628#if defined(BOOST_ASIO_HAS_BOOST_BIND)
4629 namespace bindns = boost;
4630#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
4631 namespace bindns = std;
7c673cae 4632#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
4633 using bindns::placeholders::_1;
4634 using bindns::placeholders::_2;
7c673cae
FG
4635
4636#if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
b32b8144
FG
4637 boost::asio::io_context ioc;
4638 test_random_access_device s(ioc);
7c673cae
FG
4639 char read_buf[sizeof(read_data)];
4640 boost::array<boost::asio::mutable_buffer, 2> buffers = { {
4641 boost::asio::buffer(read_buf, 32),
4642 boost::asio::buffer(read_buf) + 32 } };
4643
4644 s.reset(read_data, sizeof(read_data));
4645 memset(read_buf, 0, sizeof(read_buf));
4646 bool called = false;
4647 boost::asio::async_read_at(s, 0, buffers,
4648 boost::asio::transfer_all(),
4649 bindns::bind(async_read_handler,
4650 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4651 ioc.restart();
4652 ioc.run();
7c673cae
FG
4653 BOOST_ASIO_CHECK(called);
4654 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4655
4656 s.reset(read_data, sizeof(read_data));
4657 memset(read_buf, 0, sizeof(read_buf));
4658 called = false;
4659 boost::asio::async_read_at(s, 1234, buffers,
4660 boost::asio::transfer_all(),
4661 bindns::bind(async_read_handler,
4662 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4663 ioc.restart();
4664 ioc.run();
7c673cae
FG
4665 BOOST_ASIO_CHECK(called);
4666 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4667
4668 s.reset(read_data, sizeof(read_data));
4669 s.next_read_length(1);
4670 memset(read_buf, 0, sizeof(read_buf));
4671 called = false;
4672 boost::asio::async_read_at(s, 0, buffers,
4673 boost::asio::transfer_all(),
4674 bindns::bind(async_read_handler,
4675 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4676 ioc.restart();
4677 ioc.run();
7c673cae
FG
4678 BOOST_ASIO_CHECK(called);
4679 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4680
4681 s.reset(read_data, sizeof(read_data));
4682 s.next_read_length(1);
4683 memset(read_buf, 0, sizeof(read_buf));
4684 called = false;
4685 boost::asio::async_read_at(s, 1234, buffers,
4686 boost::asio::transfer_all(),
4687 bindns::bind(async_read_handler,
4688 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4689 ioc.restart();
4690 ioc.run();
7c673cae
FG
4691 BOOST_ASIO_CHECK(called);
4692 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4693
4694 s.reset(read_data, sizeof(read_data));
4695 s.next_read_length(10);
4696 memset(read_buf, 0, sizeof(read_buf));
4697 called = false;
4698 boost::asio::async_read_at(s, 0, buffers,
4699 boost::asio::transfer_all(),
4700 bindns::bind(async_read_handler,
4701 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4702 ioc.restart();
4703 ioc.run();
7c673cae
FG
4704 BOOST_ASIO_CHECK(called);
4705 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4706
4707 s.reset(read_data, sizeof(read_data));
4708 s.next_read_length(10);
4709 memset(read_buf, 0, sizeof(read_buf));
4710 called = false;
4711 boost::asio::async_read_at(s, 1234, buffers,
4712 boost::asio::transfer_all(),
4713 bindns::bind(async_read_handler,
4714 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4715 ioc.restart();
4716 ioc.run();
7c673cae
FG
4717 BOOST_ASIO_CHECK(called);
4718 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4719
4720 s.reset(read_data, sizeof(read_data));
4721 memset(read_buf, 0, sizeof(read_buf));
4722 called = false;
4723 boost::asio::async_read_at(s, 0, buffers,
4724 boost::asio::transfer_at_least(1),
4725 bindns::bind(async_read_handler,
4726 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4727 ioc.restart();
4728 ioc.run();
7c673cae
FG
4729 BOOST_ASIO_CHECK(called);
4730 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4731
4732 s.reset(read_data, sizeof(read_data));
4733 memset(read_buf, 0, sizeof(read_buf));
4734 called = false;
4735 boost::asio::async_read_at(s, 1234, buffers,
4736 boost::asio::transfer_at_least(1),
4737 bindns::bind(async_read_handler,
4738 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4739 ioc.restart();
4740 ioc.run();
7c673cae
FG
4741 BOOST_ASIO_CHECK(called);
4742 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4743
4744 s.reset(read_data, sizeof(read_data));
4745 s.next_read_length(1);
4746 memset(read_buf, 0, sizeof(read_buf));
4747 called = false;
4748 boost::asio::async_read_at(s, 0, buffers,
4749 boost::asio::transfer_at_least(1),
4750 bindns::bind(async_read_handler,
4751 _1, _2, 1, &called));
b32b8144
FG
4752 ioc.restart();
4753 ioc.run();
7c673cae
FG
4754 BOOST_ASIO_CHECK(called);
4755 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
4756
4757 s.reset(read_data, sizeof(read_data));
4758 s.next_read_length(1);
4759 memset(read_buf, 0, sizeof(read_buf));
4760 called = false;
4761 boost::asio::async_read_at(s, 1234, buffers,
4762 boost::asio::transfer_at_least(1),
4763 bindns::bind(async_read_handler,
4764 _1, _2, 1, &called));
b32b8144
FG
4765 ioc.restart();
4766 ioc.run();
7c673cae
FG
4767 BOOST_ASIO_CHECK(called);
4768 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
4769
4770 s.reset(read_data, sizeof(read_data));
4771 s.next_read_length(10);
4772 memset(read_buf, 0, sizeof(read_buf));
4773 called = false;
4774 boost::asio::async_read_at(s, 0, buffers,
4775 boost::asio::transfer_at_least(1),
4776 bindns::bind(async_read_handler,
4777 _1, _2, 10, &called));
b32b8144
FG
4778 ioc.restart();
4779 ioc.run();
7c673cae
FG
4780 BOOST_ASIO_CHECK(called);
4781 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4782
4783 s.reset(read_data, sizeof(read_data));
4784 s.next_read_length(10);
4785 memset(read_buf, 0, sizeof(read_buf));
4786 called = false;
4787 boost::asio::async_read_at(s, 1234, buffers,
4788 boost::asio::transfer_at_least(1),
4789 bindns::bind(async_read_handler,
4790 _1, _2, 10, &called));
b32b8144
FG
4791 ioc.restart();
4792 ioc.run();
7c673cae
FG
4793 BOOST_ASIO_CHECK(called);
4794 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4795
4796 s.reset(read_data, sizeof(read_data));
4797 memset(read_buf, 0, sizeof(read_buf));
4798 called = false;
4799 boost::asio::async_read_at(s, 0, buffers,
4800 boost::asio::transfer_at_least(10),
4801 bindns::bind(async_read_handler,
4802 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4803 ioc.restart();
4804 ioc.run();
7c673cae
FG
4805 BOOST_ASIO_CHECK(called);
4806 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4807
4808 s.reset(read_data, sizeof(read_data));
4809 memset(read_buf, 0, sizeof(read_buf));
4810 called = false;
4811 boost::asio::async_read_at(s, 1234, buffers,
4812 boost::asio::transfer_at_least(10),
4813 bindns::bind(async_read_handler,
4814 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4815 ioc.restart();
4816 ioc.run();
7c673cae
FG
4817 BOOST_ASIO_CHECK(called);
4818 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4819
4820 s.reset(read_data, sizeof(read_data));
4821 s.next_read_length(1);
4822 memset(read_buf, 0, sizeof(read_buf));
4823 called = false;
4824 boost::asio::async_read_at(s, 0, buffers,
4825 boost::asio::transfer_at_least(10),
4826 bindns::bind(async_read_handler,
4827 _1, _2, 10, &called));
b32b8144
FG
4828 ioc.restart();
4829 ioc.run();
7c673cae
FG
4830 BOOST_ASIO_CHECK(called);
4831 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4832
4833 s.reset(read_data, sizeof(read_data));
4834 s.next_read_length(1);
4835 memset(read_buf, 0, sizeof(read_buf));
4836 called = false;
4837 boost::asio::async_read_at(s, 1234, buffers,
4838 boost::asio::transfer_at_least(10),
4839 bindns::bind(async_read_handler,
4840 _1, _2, 10, &called));
b32b8144
FG
4841 ioc.restart();
4842 ioc.run();
7c673cae
FG
4843 BOOST_ASIO_CHECK(called);
4844 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4845
4846 s.reset(read_data, sizeof(read_data));
4847 s.next_read_length(10);
4848 memset(read_buf, 0, sizeof(read_buf));
4849 called = false;
4850 boost::asio::async_read_at(s, 0, buffers,
4851 boost::asio::transfer_at_least(10),
4852 bindns::bind(async_read_handler,
4853 _1, _2, 10, &called));
b32b8144
FG
4854 ioc.restart();
4855 ioc.run();
7c673cae
FG
4856 BOOST_ASIO_CHECK(called);
4857 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4858
4859 s.reset(read_data, sizeof(read_data));
4860 s.next_read_length(10);
4861 memset(read_buf, 0, sizeof(read_buf));
4862 called = false;
4863 boost::asio::async_read_at(s, 1234, buffers,
4864 boost::asio::transfer_at_least(10),
4865 bindns::bind(async_read_handler,
4866 _1, _2, 10, &called));
b32b8144
FG
4867 ioc.restart();
4868 ioc.run();
7c673cae
FG
4869 BOOST_ASIO_CHECK(called);
4870 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4871
4872 s.reset(read_data, sizeof(read_data));
4873 memset(read_buf, 0, sizeof(read_buf));
4874 called = false;
4875 boost::asio::async_read_at(s, 0, buffers,
4876 boost::asio::transfer_at_least(42),
4877 bindns::bind(async_read_handler,
4878 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4879 ioc.restart();
4880 ioc.run();
7c673cae
FG
4881 BOOST_ASIO_CHECK(called);
4882 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4883
4884 s.reset(read_data, sizeof(read_data));
4885 memset(read_buf, 0, sizeof(read_buf));
4886 called = false;
4887 boost::asio::async_read_at(s, 1234, buffers,
4888 boost::asio::transfer_at_least(42),
4889 bindns::bind(async_read_handler,
4890 _1, _2, sizeof(read_data), &called));
b32b8144
FG
4891 ioc.restart();
4892 ioc.run();
7c673cae
FG
4893 BOOST_ASIO_CHECK(called);
4894 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4895
4896 s.reset(read_data, sizeof(read_data));
4897 s.next_read_length(1);
4898 memset(read_buf, 0, sizeof(read_buf));
4899 called = false;
4900 boost::asio::async_read_at(s, 0, buffers,
4901 boost::asio::transfer_at_least(42),
4902 bindns::bind(async_read_handler,
4903 _1, _2, 42, &called));
b32b8144
FG
4904 ioc.restart();
4905 ioc.run();
7c673cae
FG
4906 BOOST_ASIO_CHECK(called);
4907 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
4908
4909 s.reset(read_data, sizeof(read_data));
4910 s.next_read_length(1);
4911 memset(read_buf, 0, sizeof(read_buf));
4912 called = false;
4913 boost::asio::async_read_at(s, 1234, buffers,
4914 boost::asio::transfer_at_least(42),
4915 bindns::bind(async_read_handler,
4916 _1, _2, 42, &called));
b32b8144
FG
4917 ioc.restart();
4918 ioc.run();
7c673cae
FG
4919 BOOST_ASIO_CHECK(called);
4920 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
4921
4922 s.reset(read_data, sizeof(read_data));
4923 s.next_read_length(10);
4924 memset(read_buf, 0, sizeof(read_buf));
4925 called = false;
4926 boost::asio::async_read_at(s, 0, buffers,
4927 boost::asio::transfer_at_least(42),
4928 bindns::bind(async_read_handler,
4929 _1, _2, 50, &called));
b32b8144
FG
4930 ioc.restart();
4931 ioc.run();
7c673cae
FG
4932 BOOST_ASIO_CHECK(called);
4933 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
4934
4935 s.reset(read_data, sizeof(read_data));
4936 s.next_read_length(10);
4937 memset(read_buf, 0, sizeof(read_buf));
4938 called = false;
4939 boost::asio::async_read_at(s, 1234, buffers,
4940 boost::asio::transfer_at_least(42),
4941 bindns::bind(async_read_handler,
4942 _1, _2, 50, &called));
b32b8144
FG
4943 ioc.restart();
4944 ioc.run();
7c673cae
FG
4945 BOOST_ASIO_CHECK(called);
4946 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
4947
4948 s.reset(read_data, sizeof(read_data));
4949 memset(read_buf, 0, sizeof(read_buf));
4950 called = false;
4951 boost::asio::async_read_at(s, 0, buffers,
4952 boost::asio::transfer_exactly(1),
4953 bindns::bind(async_read_handler,
4954 _1, _2, 1, &called));
b32b8144
FG
4955 ioc.restart();
4956 ioc.run();
7c673cae
FG
4957 BOOST_ASIO_CHECK(called);
4958 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
4959
4960 s.reset(read_data, sizeof(read_data));
4961 memset(read_buf, 0, sizeof(read_buf));
4962 called = false;
4963 boost::asio::async_read_at(s, 1234, buffers,
4964 boost::asio::transfer_exactly(1),
4965 bindns::bind(async_read_handler,
4966 _1, _2, 1, &called));
b32b8144
FG
4967 ioc.restart();
4968 ioc.run();
7c673cae
FG
4969 BOOST_ASIO_CHECK(called);
4970 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
4971
4972 s.reset(read_data, sizeof(read_data));
4973 s.next_read_length(1);
4974 memset(read_buf, 0, sizeof(read_buf));
4975 called = false;
4976 boost::asio::async_read_at(s, 0, buffers,
4977 boost::asio::transfer_exactly(1),
4978 bindns::bind(async_read_handler,
4979 _1, _2, 1, &called));
b32b8144
FG
4980 ioc.restart();
4981 ioc.run();
7c673cae
FG
4982 BOOST_ASIO_CHECK(called);
4983 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
4984
4985 s.reset(read_data, sizeof(read_data));
4986 s.next_read_length(1);
4987 memset(read_buf, 0, sizeof(read_buf));
4988 called = false;
4989 boost::asio::async_read_at(s, 1234, buffers,
4990 boost::asio::transfer_exactly(1),
4991 bindns::bind(async_read_handler,
4992 _1, _2, 1, &called));
b32b8144
FG
4993 ioc.restart();
4994 ioc.run();
7c673cae
FG
4995 BOOST_ASIO_CHECK(called);
4996 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
4997
4998 s.reset(read_data, sizeof(read_data));
4999 s.next_read_length(10);
5000 memset(read_buf, 0, sizeof(read_buf));
5001 called = false;
5002 boost::asio::async_read_at(s, 0, buffers,
5003 boost::asio::transfer_exactly(1),
5004 bindns::bind(async_read_handler,
5005 _1, _2, 1, &called));
b32b8144
FG
5006 ioc.restart();
5007 ioc.run();
7c673cae
FG
5008 BOOST_ASIO_CHECK(called);
5009 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
5010
5011 s.reset(read_data, sizeof(read_data));
5012 s.next_read_length(10);
5013 memset(read_buf, 0, sizeof(read_buf));
5014 called = false;
5015 boost::asio::async_read_at(s, 1234, buffers,
5016 boost::asio::transfer_exactly(1),
5017 bindns::bind(async_read_handler,
5018 _1, _2, 1, &called));
b32b8144
FG
5019 ioc.restart();
5020 ioc.run();
7c673cae
FG
5021 BOOST_ASIO_CHECK(called);
5022 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
5023
5024 s.reset(read_data, sizeof(read_data));
5025 memset(read_buf, 0, sizeof(read_buf));
5026 called = false;
5027 boost::asio::async_read_at(s, 0, buffers,
5028 boost::asio::transfer_exactly(10),
5029 bindns::bind(async_read_handler,
5030 _1, _2, 10, &called));
b32b8144
FG
5031 ioc.restart();
5032 ioc.run();
7c673cae
FG
5033 BOOST_ASIO_CHECK(called);
5034 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5035
5036 s.reset(read_data, sizeof(read_data));
5037 memset(read_buf, 0, sizeof(read_buf));
5038 called = false;
5039 boost::asio::async_read_at(s, 1234, buffers,
5040 boost::asio::transfer_exactly(10),
5041 bindns::bind(async_read_handler,
5042 _1, _2, 10, &called));
b32b8144
FG
5043 ioc.restart();
5044 ioc.run();
7c673cae
FG
5045 BOOST_ASIO_CHECK(called);
5046 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5047
5048 s.reset(read_data, sizeof(read_data));
5049 s.next_read_length(1);
5050 memset(read_buf, 0, sizeof(read_buf));
5051 called = false;
5052 boost::asio::async_read_at(s, 0, buffers,
5053 boost::asio::transfer_exactly(10),
5054 bindns::bind(async_read_handler,
5055 _1, _2, 10, &called));
b32b8144
FG
5056 ioc.restart();
5057 ioc.run();
7c673cae
FG
5058 BOOST_ASIO_CHECK(called);
5059 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5060
5061 s.reset(read_data, sizeof(read_data));
5062 s.next_read_length(1);
5063 memset(read_buf, 0, sizeof(read_buf));
5064 called = false;
5065 boost::asio::async_read_at(s, 1234, buffers,
5066 boost::asio::transfer_exactly(10),
5067 bindns::bind(async_read_handler,
5068 _1, _2, 10, &called));
b32b8144
FG
5069 ioc.restart();
5070 ioc.run();
7c673cae
FG
5071 BOOST_ASIO_CHECK(called);
5072 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5073
5074 s.reset(read_data, sizeof(read_data));
5075 s.next_read_length(10);
5076 memset(read_buf, 0, sizeof(read_buf));
5077 called = false;
5078 boost::asio::async_read_at(s, 0, buffers,
5079 boost::asio::transfer_exactly(10),
5080 bindns::bind(async_read_handler,
5081 _1, _2, 10, &called));
b32b8144
FG
5082 ioc.restart();
5083 ioc.run();
7c673cae
FG
5084 BOOST_ASIO_CHECK(called);
5085 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5086
5087 s.reset(read_data, sizeof(read_data));
5088 s.next_read_length(10);
5089 memset(read_buf, 0, sizeof(read_buf));
5090 called = false;
5091 boost::asio::async_read_at(s, 1234, buffers,
5092 boost::asio::transfer_exactly(10),
5093 bindns::bind(async_read_handler,
5094 _1, _2, 10, &called));
b32b8144
FG
5095 ioc.restart();
5096 ioc.run();
7c673cae
FG
5097 BOOST_ASIO_CHECK(called);
5098 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5099
5100 s.reset(read_data, sizeof(read_data));
5101 memset(read_buf, 0, sizeof(read_buf));
5102 called = false;
5103 boost::asio::async_read_at(s, 0, buffers,
5104 boost::asio::transfer_exactly(42),
5105 bindns::bind(async_read_handler,
5106 _1, _2, 42, &called));
b32b8144
FG
5107 ioc.restart();
5108 ioc.run();
7c673cae
FG
5109 BOOST_ASIO_CHECK(called);
5110 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
5111
5112 s.reset(read_data, sizeof(read_data));
5113 memset(read_buf, 0, sizeof(read_buf));
5114 called = false;
5115 boost::asio::async_read_at(s, 1234, buffers,
5116 boost::asio::transfer_exactly(42),
5117 bindns::bind(async_read_handler,
5118 _1, _2, 42, &called));
b32b8144
FG
5119 ioc.restart();
5120 ioc.run();
7c673cae
FG
5121 BOOST_ASIO_CHECK(called);
5122 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
5123
5124 s.reset(read_data, sizeof(read_data));
5125 s.next_read_length(1);
5126 memset(read_buf, 0, sizeof(read_buf));
5127 called = false;
5128 boost::asio::async_read_at(s, 0, buffers,
5129 boost::asio::transfer_exactly(42),
5130 bindns::bind(async_read_handler,
5131 _1, _2, 42, &called));
b32b8144
FG
5132 ioc.restart();
5133 ioc.run();
7c673cae
FG
5134 BOOST_ASIO_CHECK(called);
5135 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
5136
5137 s.reset(read_data, sizeof(read_data));
5138 s.next_read_length(1);
5139 memset(read_buf, 0, sizeof(read_buf));
5140 called = false;
5141 boost::asio::async_read_at(s, 1234, buffers,
5142 boost::asio::transfer_exactly(42),
5143 bindns::bind(async_read_handler,
5144 _1, _2, 42, &called));
b32b8144
FG
5145 ioc.restart();
5146 ioc.run();
7c673cae
FG
5147 BOOST_ASIO_CHECK(called);
5148 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
5149
5150 s.reset(read_data, sizeof(read_data));
5151 s.next_read_length(10);
5152 memset(read_buf, 0, sizeof(read_buf));
5153 called = false;
5154 boost::asio::async_read_at(s, 0, buffers,
5155 boost::asio::transfer_exactly(42),
5156 bindns::bind(async_read_handler,
5157 _1, _2, 42, &called));
b32b8144
FG
5158 ioc.restart();
5159 ioc.run();
7c673cae
FG
5160 BOOST_ASIO_CHECK(called);
5161 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
5162
5163 s.reset(read_data, sizeof(read_data));
5164 s.next_read_length(10);
5165 memset(read_buf, 0, sizeof(read_buf));
5166 called = false;
5167 boost::asio::async_read_at(s, 1234, buffers,
5168 boost::asio::transfer_exactly(42),
5169 bindns::bind(async_read_handler,
5170 _1, _2, 42, &called));
b32b8144
FG
5171 ioc.restart();
5172 ioc.run();
7c673cae
FG
5173 BOOST_ASIO_CHECK(called);
5174 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
5175
5176 s.reset(read_data, sizeof(read_data));
5177 memset(read_buf, 0, sizeof(read_buf));
5178 called = false;
5179 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
5180 bindns::bind(async_read_handler,
5181 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5182 ioc.restart();
5183 ioc.run();
7c673cae
FG
5184 BOOST_ASIO_CHECK(called);
5185 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5186
5187 s.reset(read_data, sizeof(read_data));
5188 memset(read_buf, 0, sizeof(read_buf));
5189 called = false;
5190 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
5191 bindns::bind(async_read_handler,
5192 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5193 ioc.restart();
5194 ioc.run();
7c673cae
FG
5195 BOOST_ASIO_CHECK(called);
5196 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5197
5198 s.reset(read_data, sizeof(read_data));
5199 s.next_read_length(1);
5200 memset(read_buf, 0, sizeof(read_buf));
5201 called = false;
5202 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
5203 bindns::bind(async_read_handler,
5204 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5205 ioc.restart();
5206 ioc.run();
7c673cae
FG
5207 BOOST_ASIO_CHECK(called);
5208 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5209
5210 s.reset(read_data, sizeof(read_data));
5211 s.next_read_length(1);
5212 memset(read_buf, 0, sizeof(read_buf));
5213 called = false;
5214 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
5215 bindns::bind(async_read_handler,
5216 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5217 ioc.restart();
5218 ioc.run();
7c673cae
FG
5219 BOOST_ASIO_CHECK(called);
5220 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5221
5222 s.reset(read_data, sizeof(read_data));
5223 s.next_read_length(10);
5224 memset(read_buf, 0, sizeof(read_buf));
5225 called = false;
5226 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
5227 bindns::bind(async_read_handler,
5228 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5229 ioc.restart();
5230 ioc.run();
7c673cae
FG
5231 BOOST_ASIO_CHECK(called);
5232 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5233
5234 s.reset(read_data, sizeof(read_data));
5235 s.next_read_length(10);
5236 memset(read_buf, 0, sizeof(read_buf));
5237 called = false;
5238 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
5239 bindns::bind(async_read_handler,
5240 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5241 ioc.restart();
5242 ioc.run();
7c673cae
FG
5243 BOOST_ASIO_CHECK(called);
5244 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5245
5246 s.reset(read_data, sizeof(read_data));
5247 memset(read_buf, 0, sizeof(read_buf));
5248 called = false;
92f5a8d4 5249 boost::asio::async_read_at(s, 0, buffers, short_transfer(),
7c673cae
FG
5250 bindns::bind(async_read_handler,
5251 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5252 ioc.restart();
5253 ioc.run();
7c673cae
FG
5254 BOOST_ASIO_CHECK(called);
5255 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5256
5257 s.reset(read_data, sizeof(read_data));
5258 memset(read_buf, 0, sizeof(read_buf));
5259 called = false;
92f5a8d4 5260 boost::asio::async_read_at(s, 1234, buffers, short_transfer(),
7c673cae
FG
5261 bindns::bind(async_read_handler,
5262 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5263 ioc.restart();
5264 ioc.run();
7c673cae
FG
5265 BOOST_ASIO_CHECK(called);
5266 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5267
5268 s.reset(read_data, sizeof(read_data));
5269 s.next_read_length(1);
5270 memset(read_buf, 0, sizeof(read_buf));
5271 called = false;
92f5a8d4 5272 boost::asio::async_read_at(s, 0, buffers, short_transfer(),
7c673cae
FG
5273 bindns::bind(async_read_handler,
5274 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5275 ioc.restart();
5276 ioc.run();
7c673cae
FG
5277 BOOST_ASIO_CHECK(called);
5278 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5279
5280 s.reset(read_data, sizeof(read_data));
5281 s.next_read_length(1);
5282 memset(read_buf, 0, sizeof(read_buf));
5283 called = false;
92f5a8d4 5284 boost::asio::async_read_at(s, 1234, buffers, short_transfer(),
7c673cae
FG
5285 bindns::bind(async_read_handler,
5286 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5287 ioc.restart();
5288 ioc.run();
7c673cae
FG
5289 BOOST_ASIO_CHECK(called);
5290 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5291
5292 s.reset(read_data, sizeof(read_data));
5293 s.next_read_length(10);
5294 memset(read_buf, 0, sizeof(read_buf));
5295 called = false;
92f5a8d4 5296 boost::asio::async_read_at(s, 0, buffers, short_transfer(),
7c673cae
FG
5297 bindns::bind(async_read_handler,
5298 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5299 ioc.restart();
5300 ioc.run();
7c673cae
FG
5301 BOOST_ASIO_CHECK(called);
5302 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5303
5304 s.reset(read_data, sizeof(read_data));
5305 s.next_read_length(10);
5306 memset(read_buf, 0, sizeof(read_buf));
5307 called = false;
92f5a8d4 5308 boost::asio::async_read_at(s, 1234, buffers, short_transfer(),
7c673cae
FG
5309 bindns::bind(async_read_handler,
5310 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5311 ioc.restart();
5312 ioc.run();
7c673cae
FG
5313 BOOST_ASIO_CHECK(called);
5314 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5315
5316 s.reset(read_data, sizeof(read_data));
5317 memset(read_buf, 0, sizeof(read_buf));
5318 int i = boost::asio::async_read_at(s, 1234, buffers,
92f5a8d4 5319 short_transfer(), archetypes::lazy_handler());
7c673cae 5320 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
5321 ioc.restart();
5322 ioc.run();
7c673cae
FG
5323 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5324#endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
5325}
5326
5327void test_5_arg_std_array_buffers_async_read_at()
5328{
5329#if defined(BOOST_ASIO_HAS_BOOST_BIND)
5330 namespace bindns = boost;
5331#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
5332 namespace bindns = std;
7c673cae 5333#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
5334 using bindns::placeholders::_1;
5335 using bindns::placeholders::_2;
7c673cae
FG
5336
5337#if defined(BOOST_ASIO_HAS_STD_ARRAY)
b32b8144
FG
5338 boost::asio::io_context ioc;
5339 test_random_access_device s(ioc);
7c673cae
FG
5340 char read_buf[sizeof(read_data)];
5341 std::array<boost::asio::mutable_buffer, 2> buffers = { {
5342 boost::asio::buffer(read_buf, 32),
5343 boost::asio::buffer(read_buf) + 32 } };
5344
5345 s.reset(read_data, sizeof(read_data));
5346 memset(read_buf, 0, sizeof(read_buf));
5347 bool called = false;
5348 boost::asio::async_read_at(s, 0, buffers,
5349 boost::asio::transfer_all(),
5350 bindns::bind(async_read_handler,
5351 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5352 ioc.restart();
5353 ioc.run();
7c673cae
FG
5354 BOOST_ASIO_CHECK(called);
5355 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5356
5357 s.reset(read_data, sizeof(read_data));
5358 memset(read_buf, 0, sizeof(read_buf));
5359 called = false;
5360 boost::asio::async_read_at(s, 1234, buffers,
5361 boost::asio::transfer_all(),
5362 bindns::bind(async_read_handler,
5363 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5364 ioc.restart();
5365 ioc.run();
7c673cae
FG
5366 BOOST_ASIO_CHECK(called);
5367 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5368
5369 s.reset(read_data, sizeof(read_data));
5370 s.next_read_length(1);
5371 memset(read_buf, 0, sizeof(read_buf));
5372 called = false;
5373 boost::asio::async_read_at(s, 0, buffers,
5374 boost::asio::transfer_all(),
5375 bindns::bind(async_read_handler,
5376 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5377 ioc.restart();
5378 ioc.run();
7c673cae
FG
5379 BOOST_ASIO_CHECK(called);
5380 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5381
5382 s.reset(read_data, sizeof(read_data));
5383 s.next_read_length(1);
5384 memset(read_buf, 0, sizeof(read_buf));
5385 called = false;
5386 boost::asio::async_read_at(s, 1234, buffers,
5387 boost::asio::transfer_all(),
5388 bindns::bind(async_read_handler,
5389 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5390 ioc.restart();
5391 ioc.run();
7c673cae
FG
5392 BOOST_ASIO_CHECK(called);
5393 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5394
5395 s.reset(read_data, sizeof(read_data));
5396 s.next_read_length(10);
5397 memset(read_buf, 0, sizeof(read_buf));
5398 called = false;
5399 boost::asio::async_read_at(s, 0, buffers,
5400 boost::asio::transfer_all(),
5401 bindns::bind(async_read_handler,
5402 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5403 ioc.restart();
5404 ioc.run();
7c673cae
FG
5405 BOOST_ASIO_CHECK(called);
5406 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5407
5408 s.reset(read_data, sizeof(read_data));
5409 s.next_read_length(10);
5410 memset(read_buf, 0, sizeof(read_buf));
5411 called = false;
5412 boost::asio::async_read_at(s, 1234, buffers,
5413 boost::asio::transfer_all(),
5414 bindns::bind(async_read_handler,
5415 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5416 ioc.restart();
5417 ioc.run();
7c673cae
FG
5418 BOOST_ASIO_CHECK(called);
5419 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5420
5421 s.reset(read_data, sizeof(read_data));
5422 memset(read_buf, 0, sizeof(read_buf));
5423 called = false;
5424 boost::asio::async_read_at(s, 0, buffers,
5425 boost::asio::transfer_at_least(1),
5426 bindns::bind(async_read_handler,
5427 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5428 ioc.restart();
5429 ioc.run();
7c673cae
FG
5430 BOOST_ASIO_CHECK(called);
5431 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5432
5433 s.reset(read_data, sizeof(read_data));
5434 memset(read_buf, 0, sizeof(read_buf));
5435 called = false;
5436 boost::asio::async_read_at(s, 1234, buffers,
5437 boost::asio::transfer_at_least(1),
5438 bindns::bind(async_read_handler,
5439 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5440 ioc.restart();
5441 ioc.run();
7c673cae
FG
5442 BOOST_ASIO_CHECK(called);
5443 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5444
5445 s.reset(read_data, sizeof(read_data));
5446 s.next_read_length(1);
5447 memset(read_buf, 0, sizeof(read_buf));
5448 called = false;
5449 boost::asio::async_read_at(s, 0, buffers,
5450 boost::asio::transfer_at_least(1),
5451 bindns::bind(async_read_handler,
5452 _1, _2, 1, &called));
b32b8144
FG
5453 ioc.restart();
5454 ioc.run();
7c673cae
FG
5455 BOOST_ASIO_CHECK(called);
5456 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
5457
5458 s.reset(read_data, sizeof(read_data));
5459 s.next_read_length(1);
5460 memset(read_buf, 0, sizeof(read_buf));
5461 called = false;
5462 boost::asio::async_read_at(s, 1234, buffers,
5463 boost::asio::transfer_at_least(1),
5464 bindns::bind(async_read_handler,
5465 _1, _2, 1, &called));
b32b8144
FG
5466 ioc.restart();
5467 ioc.run();
7c673cae
FG
5468 BOOST_ASIO_CHECK(called);
5469 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
5470
5471 s.reset(read_data, sizeof(read_data));
5472 s.next_read_length(10);
5473 memset(read_buf, 0, sizeof(read_buf));
5474 called = false;
5475 boost::asio::async_read_at(s, 0, buffers,
5476 boost::asio::transfer_at_least(1),
5477 bindns::bind(async_read_handler,
5478 _1, _2, 10, &called));
b32b8144
FG
5479 ioc.restart();
5480 ioc.run();
7c673cae
FG
5481 BOOST_ASIO_CHECK(called);
5482 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5483
5484 s.reset(read_data, sizeof(read_data));
5485 s.next_read_length(10);
5486 memset(read_buf, 0, sizeof(read_buf));
5487 called = false;
5488 boost::asio::async_read_at(s, 1234, buffers,
5489 boost::asio::transfer_at_least(1),
5490 bindns::bind(async_read_handler,
5491 _1, _2, 10, &called));
b32b8144
FG
5492 ioc.restart();
5493 ioc.run();
7c673cae
FG
5494 BOOST_ASIO_CHECK(called);
5495 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5496
5497 s.reset(read_data, sizeof(read_data));
5498 memset(read_buf, 0, sizeof(read_buf));
5499 called = false;
5500 boost::asio::async_read_at(s, 0, buffers,
5501 boost::asio::transfer_at_least(10),
5502 bindns::bind(async_read_handler,
5503 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5504 ioc.restart();
5505 ioc.run();
7c673cae
FG
5506 BOOST_ASIO_CHECK(called);
5507 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5508
5509 s.reset(read_data, sizeof(read_data));
5510 memset(read_buf, 0, sizeof(read_buf));
5511 called = false;
5512 boost::asio::async_read_at(s, 1234, buffers,
5513 boost::asio::transfer_at_least(10),
5514 bindns::bind(async_read_handler,
5515 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5516 ioc.restart();
5517 ioc.run();
7c673cae
FG
5518 BOOST_ASIO_CHECK(called);
5519 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5520
5521 s.reset(read_data, sizeof(read_data));
5522 s.next_read_length(1);
5523 memset(read_buf, 0, sizeof(read_buf));
5524 called = false;
5525 boost::asio::async_read_at(s, 0, buffers,
5526 boost::asio::transfer_at_least(10),
5527 bindns::bind(async_read_handler,
5528 _1, _2, 10, &called));
b32b8144
FG
5529 ioc.restart();
5530 ioc.run();
7c673cae
FG
5531 BOOST_ASIO_CHECK(called);
5532 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5533
5534 s.reset(read_data, sizeof(read_data));
5535 s.next_read_length(1);
5536 memset(read_buf, 0, sizeof(read_buf));
5537 called = false;
5538 boost::asio::async_read_at(s, 1234, buffers,
5539 boost::asio::transfer_at_least(10),
5540 bindns::bind(async_read_handler,
5541 _1, _2, 10, &called));
b32b8144
FG
5542 ioc.restart();
5543 ioc.run();
7c673cae
FG
5544 BOOST_ASIO_CHECK(called);
5545 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5546
5547 s.reset(read_data, sizeof(read_data));
5548 s.next_read_length(10);
5549 memset(read_buf, 0, sizeof(read_buf));
5550 called = false;
5551 boost::asio::async_read_at(s, 0, buffers,
5552 boost::asio::transfer_at_least(10),
5553 bindns::bind(async_read_handler,
5554 _1, _2, 10, &called));
b32b8144
FG
5555 ioc.restart();
5556 ioc.run();
7c673cae
FG
5557 BOOST_ASIO_CHECK(called);
5558 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5559
5560 s.reset(read_data, sizeof(read_data));
5561 s.next_read_length(10);
5562 memset(read_buf, 0, sizeof(read_buf));
5563 called = false;
5564 boost::asio::async_read_at(s, 1234, buffers,
5565 boost::asio::transfer_at_least(10),
5566 bindns::bind(async_read_handler,
5567 _1, _2, 10, &called));
b32b8144
FG
5568 ioc.restart();
5569 ioc.run();
7c673cae
FG
5570 BOOST_ASIO_CHECK(called);
5571 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5572
5573 s.reset(read_data, sizeof(read_data));
5574 memset(read_buf, 0, sizeof(read_buf));
5575 called = false;
5576 boost::asio::async_read_at(s, 0, buffers,
5577 boost::asio::transfer_at_least(42),
5578 bindns::bind(async_read_handler,
5579 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5580 ioc.restart();
5581 ioc.run();
7c673cae
FG
5582 BOOST_ASIO_CHECK(called);
5583 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5584
5585 s.reset(read_data, sizeof(read_data));
5586 memset(read_buf, 0, sizeof(read_buf));
5587 called = false;
5588 boost::asio::async_read_at(s, 1234, buffers,
5589 boost::asio::transfer_at_least(42),
5590 bindns::bind(async_read_handler,
5591 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5592 ioc.restart();
5593 ioc.run();
7c673cae
FG
5594 BOOST_ASIO_CHECK(called);
5595 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5596
5597 s.reset(read_data, sizeof(read_data));
5598 s.next_read_length(1);
5599 memset(read_buf, 0, sizeof(read_buf));
5600 called = false;
5601 boost::asio::async_read_at(s, 0, buffers,
5602 boost::asio::transfer_at_least(42),
5603 bindns::bind(async_read_handler,
5604 _1, _2, 42, &called));
b32b8144
FG
5605 ioc.restart();
5606 ioc.run();
7c673cae
FG
5607 BOOST_ASIO_CHECK(called);
5608 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
5609
5610 s.reset(read_data, sizeof(read_data));
5611 s.next_read_length(1);
5612 memset(read_buf, 0, sizeof(read_buf));
5613 called = false;
5614 boost::asio::async_read_at(s, 1234, buffers,
5615 boost::asio::transfer_at_least(42),
5616 bindns::bind(async_read_handler,
5617 _1, _2, 42, &called));
b32b8144
FG
5618 ioc.restart();
5619 ioc.run();
7c673cae
FG
5620 BOOST_ASIO_CHECK(called);
5621 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
5622
5623 s.reset(read_data, sizeof(read_data));
5624 s.next_read_length(10);
5625 memset(read_buf, 0, sizeof(read_buf));
5626 called = false;
5627 boost::asio::async_read_at(s, 0, buffers,
5628 boost::asio::transfer_at_least(42),
5629 bindns::bind(async_read_handler,
5630 _1, _2, 50, &called));
b32b8144
FG
5631 ioc.restart();
5632 ioc.run();
7c673cae
FG
5633 BOOST_ASIO_CHECK(called);
5634 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
5635
5636 s.reset(read_data, sizeof(read_data));
5637 s.next_read_length(10);
5638 memset(read_buf, 0, sizeof(read_buf));
5639 called = false;
5640 boost::asio::async_read_at(s, 1234, buffers,
5641 boost::asio::transfer_at_least(42),
5642 bindns::bind(async_read_handler,
5643 _1, _2, 50, &called));
b32b8144
FG
5644 ioc.restart();
5645 ioc.run();
7c673cae
FG
5646 BOOST_ASIO_CHECK(called);
5647 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
5648
5649 s.reset(read_data, sizeof(read_data));
5650 memset(read_buf, 0, sizeof(read_buf));
5651 called = false;
5652 boost::asio::async_read_at(s, 0, buffers,
5653 boost::asio::transfer_exactly(1),
5654 bindns::bind(async_read_handler,
5655 _1, _2, 1, &called));
b32b8144
FG
5656 ioc.restart();
5657 ioc.run();
7c673cae
FG
5658 BOOST_ASIO_CHECK(called);
5659 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
5660
5661 s.reset(read_data, sizeof(read_data));
5662 memset(read_buf, 0, sizeof(read_buf));
5663 called = false;
5664 boost::asio::async_read_at(s, 1234, buffers,
5665 boost::asio::transfer_exactly(1),
5666 bindns::bind(async_read_handler,
5667 _1, _2, 1, &called));
b32b8144
FG
5668 ioc.restart();
5669 ioc.run();
7c673cae
FG
5670 BOOST_ASIO_CHECK(called);
5671 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
5672
5673 s.reset(read_data, sizeof(read_data));
5674 s.next_read_length(1);
5675 memset(read_buf, 0, sizeof(read_buf));
5676 called = false;
5677 boost::asio::async_read_at(s, 0, buffers,
5678 boost::asio::transfer_exactly(1),
5679 bindns::bind(async_read_handler,
5680 _1, _2, 1, &called));
b32b8144
FG
5681 ioc.restart();
5682 ioc.run();
7c673cae
FG
5683 BOOST_ASIO_CHECK(called);
5684 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
5685
5686 s.reset(read_data, sizeof(read_data));
5687 s.next_read_length(1);
5688 memset(read_buf, 0, sizeof(read_buf));
5689 called = false;
5690 boost::asio::async_read_at(s, 1234, buffers,
5691 boost::asio::transfer_exactly(1),
5692 bindns::bind(async_read_handler,
5693 _1, _2, 1, &called));
b32b8144
FG
5694 ioc.restart();
5695 ioc.run();
7c673cae
FG
5696 BOOST_ASIO_CHECK(called);
5697 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
5698
5699 s.reset(read_data, sizeof(read_data));
5700 s.next_read_length(10);
5701 memset(read_buf, 0, sizeof(read_buf));
5702 called = false;
5703 boost::asio::async_read_at(s, 0, buffers,
5704 boost::asio::transfer_exactly(1),
5705 bindns::bind(async_read_handler,
5706 _1, _2, 1, &called));
b32b8144
FG
5707 ioc.restart();
5708 ioc.run();
7c673cae
FG
5709 BOOST_ASIO_CHECK(called);
5710 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
5711
5712 s.reset(read_data, sizeof(read_data));
5713 s.next_read_length(10);
5714 memset(read_buf, 0, sizeof(read_buf));
5715 called = false;
5716 boost::asio::async_read_at(s, 1234, buffers,
5717 boost::asio::transfer_exactly(1),
5718 bindns::bind(async_read_handler,
5719 _1, _2, 1, &called));
b32b8144
FG
5720 ioc.restart();
5721 ioc.run();
7c673cae
FG
5722 BOOST_ASIO_CHECK(called);
5723 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
5724
5725 s.reset(read_data, sizeof(read_data));
5726 memset(read_buf, 0, sizeof(read_buf));
5727 called = false;
5728 boost::asio::async_read_at(s, 0, buffers,
5729 boost::asio::transfer_exactly(10),
5730 bindns::bind(async_read_handler,
5731 _1, _2, 10, &called));
b32b8144
FG
5732 ioc.restart();
5733 ioc.run();
7c673cae
FG
5734 BOOST_ASIO_CHECK(called);
5735 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5736
5737 s.reset(read_data, sizeof(read_data));
5738 memset(read_buf, 0, sizeof(read_buf));
5739 called = false;
5740 boost::asio::async_read_at(s, 1234, buffers,
5741 boost::asio::transfer_exactly(10),
5742 bindns::bind(async_read_handler,
5743 _1, _2, 10, &called));
b32b8144
FG
5744 ioc.restart();
5745 ioc.run();
7c673cae
FG
5746 BOOST_ASIO_CHECK(called);
5747 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5748
5749 s.reset(read_data, sizeof(read_data));
5750 s.next_read_length(1);
5751 memset(read_buf, 0, sizeof(read_buf));
5752 called = false;
5753 boost::asio::async_read_at(s, 0, buffers,
5754 boost::asio::transfer_exactly(10),
5755 bindns::bind(async_read_handler,
5756 _1, _2, 10, &called));
b32b8144
FG
5757 ioc.restart();
5758 ioc.run();
7c673cae
FG
5759 BOOST_ASIO_CHECK(called);
5760 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5761
5762 s.reset(read_data, sizeof(read_data));
5763 s.next_read_length(1);
5764 memset(read_buf, 0, sizeof(read_buf));
5765 called = false;
5766 boost::asio::async_read_at(s, 1234, buffers,
5767 boost::asio::transfer_exactly(10),
5768 bindns::bind(async_read_handler,
5769 _1, _2, 10, &called));
b32b8144
FG
5770 ioc.restart();
5771 ioc.run();
7c673cae
FG
5772 BOOST_ASIO_CHECK(called);
5773 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5774
5775 s.reset(read_data, sizeof(read_data));
5776 s.next_read_length(10);
5777 memset(read_buf, 0, sizeof(read_buf));
5778 called = false;
5779 boost::asio::async_read_at(s, 0, buffers,
5780 boost::asio::transfer_exactly(10),
5781 bindns::bind(async_read_handler,
5782 _1, _2, 10, &called));
b32b8144
FG
5783 ioc.restart();
5784 ioc.run();
7c673cae
FG
5785 BOOST_ASIO_CHECK(called);
5786 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5787
5788 s.reset(read_data, sizeof(read_data));
5789 s.next_read_length(10);
5790 memset(read_buf, 0, sizeof(read_buf));
5791 called = false;
5792 boost::asio::async_read_at(s, 1234, buffers,
5793 boost::asio::transfer_exactly(10),
5794 bindns::bind(async_read_handler,
5795 _1, _2, 10, &called));
b32b8144
FG
5796 ioc.restart();
5797 ioc.run();
7c673cae
FG
5798 BOOST_ASIO_CHECK(called);
5799 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5800
5801 s.reset(read_data, sizeof(read_data));
5802 memset(read_buf, 0, sizeof(read_buf));
5803 called = false;
5804 boost::asio::async_read_at(s, 0, buffers,
5805 boost::asio::transfer_exactly(42),
5806 bindns::bind(async_read_handler,
5807 _1, _2, 42, &called));
b32b8144
FG
5808 ioc.restart();
5809 ioc.run();
7c673cae
FG
5810 BOOST_ASIO_CHECK(called);
5811 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
5812
5813 s.reset(read_data, sizeof(read_data));
5814 memset(read_buf, 0, sizeof(read_buf));
5815 called = false;
5816 boost::asio::async_read_at(s, 1234, buffers,
5817 boost::asio::transfer_exactly(42),
5818 bindns::bind(async_read_handler,
5819 _1, _2, 42, &called));
b32b8144
FG
5820 ioc.restart();
5821 ioc.run();
7c673cae
FG
5822 BOOST_ASIO_CHECK(called);
5823 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
5824
5825 s.reset(read_data, sizeof(read_data));
5826 s.next_read_length(1);
5827 memset(read_buf, 0, sizeof(read_buf));
5828 called = false;
5829 boost::asio::async_read_at(s, 0, buffers,
5830 boost::asio::transfer_exactly(42),
5831 bindns::bind(async_read_handler,
5832 _1, _2, 42, &called));
b32b8144
FG
5833 ioc.restart();
5834 ioc.run();
7c673cae
FG
5835 BOOST_ASIO_CHECK(called);
5836 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
5837
5838 s.reset(read_data, sizeof(read_data));
5839 s.next_read_length(1);
5840 memset(read_buf, 0, sizeof(read_buf));
5841 called = false;
5842 boost::asio::async_read_at(s, 1234, buffers,
5843 boost::asio::transfer_exactly(42),
5844 bindns::bind(async_read_handler,
5845 _1, _2, 42, &called));
b32b8144
FG
5846 ioc.restart();
5847 ioc.run();
7c673cae
FG
5848 BOOST_ASIO_CHECK(called);
5849 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
5850
5851 s.reset(read_data, sizeof(read_data));
5852 s.next_read_length(10);
5853 memset(read_buf, 0, sizeof(read_buf));
5854 called = false;
5855 boost::asio::async_read_at(s, 0, buffers,
5856 boost::asio::transfer_exactly(42),
5857 bindns::bind(async_read_handler,
5858 _1, _2, 42, &called));
b32b8144
FG
5859 ioc.restart();
5860 ioc.run();
7c673cae
FG
5861 BOOST_ASIO_CHECK(called);
5862 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
5863
5864 s.reset(read_data, sizeof(read_data));
5865 s.next_read_length(10);
5866 memset(read_buf, 0, sizeof(read_buf));
5867 called = false;
5868 boost::asio::async_read_at(s, 1234, buffers,
5869 boost::asio::transfer_exactly(42),
5870 bindns::bind(async_read_handler,
5871 _1, _2, 42, &called));
b32b8144
FG
5872 ioc.restart();
5873 ioc.run();
7c673cae
FG
5874 BOOST_ASIO_CHECK(called);
5875 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
5876
5877 s.reset(read_data, sizeof(read_data));
5878 memset(read_buf, 0, sizeof(read_buf));
5879 called = false;
5880 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
5881 bindns::bind(async_read_handler,
5882 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5883 ioc.restart();
5884 ioc.run();
7c673cae
FG
5885 BOOST_ASIO_CHECK(called);
5886 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5887
5888 s.reset(read_data, sizeof(read_data));
5889 memset(read_buf, 0, sizeof(read_buf));
5890 called = false;
5891 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
5892 bindns::bind(async_read_handler,
5893 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5894 ioc.restart();
5895 ioc.run();
7c673cae
FG
5896 BOOST_ASIO_CHECK(called);
5897 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5898
5899 s.reset(read_data, sizeof(read_data));
5900 s.next_read_length(1);
5901 memset(read_buf, 0, sizeof(read_buf));
5902 called = false;
5903 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
5904 bindns::bind(async_read_handler,
5905 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5906 ioc.restart();
5907 ioc.run();
7c673cae
FG
5908 BOOST_ASIO_CHECK(called);
5909 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5910
5911 s.reset(read_data, sizeof(read_data));
5912 s.next_read_length(1);
5913 memset(read_buf, 0, sizeof(read_buf));
5914 called = false;
5915 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
5916 bindns::bind(async_read_handler,
5917 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5918 ioc.restart();
5919 ioc.run();
7c673cae
FG
5920 BOOST_ASIO_CHECK(called);
5921 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5922
5923 s.reset(read_data, sizeof(read_data));
5924 s.next_read_length(10);
5925 memset(read_buf, 0, sizeof(read_buf));
5926 called = false;
5927 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
5928 bindns::bind(async_read_handler,
5929 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5930 ioc.restart();
5931 ioc.run();
7c673cae
FG
5932 BOOST_ASIO_CHECK(called);
5933 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5934
5935 s.reset(read_data, sizeof(read_data));
5936 s.next_read_length(10);
5937 memset(read_buf, 0, sizeof(read_buf));
5938 called = false;
5939 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
5940 bindns::bind(async_read_handler,
5941 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5942 ioc.restart();
5943 ioc.run();
7c673cae
FG
5944 BOOST_ASIO_CHECK(called);
5945 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5946
5947 s.reset(read_data, sizeof(read_data));
5948 memset(read_buf, 0, sizeof(read_buf));
5949 called = false;
92f5a8d4 5950 boost::asio::async_read_at(s, 0, buffers, short_transfer(),
7c673cae
FG
5951 bindns::bind(async_read_handler,
5952 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5953 ioc.restart();
5954 ioc.run();
7c673cae
FG
5955 BOOST_ASIO_CHECK(called);
5956 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5957
5958 s.reset(read_data, sizeof(read_data));
5959 memset(read_buf, 0, sizeof(read_buf));
5960 called = false;
92f5a8d4 5961 boost::asio::async_read_at(s, 1234, buffers, short_transfer(),
7c673cae
FG
5962 bindns::bind(async_read_handler,
5963 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5964 ioc.restart();
5965 ioc.run();
7c673cae
FG
5966 BOOST_ASIO_CHECK(called);
5967 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5968
5969 s.reset(read_data, sizeof(read_data));
5970 s.next_read_length(1);
5971 memset(read_buf, 0, sizeof(read_buf));
5972 called = false;
92f5a8d4 5973 boost::asio::async_read_at(s, 0, buffers, short_transfer(),
7c673cae
FG
5974 bindns::bind(async_read_handler,
5975 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5976 ioc.restart();
5977 ioc.run();
7c673cae
FG
5978 BOOST_ASIO_CHECK(called);
5979 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5980
5981 s.reset(read_data, sizeof(read_data));
5982 s.next_read_length(1);
5983 memset(read_buf, 0, sizeof(read_buf));
5984 called = false;
92f5a8d4 5985 boost::asio::async_read_at(s, 1234, buffers, short_transfer(),
7c673cae
FG
5986 bindns::bind(async_read_handler,
5987 _1, _2, sizeof(read_data), &called));
b32b8144
FG
5988 ioc.restart();
5989 ioc.run();
7c673cae
FG
5990 BOOST_ASIO_CHECK(called);
5991 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5992
5993 s.reset(read_data, sizeof(read_data));
5994 s.next_read_length(10);
5995 memset(read_buf, 0, sizeof(read_buf));
5996 called = false;
92f5a8d4 5997 boost::asio::async_read_at(s, 0, buffers, short_transfer(),
7c673cae
FG
5998 bindns::bind(async_read_handler,
5999 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6000 ioc.restart();
6001 ioc.run();
7c673cae
FG
6002 BOOST_ASIO_CHECK(called);
6003 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6004
6005 s.reset(read_data, sizeof(read_data));
6006 s.next_read_length(10);
6007 memset(read_buf, 0, sizeof(read_buf));
6008 called = false;
92f5a8d4 6009 boost::asio::async_read_at(s, 1234, buffers, short_transfer(),
7c673cae
FG
6010 bindns::bind(async_read_handler,
6011 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6012 ioc.restart();
6013 ioc.run();
7c673cae
FG
6014 BOOST_ASIO_CHECK(called);
6015 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6016
6017 s.reset(read_data, sizeof(read_data));
6018 memset(read_buf, 0, sizeof(read_buf));
6019 int i = boost::asio::async_read_at(s, 1234, buffers,
92f5a8d4 6020 short_transfer(), archetypes::lazy_handler());
7c673cae 6021 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
6022 ioc.restart();
6023 ioc.run();
7c673cae
FG
6024 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6025#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
6026}
6027
6028void test_5_arg_vector_buffers_async_read_at()
6029{
6030#if defined(BOOST_ASIO_HAS_BOOST_BIND)
6031 namespace bindns = boost;
6032#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
6033 namespace bindns = std;
7c673cae 6034#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
6035 using bindns::placeholders::_1;
6036 using bindns::placeholders::_2;
7c673cae 6037
b32b8144
FG
6038 boost::asio::io_context ioc;
6039 test_random_access_device s(ioc);
7c673cae
FG
6040 char read_buf[sizeof(read_data)];
6041 std::vector<boost::asio::mutable_buffer> buffers;
6042 buffers.push_back(boost::asio::buffer(read_buf, 32));
6043 buffers.push_back(boost::asio::buffer(read_buf) + 32);
6044
6045 s.reset(read_data, sizeof(read_data));
6046 memset(read_buf, 0, sizeof(read_buf));
6047 bool called = false;
6048 boost::asio::async_read_at(s, 0, buffers,
6049 boost::asio::transfer_all(),
6050 bindns::bind(async_read_handler,
6051 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6052 ioc.restart();
6053 ioc.run();
7c673cae
FG
6054 BOOST_ASIO_CHECK(called);
6055 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6056
6057 s.reset(read_data, sizeof(read_data));
6058 memset(read_buf, 0, sizeof(read_buf));
6059 called = false;
6060 boost::asio::async_read_at(s, 1234, buffers,
6061 boost::asio::transfer_all(),
6062 bindns::bind(async_read_handler,
6063 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6064 ioc.restart();
6065 ioc.run();
7c673cae
FG
6066 BOOST_ASIO_CHECK(called);
6067 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6068
6069 s.reset(read_data, sizeof(read_data));
6070 s.next_read_length(1);
6071 memset(read_buf, 0, sizeof(read_buf));
6072 called = false;
6073 boost::asio::async_read_at(s, 0, buffers,
6074 boost::asio::transfer_all(),
6075 bindns::bind(async_read_handler,
6076 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6077 ioc.restart();
6078 ioc.run();
7c673cae
FG
6079 BOOST_ASIO_CHECK(called);
6080 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6081
6082 s.reset(read_data, sizeof(read_data));
6083 s.next_read_length(1);
6084 memset(read_buf, 0, sizeof(read_buf));
6085 called = false;
6086 boost::asio::async_read_at(s, 1234, buffers,
6087 boost::asio::transfer_all(),
6088 bindns::bind(async_read_handler,
6089 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6090 ioc.restart();
6091 ioc.run();
7c673cae
FG
6092 BOOST_ASIO_CHECK(called);
6093 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6094
6095 s.reset(read_data, sizeof(read_data));
6096 s.next_read_length(10);
6097 memset(read_buf, 0, sizeof(read_buf));
6098 called = false;
6099 boost::asio::async_read_at(s, 0, buffers,
6100 boost::asio::transfer_all(),
6101 bindns::bind(async_read_handler,
6102 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6103 ioc.restart();
6104 ioc.run();
7c673cae
FG
6105 BOOST_ASIO_CHECK(called);
6106 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6107
6108 s.reset(read_data, sizeof(read_data));
6109 s.next_read_length(10);
6110 memset(read_buf, 0, sizeof(read_buf));
6111 called = false;
6112 boost::asio::async_read_at(s, 1234, buffers,
6113 boost::asio::transfer_all(),
6114 bindns::bind(async_read_handler,
6115 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6116 ioc.restart();
6117 ioc.run();
7c673cae
FG
6118 BOOST_ASIO_CHECK(called);
6119 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6120
6121 s.reset(read_data, sizeof(read_data));
6122 memset(read_buf, 0, sizeof(read_buf));
6123 called = false;
6124 boost::asio::async_read_at(s, 0, buffers,
6125 boost::asio::transfer_at_least(1),
6126 bindns::bind(async_read_handler,
6127 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6128 ioc.restart();
6129 ioc.run();
7c673cae
FG
6130 BOOST_ASIO_CHECK(called);
6131 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6132
6133 s.reset(read_data, sizeof(read_data));
6134 memset(read_buf, 0, sizeof(read_buf));
6135 called = false;
6136 boost::asio::async_read_at(s, 1234, buffers,
6137 boost::asio::transfer_at_least(1),
6138 bindns::bind(async_read_handler,
6139 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6140 ioc.restart();
6141 ioc.run();
7c673cae
FG
6142 BOOST_ASIO_CHECK(called);
6143 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6144
6145 s.reset(read_data, sizeof(read_data));
6146 s.next_read_length(1);
6147 memset(read_buf, 0, sizeof(read_buf));
6148 called = false;
6149 boost::asio::async_read_at(s, 0, buffers,
6150 boost::asio::transfer_at_least(1),
6151 bindns::bind(async_read_handler,
6152 _1, _2, 1, &called));
b32b8144
FG
6153 ioc.restart();
6154 ioc.run();
7c673cae
FG
6155 BOOST_ASIO_CHECK(called);
6156 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
6157
6158 s.reset(read_data, sizeof(read_data));
6159 s.next_read_length(1);
6160 memset(read_buf, 0, sizeof(read_buf));
6161 called = false;
6162 boost::asio::async_read_at(s, 1234, buffers,
6163 boost::asio::transfer_at_least(1),
6164 bindns::bind(async_read_handler,
6165 _1, _2, 1, &called));
b32b8144
FG
6166 ioc.restart();
6167 ioc.run();
7c673cae
FG
6168 BOOST_ASIO_CHECK(called);
6169 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
6170
6171 s.reset(read_data, sizeof(read_data));
6172 s.next_read_length(10);
6173 memset(read_buf, 0, sizeof(read_buf));
6174 called = false;
6175 boost::asio::async_read_at(s, 0, buffers,
6176 boost::asio::transfer_at_least(1),
6177 bindns::bind(async_read_handler,
6178 _1, _2, 10, &called));
b32b8144
FG
6179 ioc.restart();
6180 ioc.run();
7c673cae
FG
6181 BOOST_ASIO_CHECK(called);
6182 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
6183
6184 s.reset(read_data, sizeof(read_data));
6185 s.next_read_length(10);
6186 memset(read_buf, 0, sizeof(read_buf));
6187 called = false;
6188 boost::asio::async_read_at(s, 1234, buffers,
6189 boost::asio::transfer_at_least(1),
6190 bindns::bind(async_read_handler,
6191 _1, _2, 10, &called));
b32b8144
FG
6192 ioc.restart();
6193 ioc.run();
7c673cae
FG
6194 BOOST_ASIO_CHECK(called);
6195 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
6196
6197 s.reset(read_data, sizeof(read_data));
6198 memset(read_buf, 0, sizeof(read_buf));
6199 called = false;
6200 boost::asio::async_read_at(s, 0, buffers,
6201 boost::asio::transfer_at_least(10),
6202 bindns::bind(async_read_handler,
6203 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6204 ioc.restart();
6205 ioc.run();
7c673cae
FG
6206 BOOST_ASIO_CHECK(called);
6207 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6208
6209 s.reset(read_data, sizeof(read_data));
6210 memset(read_buf, 0, sizeof(read_buf));
6211 called = false;
6212 boost::asio::async_read_at(s, 1234, buffers,
6213 boost::asio::transfer_at_least(10),
6214 bindns::bind(async_read_handler,
6215 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6216 ioc.restart();
6217 ioc.run();
7c673cae
FG
6218 BOOST_ASIO_CHECK(called);
6219 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6220
6221 s.reset(read_data, sizeof(read_data));
6222 s.next_read_length(1);
6223 memset(read_buf, 0, sizeof(read_buf));
6224 called = false;
6225 boost::asio::async_read_at(s, 0, buffers,
6226 boost::asio::transfer_at_least(10),
6227 bindns::bind(async_read_handler,
6228 _1, _2, 10, &called));
b32b8144
FG
6229 ioc.restart();
6230 ioc.run();
7c673cae
FG
6231 BOOST_ASIO_CHECK(called);
6232 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
6233
6234 s.reset(read_data, sizeof(read_data));
6235 s.next_read_length(1);
6236 memset(read_buf, 0, sizeof(read_buf));
6237 called = false;
6238 boost::asio::async_read_at(s, 1234, buffers,
6239 boost::asio::transfer_at_least(10),
6240 bindns::bind(async_read_handler,
6241 _1, _2, 10, &called));
b32b8144
FG
6242 ioc.restart();
6243 ioc.run();
7c673cae
FG
6244 BOOST_ASIO_CHECK(called);
6245 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
6246
6247 s.reset(read_data, sizeof(read_data));
6248 s.next_read_length(10);
6249 memset(read_buf, 0, sizeof(read_buf));
6250 called = false;
6251 boost::asio::async_read_at(s, 0, buffers,
6252 boost::asio::transfer_at_least(10),
6253 bindns::bind(async_read_handler,
6254 _1, _2, 10, &called));
b32b8144
FG
6255 ioc.restart();
6256 ioc.run();
7c673cae
FG
6257 BOOST_ASIO_CHECK(called);
6258 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
6259
6260 s.reset(read_data, sizeof(read_data));
6261 s.next_read_length(10);
6262 memset(read_buf, 0, sizeof(read_buf));
6263 called = false;
6264 boost::asio::async_read_at(s, 1234, buffers,
6265 boost::asio::transfer_at_least(10),
6266 bindns::bind(async_read_handler,
6267 _1, _2, 10, &called));
b32b8144
FG
6268 ioc.restart();
6269 ioc.run();
7c673cae
FG
6270 BOOST_ASIO_CHECK(called);
6271 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
6272
6273 s.reset(read_data, sizeof(read_data));
6274 memset(read_buf, 0, sizeof(read_buf));
6275 called = false;
6276 boost::asio::async_read_at(s, 0, buffers,
6277 boost::asio::transfer_at_least(42),
6278 bindns::bind(async_read_handler,
6279 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6280 ioc.restart();
6281 ioc.run();
7c673cae
FG
6282 BOOST_ASIO_CHECK(called);
6283 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6284
6285 s.reset(read_data, sizeof(read_data));
6286 memset(read_buf, 0, sizeof(read_buf));
6287 called = false;
6288 boost::asio::async_read_at(s, 1234, buffers,
6289 boost::asio::transfer_at_least(42),
6290 bindns::bind(async_read_handler,
6291 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6292 ioc.restart();
6293 ioc.run();
7c673cae
FG
6294 BOOST_ASIO_CHECK(called);
6295 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6296
6297 s.reset(read_data, sizeof(read_data));
6298 s.next_read_length(1);
6299 memset(read_buf, 0, sizeof(read_buf));
6300 called = false;
6301 boost::asio::async_read_at(s, 0, buffers,
6302 boost::asio::transfer_at_least(42),
6303 bindns::bind(async_read_handler,
6304 _1, _2, 42, &called));
b32b8144
FG
6305 ioc.restart();
6306 ioc.run();
7c673cae
FG
6307 BOOST_ASIO_CHECK(called);
6308 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
6309
6310 s.reset(read_data, sizeof(read_data));
6311 s.next_read_length(1);
6312 memset(read_buf, 0, sizeof(read_buf));
6313 called = false;
6314 boost::asio::async_read_at(s, 1234, buffers,
6315 boost::asio::transfer_at_least(42),
6316 bindns::bind(async_read_handler,
6317 _1, _2, 42, &called));
b32b8144
FG
6318 ioc.restart();
6319 ioc.run();
7c673cae
FG
6320 BOOST_ASIO_CHECK(called);
6321 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
6322
6323 s.reset(read_data, sizeof(read_data));
6324 s.next_read_length(10);
6325 memset(read_buf, 0, sizeof(read_buf));
6326 called = false;
6327 boost::asio::async_read_at(s, 0, buffers,
6328 boost::asio::transfer_at_least(42),
6329 bindns::bind(async_read_handler,
6330 _1, _2, 50, &called));
b32b8144
FG
6331 ioc.restart();
6332 ioc.run();
7c673cae
FG
6333 BOOST_ASIO_CHECK(called);
6334 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
6335
6336 s.reset(read_data, sizeof(read_data));
6337 s.next_read_length(10);
6338 memset(read_buf, 0, sizeof(read_buf));
6339 called = false;
6340 boost::asio::async_read_at(s, 1234, buffers,
6341 boost::asio::transfer_at_least(42),
6342 bindns::bind(async_read_handler,
6343 _1, _2, 50, &called));
b32b8144
FG
6344 ioc.restart();
6345 ioc.run();
7c673cae
FG
6346 BOOST_ASIO_CHECK(called);
6347 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
6348
6349 s.reset(read_data, sizeof(read_data));
6350 memset(read_buf, 0, sizeof(read_buf));
6351 called = false;
6352 boost::asio::async_read_at(s, 0, buffers,
6353 boost::asio::transfer_exactly(1),
6354 bindns::bind(async_read_handler,
6355 _1, _2, 1, &called));
b32b8144
FG
6356 ioc.restart();
6357 ioc.run();
7c673cae
FG
6358 BOOST_ASIO_CHECK(called);
6359 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
6360
6361 s.reset(read_data, sizeof(read_data));
6362 memset(read_buf, 0, sizeof(read_buf));
6363 called = false;
6364 boost::asio::async_read_at(s, 1234, buffers,
6365 boost::asio::transfer_exactly(1),
6366 bindns::bind(async_read_handler,
6367 _1, _2, 1, &called));
b32b8144
FG
6368 ioc.restart();
6369 ioc.run();
7c673cae
FG
6370 BOOST_ASIO_CHECK(called);
6371 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
6372
6373 s.reset(read_data, sizeof(read_data));
6374 s.next_read_length(1);
6375 memset(read_buf, 0, sizeof(read_buf));
6376 called = false;
6377 boost::asio::async_read_at(s, 0, buffers,
6378 boost::asio::transfer_exactly(1),
6379 bindns::bind(async_read_handler,
6380 _1, _2, 1, &called));
b32b8144
FG
6381 ioc.restart();
6382 ioc.run();
7c673cae
FG
6383 BOOST_ASIO_CHECK(called);
6384 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
6385
6386 s.reset(read_data, sizeof(read_data));
6387 s.next_read_length(1);
6388 memset(read_buf, 0, sizeof(read_buf));
6389 called = false;
6390 boost::asio::async_read_at(s, 1234, buffers,
6391 boost::asio::transfer_exactly(1),
6392 bindns::bind(async_read_handler,
6393 _1, _2, 1, &called));
b32b8144
FG
6394 ioc.restart();
6395 ioc.run();
7c673cae
FG
6396 BOOST_ASIO_CHECK(called);
6397 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
6398
6399 s.reset(read_data, sizeof(read_data));
6400 s.next_read_length(10);
6401 memset(read_buf, 0, sizeof(read_buf));
6402 called = false;
6403 boost::asio::async_read_at(s, 0, buffers,
6404 boost::asio::transfer_exactly(1),
6405 bindns::bind(async_read_handler,
6406 _1, _2, 1, &called));
b32b8144
FG
6407 ioc.restart();
6408 ioc.run();
7c673cae
FG
6409 BOOST_ASIO_CHECK(called);
6410 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
6411
6412 s.reset(read_data, sizeof(read_data));
6413 s.next_read_length(10);
6414 memset(read_buf, 0, sizeof(read_buf));
6415 called = false;
6416 boost::asio::async_read_at(s, 1234, buffers,
6417 boost::asio::transfer_exactly(1),
6418 bindns::bind(async_read_handler,
6419 _1, _2, 1, &called));
b32b8144
FG
6420 ioc.restart();
6421 ioc.run();
7c673cae
FG
6422 BOOST_ASIO_CHECK(called);
6423 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
6424
6425 s.reset(read_data, sizeof(read_data));
6426 memset(read_buf, 0, sizeof(read_buf));
6427 called = false;
6428 boost::asio::async_read_at(s, 0, buffers,
6429 boost::asio::transfer_exactly(10),
6430 bindns::bind(async_read_handler,
6431 _1, _2, 10, &called));
b32b8144
FG
6432 ioc.restart();
6433 ioc.run();
7c673cae
FG
6434 BOOST_ASIO_CHECK(called);
6435 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
6436
6437 s.reset(read_data, sizeof(read_data));
6438 memset(read_buf, 0, sizeof(read_buf));
6439 called = false;
6440 boost::asio::async_read_at(s, 1234, buffers,
6441 boost::asio::transfer_exactly(10),
6442 bindns::bind(async_read_handler,
6443 _1, _2, 10, &called));
b32b8144
FG
6444 ioc.restart();
6445 ioc.run();
7c673cae
FG
6446 BOOST_ASIO_CHECK(called);
6447 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
6448
6449 s.reset(read_data, sizeof(read_data));
6450 s.next_read_length(1);
6451 memset(read_buf, 0, sizeof(read_buf));
6452 called = false;
6453 boost::asio::async_read_at(s, 0, buffers,
6454 boost::asio::transfer_exactly(10),
6455 bindns::bind(async_read_handler,
6456 _1, _2, 10, &called));
b32b8144
FG
6457 ioc.restart();
6458 ioc.run();
7c673cae
FG
6459 BOOST_ASIO_CHECK(called);
6460 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
6461
6462 s.reset(read_data, sizeof(read_data));
6463 s.next_read_length(1);
6464 memset(read_buf, 0, sizeof(read_buf));
6465 called = false;
6466 boost::asio::async_read_at(s, 1234, buffers,
6467 boost::asio::transfer_exactly(10),
6468 bindns::bind(async_read_handler,
6469 _1, _2, 10, &called));
b32b8144
FG
6470 ioc.restart();
6471 ioc.run();
7c673cae
FG
6472 BOOST_ASIO_CHECK(called);
6473 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
6474
6475 s.reset(read_data, sizeof(read_data));
6476 s.next_read_length(10);
6477 memset(read_buf, 0, sizeof(read_buf));
6478 called = false;
6479 boost::asio::async_read_at(s, 0, buffers,
6480 boost::asio::transfer_exactly(10),
6481 bindns::bind(async_read_handler,
6482 _1, _2, 10, &called));
b32b8144
FG
6483 ioc.restart();
6484 ioc.run();
7c673cae
FG
6485 BOOST_ASIO_CHECK(called);
6486 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
6487
6488 s.reset(read_data, sizeof(read_data));
6489 s.next_read_length(10);
6490 memset(read_buf, 0, sizeof(read_buf));
6491 called = false;
6492 boost::asio::async_read_at(s, 1234, buffers,
6493 boost::asio::transfer_exactly(10),
6494 bindns::bind(async_read_handler,
6495 _1, _2, 10, &called));
b32b8144
FG
6496 ioc.restart();
6497 ioc.run();
7c673cae
FG
6498 BOOST_ASIO_CHECK(called);
6499 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
6500
6501 s.reset(read_data, sizeof(read_data));
6502 memset(read_buf, 0, sizeof(read_buf));
6503 called = false;
6504 boost::asio::async_read_at(s, 0, buffers,
6505 boost::asio::transfer_exactly(42),
6506 bindns::bind(async_read_handler,
6507 _1, _2, 42, &called));
b32b8144
FG
6508 ioc.restart();
6509 ioc.run();
7c673cae
FG
6510 BOOST_ASIO_CHECK(called);
6511 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
6512
6513 s.reset(read_data, sizeof(read_data));
6514 memset(read_buf, 0, sizeof(read_buf));
6515 called = false;
6516 boost::asio::async_read_at(s, 1234, buffers,
6517 boost::asio::transfer_exactly(42),
6518 bindns::bind(async_read_handler,
6519 _1, _2, 42, &called));
b32b8144
FG
6520 ioc.restart();
6521 ioc.run();
7c673cae
FG
6522 BOOST_ASIO_CHECK(called);
6523 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
6524
6525 s.reset(read_data, sizeof(read_data));
6526 s.next_read_length(1);
6527 memset(read_buf, 0, sizeof(read_buf));
6528 called = false;
6529 boost::asio::async_read_at(s, 0, buffers,
6530 boost::asio::transfer_exactly(42),
6531 bindns::bind(async_read_handler,
6532 _1, _2, 42, &called));
b32b8144
FG
6533 ioc.restart();
6534 ioc.run();
7c673cae
FG
6535 BOOST_ASIO_CHECK(called);
6536 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
6537
6538 s.reset(read_data, sizeof(read_data));
6539 s.next_read_length(1);
6540 memset(read_buf, 0, sizeof(read_buf));
6541 called = false;
6542 boost::asio::async_read_at(s, 1234, buffers,
6543 boost::asio::transfer_exactly(42),
6544 bindns::bind(async_read_handler,
6545 _1, _2, 42, &called));
b32b8144
FG
6546 ioc.restart();
6547 ioc.run();
7c673cae
FG
6548 BOOST_ASIO_CHECK(called);
6549 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
6550
6551 s.reset(read_data, sizeof(read_data));
6552 s.next_read_length(10);
6553 memset(read_buf, 0, sizeof(read_buf));
6554 called = false;
6555 boost::asio::async_read_at(s, 0, buffers,
6556 boost::asio::transfer_exactly(42),
6557 bindns::bind(async_read_handler,
6558 _1, _2, 42, &called));
b32b8144
FG
6559 ioc.restart();
6560 ioc.run();
7c673cae
FG
6561 BOOST_ASIO_CHECK(called);
6562 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
6563
6564 s.reset(read_data, sizeof(read_data));
6565 s.next_read_length(10);
6566 memset(read_buf, 0, sizeof(read_buf));
6567 called = false;
6568 boost::asio::async_read_at(s, 1234, buffers,
6569 boost::asio::transfer_exactly(42),
6570 bindns::bind(async_read_handler,
6571 _1, _2, 42, &called));
b32b8144
FG
6572 ioc.restart();
6573 ioc.run();
7c673cae
FG
6574 BOOST_ASIO_CHECK(called);
6575 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
6576
6577 s.reset(read_data, sizeof(read_data));
6578 memset(read_buf, 0, sizeof(read_buf));
6579 called = false;
6580 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
6581 bindns::bind(async_read_handler,
6582 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6583 ioc.restart();
6584 ioc.run();
7c673cae
FG
6585 BOOST_ASIO_CHECK(called);
6586 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6587
6588 s.reset(read_data, sizeof(read_data));
6589 memset(read_buf, 0, sizeof(read_buf));
6590 called = false;
6591 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
6592 bindns::bind(async_read_handler,
6593 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6594 ioc.restart();
6595 ioc.run();
7c673cae
FG
6596 BOOST_ASIO_CHECK(called);
6597 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6598
6599 s.reset(read_data, sizeof(read_data));
6600 s.next_read_length(1);
6601 memset(read_buf, 0, sizeof(read_buf));
6602 called = false;
6603 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
6604 bindns::bind(async_read_handler,
6605 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6606 ioc.restart();
6607 ioc.run();
7c673cae
FG
6608 BOOST_ASIO_CHECK(called);
6609 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6610
6611 s.reset(read_data, sizeof(read_data));
6612 s.next_read_length(1);
6613 memset(read_buf, 0, sizeof(read_buf));
6614 called = false;
6615 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
6616 bindns::bind(async_read_handler,
6617 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6618 ioc.restart();
6619 ioc.run();
7c673cae
FG
6620 BOOST_ASIO_CHECK(called);
6621 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6622
6623 s.reset(read_data, sizeof(read_data));
6624 s.next_read_length(10);
6625 memset(read_buf, 0, sizeof(read_buf));
6626 called = false;
6627 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
6628 bindns::bind(async_read_handler,
6629 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6630 ioc.restart();
6631 ioc.run();
7c673cae
FG
6632 BOOST_ASIO_CHECK(called);
6633 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6634
6635 s.reset(read_data, sizeof(read_data));
6636 s.next_read_length(10);
6637 memset(read_buf, 0, sizeof(read_buf));
6638 called = false;
6639 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
6640 bindns::bind(async_read_handler,
6641 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6642 ioc.restart();
6643 ioc.run();
7c673cae
FG
6644 BOOST_ASIO_CHECK(called);
6645 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6646
6647 s.reset(read_data, sizeof(read_data));
6648 memset(read_buf, 0, sizeof(read_buf));
6649 called = false;
92f5a8d4 6650 boost::asio::async_read_at(s, 0, buffers, short_transfer(),
7c673cae
FG
6651 bindns::bind(async_read_handler,
6652 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6653 ioc.restart();
6654 ioc.run();
7c673cae
FG
6655 BOOST_ASIO_CHECK(called);
6656 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6657
6658 s.reset(read_data, sizeof(read_data));
6659 memset(read_buf, 0, sizeof(read_buf));
6660 called = false;
92f5a8d4 6661 boost::asio::async_read_at(s, 1234, buffers, short_transfer(),
7c673cae
FG
6662 bindns::bind(async_read_handler,
6663 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6664 ioc.restart();
6665 ioc.run();
7c673cae
FG
6666 BOOST_ASIO_CHECK(called);
6667 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6668
6669 s.reset(read_data, sizeof(read_data));
6670 s.next_read_length(1);
6671 memset(read_buf, 0, sizeof(read_buf));
6672 called = false;
92f5a8d4 6673 boost::asio::async_read_at(s, 0, buffers, short_transfer(),
7c673cae
FG
6674 bindns::bind(async_read_handler,
6675 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6676 ioc.restart();
6677 ioc.run();
7c673cae
FG
6678 BOOST_ASIO_CHECK(called);
6679 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6680
6681 s.reset(read_data, sizeof(read_data));
6682 s.next_read_length(1);
6683 memset(read_buf, 0, sizeof(read_buf));
6684 called = false;
92f5a8d4 6685 boost::asio::async_read_at(s, 1234, buffers, short_transfer(),
7c673cae
FG
6686 bindns::bind(async_read_handler,
6687 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6688 ioc.restart();
6689 ioc.run();
7c673cae
FG
6690 BOOST_ASIO_CHECK(called);
6691 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6692
6693 s.reset(read_data, sizeof(read_data));
6694 s.next_read_length(10);
6695 memset(read_buf, 0, sizeof(read_buf));
6696 called = false;
92f5a8d4 6697 boost::asio::async_read_at(s, 0, buffers, short_transfer(),
7c673cae
FG
6698 bindns::bind(async_read_handler,
6699 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6700 ioc.restart();
6701 ioc.run();
7c673cae
FG
6702 BOOST_ASIO_CHECK(called);
6703 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6704
6705 s.reset(read_data, sizeof(read_data));
6706 s.next_read_length(10);
6707 memset(read_buf, 0, sizeof(read_buf));
6708 called = false;
92f5a8d4 6709 boost::asio::async_read_at(s, 1234, buffers, short_transfer(),
7c673cae
FG
6710 bindns::bind(async_read_handler,
6711 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6712 ioc.restart();
6713 ioc.run();
7c673cae
FG
6714 BOOST_ASIO_CHECK(called);
6715 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6716
6717 s.reset(read_data, sizeof(read_data));
6718 memset(read_buf, 0, sizeof(read_buf));
6719 int i = boost::asio::async_read_at(s, 1234, buffers,
92f5a8d4 6720 short_transfer(), archetypes::lazy_handler());
7c673cae 6721 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
6722 ioc.restart();
6723 ioc.run();
7c673cae
FG
6724 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6725}
6726
6727void test_5_arg_streambuf_async_read_at()
6728{
6729#if defined(BOOST_ASIO_HAS_BOOST_BIND)
6730 namespace bindns = boost;
6731#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
6732 namespace bindns = std;
7c673cae 6733#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
f67539c2
TL
6734 using bindns::placeholders::_1;
6735 using bindns::placeholders::_2;
7c673cae 6736
b32b8144
FG
6737 boost::asio::io_context ioc;
6738 test_random_access_device s(ioc);
7c673cae
FG
6739 boost::asio::streambuf sb(sizeof(read_data));
6740
6741 s.reset(read_data, sizeof(read_data));
6742 sb.consume(sb.size());
6743 bool called = false;
6744 boost::asio::async_read_at(s, 0, sb,
6745 boost::asio::transfer_all(),
6746 bindns::bind(async_read_handler,
6747 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6748 ioc.restart();
6749 ioc.run();
7c673cae
FG
6750 BOOST_ASIO_CHECK(called);
6751 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6752 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
6753
6754 s.reset(read_data, sizeof(read_data));
6755 sb.consume(sb.size());
6756 called = false;
6757 boost::asio::async_read_at(s, 1234, sb,
6758 boost::asio::transfer_all(),
6759 bindns::bind(async_read_handler,
6760 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6761 ioc.restart();
6762 ioc.run();
7c673cae
FG
6763 BOOST_ASIO_CHECK(called);
6764 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6765 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
6766
6767 s.reset(read_data, sizeof(read_data));
6768 s.next_read_length(1);
6769 sb.consume(sb.size());
6770 called = false;
6771 boost::asio::async_read_at(s, 0, sb,
6772 boost::asio::transfer_all(),
6773 bindns::bind(async_read_handler,
6774 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6775 ioc.restart();
6776 ioc.run();
7c673cae
FG
6777 BOOST_ASIO_CHECK(called);
6778 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6779 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
6780
6781 s.reset(read_data, sizeof(read_data));
6782 s.next_read_length(1);
6783 sb.consume(sb.size());
6784 called = false;
6785 boost::asio::async_read_at(s, 1234, sb,
6786 boost::asio::transfer_all(),
6787 bindns::bind(async_read_handler,
6788 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6789 ioc.restart();
6790 ioc.run();
7c673cae
FG
6791 BOOST_ASIO_CHECK(called);
6792 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6793 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
6794
6795 s.reset(read_data, sizeof(read_data));
6796 s.next_read_length(10);
6797 sb.consume(sb.size());
6798 called = false;
6799 boost::asio::async_read_at(s, 0, sb,
6800 boost::asio::transfer_all(),
6801 bindns::bind(async_read_handler,
6802 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6803 ioc.restart();
6804 ioc.run();
7c673cae
FG
6805 BOOST_ASIO_CHECK(called);
6806 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6807 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
6808
6809 s.reset(read_data, sizeof(read_data));
6810 s.next_read_length(10);
6811 sb.consume(sb.size());
6812 called = false;
6813 boost::asio::async_read_at(s, 1234, sb,
6814 boost::asio::transfer_all(),
6815 bindns::bind(async_read_handler,
6816 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6817 ioc.restart();
6818 ioc.run();
7c673cae
FG
6819 BOOST_ASIO_CHECK(called);
6820 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6821 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
6822
6823 s.reset(read_data, sizeof(read_data));
6824 sb.consume(sb.size());
6825 called = false;
6826 boost::asio::async_read_at(s, 0, sb,
6827 boost::asio::transfer_at_least(1),
6828 bindns::bind(async_read_handler,
6829 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6830 ioc.restart();
6831 ioc.run();
7c673cae
FG
6832 BOOST_ASIO_CHECK(called);
6833 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6834 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
6835
6836 s.reset(read_data, sizeof(read_data));
6837 sb.consume(sb.size());
6838 called = false;
6839 boost::asio::async_read_at(s, 1234, sb,
6840 boost::asio::transfer_at_least(1),
6841 bindns::bind(async_read_handler,
6842 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6843 ioc.restart();
6844 ioc.run();
7c673cae
FG
6845 BOOST_ASIO_CHECK(called);
6846 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6847 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
6848
6849 s.reset(read_data, sizeof(read_data));
6850 s.next_read_length(1);
6851 sb.consume(sb.size());
6852 called = false;
6853 boost::asio::async_read_at(s, 0, sb,
6854 boost::asio::transfer_at_least(1),
6855 bindns::bind(async_read_handler,
6856 _1, _2, 1, &called));
b32b8144
FG
6857 ioc.restart();
6858 ioc.run();
7c673cae
FG
6859 BOOST_ASIO_CHECK(called);
6860 BOOST_ASIO_CHECK(sb.size() == 1);
6861 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
6862
6863 s.reset(read_data, sizeof(read_data));
6864 s.next_read_length(1);
6865 sb.consume(sb.size());
6866 called = false;
6867 boost::asio::async_read_at(s, 1234, sb,
6868 boost::asio::transfer_at_least(1),
6869 bindns::bind(async_read_handler,
6870 _1, _2, 1, &called));
b32b8144
FG
6871 ioc.restart();
6872 ioc.run();
7c673cae
FG
6873 BOOST_ASIO_CHECK(called);
6874 BOOST_ASIO_CHECK(sb.size() == 1);
6875 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
6876
6877 s.reset(read_data, sizeof(read_data));
6878 s.next_read_length(10);
6879 sb.consume(sb.size());
6880 called = false;
6881 boost::asio::async_read_at(s, 0, sb,
6882 boost::asio::transfer_at_least(1),
6883 bindns::bind(async_read_handler,
6884 _1, _2, 10, &called));
b32b8144
FG
6885 ioc.restart();
6886 ioc.run();
7c673cae
FG
6887 BOOST_ASIO_CHECK(called);
6888 BOOST_ASIO_CHECK(sb.size() == 10);
6889 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
6890
6891 s.reset(read_data, sizeof(read_data));
6892 s.next_read_length(10);
6893 sb.consume(sb.size());
6894 called = false;
6895 boost::asio::async_read_at(s, 1234, sb,
6896 boost::asio::transfer_at_least(1),
6897 bindns::bind(async_read_handler,
6898 _1, _2, 10, &called));
b32b8144
FG
6899 ioc.restart();
6900 ioc.run();
7c673cae
FG
6901 BOOST_ASIO_CHECK(called);
6902 BOOST_ASIO_CHECK(sb.size() == 10);
6903 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
6904
6905 s.reset(read_data, sizeof(read_data));
6906 sb.consume(sb.size());
6907 called = false;
6908 boost::asio::async_read_at(s, 0, sb,
6909 boost::asio::transfer_at_least(10),
6910 bindns::bind(async_read_handler,
6911 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6912 ioc.restart();
6913 ioc.run();
7c673cae
FG
6914 BOOST_ASIO_CHECK(called);
6915 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6916 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
6917
6918 s.reset(read_data, sizeof(read_data));
6919 sb.consume(sb.size());
6920 called = false;
6921 boost::asio::async_read_at(s, 1234, sb,
6922 boost::asio::transfer_at_least(10),
6923 bindns::bind(async_read_handler,
6924 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6925 ioc.restart();
6926 ioc.run();
7c673cae
FG
6927 BOOST_ASIO_CHECK(called);
6928 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6929 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
6930
6931 s.reset(read_data, sizeof(read_data));
6932 s.next_read_length(1);
6933 sb.consume(sb.size());
6934 called = false;
6935 boost::asio::async_read_at(s, 0, sb,
6936 boost::asio::transfer_at_least(10),
6937 bindns::bind(async_read_handler,
6938 _1, _2, 10, &called));
b32b8144
FG
6939 ioc.restart();
6940 ioc.run();
7c673cae
FG
6941 BOOST_ASIO_CHECK(called);
6942 BOOST_ASIO_CHECK(sb.size() == 10);
6943 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
6944
6945 s.reset(read_data, sizeof(read_data));
6946 s.next_read_length(1);
6947 sb.consume(sb.size());
6948 called = false;
6949 boost::asio::async_read_at(s, 1234, sb,
6950 boost::asio::transfer_at_least(10),
6951 bindns::bind(async_read_handler,
6952 _1, _2, 10, &called));
b32b8144
FG
6953 ioc.restart();
6954 ioc.run();
7c673cae
FG
6955 BOOST_ASIO_CHECK(called);
6956 BOOST_ASIO_CHECK(sb.size() == 10);
6957 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
6958
6959 s.reset(read_data, sizeof(read_data));
6960 s.next_read_length(10);
6961 sb.consume(sb.size());
6962 called = false;
6963 boost::asio::async_read_at(s, 0, sb,
6964 boost::asio::transfer_at_least(10),
6965 bindns::bind(async_read_handler,
6966 _1, _2, 10, &called));
b32b8144
FG
6967 ioc.restart();
6968 ioc.run();
7c673cae
FG
6969 BOOST_ASIO_CHECK(called);
6970 BOOST_ASIO_CHECK(sb.size() == 10);
6971 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
6972
6973 s.reset(read_data, sizeof(read_data));
6974 s.next_read_length(10);
6975 sb.consume(sb.size());
6976 called = false;
6977 boost::asio::async_read_at(s, 1234, sb,
6978 boost::asio::transfer_at_least(10),
6979 bindns::bind(async_read_handler,
6980 _1, _2, 10, &called));
b32b8144
FG
6981 ioc.restart();
6982 ioc.run();
7c673cae
FG
6983 BOOST_ASIO_CHECK(called);
6984 BOOST_ASIO_CHECK(sb.size() == 10);
6985 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
6986
6987 s.reset(read_data, sizeof(read_data));
6988 sb.consume(sb.size());
6989 called = false;
6990 boost::asio::async_read_at(s, 0, sb,
6991 boost::asio::transfer_at_least(42),
6992 bindns::bind(async_read_handler,
6993 _1, _2, sizeof(read_data), &called));
b32b8144
FG
6994 ioc.restart();
6995 ioc.run();
7c673cae
FG
6996 BOOST_ASIO_CHECK(called);
6997 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6998 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
6999
7000 s.reset(read_data, sizeof(read_data));
7001 sb.consume(sb.size());
7002 called = false;
7003 boost::asio::async_read_at(s, 1234, sb,
7004 boost::asio::transfer_at_least(42),
7005 bindns::bind(async_read_handler,
7006 _1, _2, sizeof(read_data), &called));
b32b8144
FG
7007 ioc.restart();
7008 ioc.run();
7c673cae
FG
7009 BOOST_ASIO_CHECK(called);
7010 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7011 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
7012
7013 s.reset(read_data, sizeof(read_data));
7014 s.next_read_length(1);
7015 sb.consume(sb.size());
7016 called = false;
7017 boost::asio::async_read_at(s, 0, sb,
7018 boost::asio::transfer_at_least(42),
7019 bindns::bind(async_read_handler,
7020 _1, _2, 42, &called));
b32b8144
FG
7021 ioc.restart();
7022 ioc.run();
7c673cae
FG
7023 BOOST_ASIO_CHECK(called);
7024 BOOST_ASIO_CHECK(sb.size() == 42);
7025 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
7026
7027 s.reset(read_data, sizeof(read_data));
7028 s.next_read_length(1);
7029 sb.consume(sb.size());
7030 called = false;
7031 boost::asio::async_read_at(s, 1234, sb,
7032 boost::asio::transfer_at_least(42),
7033 bindns::bind(async_read_handler,
7034 _1, _2, 42, &called));
b32b8144
FG
7035 ioc.restart();
7036 ioc.run();
7c673cae
FG
7037 BOOST_ASIO_CHECK(called);
7038 BOOST_ASIO_CHECK(sb.size() == 42);
7039 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
7040
7041 s.reset(read_data, sizeof(read_data));
7042 s.next_read_length(10);
7043 sb.consume(sb.size());
7044 called = false;
7045 boost::asio::async_read_at(s, 0, sb,
7046 boost::asio::transfer_at_least(42),
7047 bindns::bind(async_read_handler,
7048 _1, _2, 50, &called));
b32b8144
FG
7049 ioc.restart();
7050 ioc.run();
7c673cae
FG
7051 BOOST_ASIO_CHECK(called);
7052 BOOST_ASIO_CHECK(sb.size() == 50);
7053 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 50));
7054
7055 s.reset(read_data, sizeof(read_data));
7056 s.next_read_length(10);
7057 sb.consume(sb.size());
7058 called = false;
7059 boost::asio::async_read_at(s, 1234, sb,
7060 boost::asio::transfer_at_least(42),
7061 bindns::bind(async_read_handler,
7062 _1, _2, 50, &called));
b32b8144
FG
7063 ioc.restart();
7064 ioc.run();
7c673cae
FG
7065 BOOST_ASIO_CHECK(called);
7066 BOOST_ASIO_CHECK(sb.size() == 50);
7067 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 50));
7068
7069 s.reset(read_data, sizeof(read_data));
7070 sb.consume(sb.size());
7071 called = false;
7072 boost::asio::async_read_at(s, 0, sb,
7073 boost::asio::transfer_exactly(1),
7074 bindns::bind(async_read_handler,
7075 _1, _2, 1, &called));
b32b8144
FG
7076 ioc.restart();
7077 ioc.run();
7c673cae
FG
7078 BOOST_ASIO_CHECK(called);
7079 BOOST_ASIO_CHECK(sb.size() == 1);
7080 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
7081
7082 s.reset(read_data, sizeof(read_data));
7083 sb.consume(sb.size());
7084 called = false;
7085 boost::asio::async_read_at(s, 1234, sb,
7086 boost::asio::transfer_exactly(1),
7087 bindns::bind(async_read_handler,
7088 _1, _2, 1, &called));
b32b8144
FG
7089 ioc.restart();
7090 ioc.run();
7c673cae
FG
7091 BOOST_ASIO_CHECK(called);
7092 BOOST_ASIO_CHECK(sb.size() == 1);
7093 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
7094
7095 s.reset(read_data, sizeof(read_data));
7096 s.next_read_length(1);
7097 sb.consume(sb.size());
7098 called = false;
7099 boost::asio::async_read_at(s, 0, sb,
7100 boost::asio::transfer_exactly(1),
7101 bindns::bind(async_read_handler,
7102 _1, _2, 1, &called));
b32b8144
FG
7103 ioc.restart();
7104 ioc.run();
7c673cae
FG
7105 BOOST_ASIO_CHECK(called);
7106 BOOST_ASIO_CHECK(sb.size() == 1);
7107 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
7108
7109 s.reset(read_data, sizeof(read_data));
7110 s.next_read_length(1);
7111 sb.consume(sb.size());
7112 called = false;
7113 boost::asio::async_read_at(s, 1234, sb,
7114 boost::asio::transfer_exactly(1),
7115 bindns::bind(async_read_handler,
7116 _1, _2, 1, &called));
b32b8144
FG
7117 ioc.restart();
7118 ioc.run();
7c673cae
FG
7119 BOOST_ASIO_CHECK(called);
7120 BOOST_ASIO_CHECK(sb.size() == 1);
7121 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
7122
7123 s.reset(read_data, sizeof(read_data));
7124 s.next_read_length(10);
7125 sb.consume(sb.size());
7126 called = false;
7127 boost::asio::async_read_at(s, 0, sb,
7128 boost::asio::transfer_exactly(1),
7129 bindns::bind(async_read_handler,
7130 _1, _2, 1, &called));
b32b8144
FG
7131 ioc.restart();
7132 ioc.run();
7c673cae
FG
7133 BOOST_ASIO_CHECK(called);
7134 BOOST_ASIO_CHECK(sb.size() == 1);
7135 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
7136
7137 s.reset(read_data, sizeof(read_data));
7138 s.next_read_length(10);
7139 sb.consume(sb.size());
7140 called = false;
7141 boost::asio::async_read_at(s, 1234, sb,
7142 boost::asio::transfer_exactly(1),
7143 bindns::bind(async_read_handler,
7144 _1, _2, 1, &called));
b32b8144
FG
7145 ioc.restart();
7146 ioc.run();
7c673cae
FG
7147 BOOST_ASIO_CHECK(called);
7148 BOOST_ASIO_CHECK(sb.size() == 1);
7149 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
7150
7151 s.reset(read_data, sizeof(read_data));
7152 sb.consume(sb.size());
7153 called = false;
7154 boost::asio::async_read_at(s, 0, sb,
7155 boost::asio::transfer_exactly(10),
7156 bindns::bind(async_read_handler,
7157 _1, _2, 10, &called));
b32b8144
FG
7158 ioc.restart();
7159 ioc.run();
7c673cae
FG
7160 BOOST_ASIO_CHECK(called);
7161 BOOST_ASIO_CHECK(sb.size() == 10);
7162 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
7163
7164 s.reset(read_data, sizeof(read_data));
7165 sb.consume(sb.size());
7166 called = false;
7167 boost::asio::async_read_at(s, 1234, sb,
7168 boost::asio::transfer_exactly(10),
7169 bindns::bind(async_read_handler,
7170 _1, _2, 10, &called));
b32b8144
FG
7171 ioc.restart();
7172 ioc.run();
7c673cae
FG
7173 BOOST_ASIO_CHECK(called);
7174 BOOST_ASIO_CHECK(sb.size() == 10);
7175 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
7176
7177 s.reset(read_data, sizeof(read_data));
7178 s.next_read_length(1);
7179 sb.consume(sb.size());
7180 called = false;
7181 boost::asio::async_read_at(s, 0, sb,
7182 boost::asio::transfer_exactly(10),
7183 bindns::bind(async_read_handler,
7184 _1, _2, 10, &called));
b32b8144
FG
7185 ioc.restart();
7186 ioc.run();
7c673cae
FG
7187 BOOST_ASIO_CHECK(called);
7188 BOOST_ASIO_CHECK(sb.size() == 10);
7189 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
7190
7191 s.reset(read_data, sizeof(read_data));
7192 s.next_read_length(1);
7193 sb.consume(sb.size());
7194 called = false;
7195 boost::asio::async_read_at(s, 1234, sb,
7196 boost::asio::transfer_exactly(10),
7197 bindns::bind(async_read_handler,
7198 _1, _2, 10, &called));
b32b8144
FG
7199 ioc.restart();
7200 ioc.run();
7c673cae
FG
7201 BOOST_ASIO_CHECK(called);
7202 BOOST_ASIO_CHECK(sb.size() == 10);
7203 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
7204
7205 s.reset(read_data, sizeof(read_data));
7206 s.next_read_length(10);
7207 sb.consume(sb.size());
7208 called = false;
7209 boost::asio::async_read_at(s, 0, sb,
7210 boost::asio::transfer_exactly(10),
7211 bindns::bind(async_read_handler,
7212 _1, _2, 10, &called));
b32b8144
FG
7213 ioc.restart();
7214 ioc.run();
7c673cae
FG
7215 BOOST_ASIO_CHECK(called);
7216 BOOST_ASIO_CHECK(sb.size() == 10);
7217 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
7218
7219 s.reset(read_data, sizeof(read_data));
7220 s.next_read_length(10);
7221 sb.consume(sb.size());
7222 called = false;
7223 boost::asio::async_read_at(s, 1234, sb,
7224 boost::asio::transfer_exactly(10),
7225 bindns::bind(async_read_handler,
7226 _1, _2, 10, &called));
b32b8144
FG
7227 ioc.restart();
7228 ioc.run();
7c673cae
FG
7229 BOOST_ASIO_CHECK(called);
7230 BOOST_ASIO_CHECK(sb.size() == 10);
7231 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
7232
7233 s.reset(read_data, sizeof(read_data));
7234 sb.consume(sb.size());
7235 called = false;
7236 boost::asio::async_read_at(s, 0, sb,
7237 boost::asio::transfer_exactly(42),
7238 bindns::bind(async_read_handler,
7239 _1, _2, 42, &called));
b32b8144
FG
7240 ioc.restart();
7241 ioc.run();
7c673cae
FG
7242 BOOST_ASIO_CHECK(called);
7243 BOOST_ASIO_CHECK(sb.size() == 42);
7244 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
7245
7246 s.reset(read_data, sizeof(read_data));
7247 sb.consume(sb.size());
7248 called = false;
7249 boost::asio::async_read_at(s, 1234, sb,
7250 boost::asio::transfer_exactly(42),
7251 bindns::bind(async_read_handler,
7252 _1, _2, 42, &called));
b32b8144
FG
7253 ioc.restart();
7254 ioc.run();
7c673cae
FG
7255 BOOST_ASIO_CHECK(called);
7256 BOOST_ASIO_CHECK(sb.size() == 42);
7257 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
7258
7259 s.reset(read_data, sizeof(read_data));
7260 s.next_read_length(1);
7261 sb.consume(sb.size());
7262 called = false;
7263 boost::asio::async_read_at(s, 0, sb,
7264 boost::asio::transfer_exactly(42),
7265 bindns::bind(async_read_handler,
7266 _1, _2, 42, &called));
b32b8144
FG
7267 ioc.restart();
7268 ioc.run();
7c673cae
FG
7269 BOOST_ASIO_CHECK(called);
7270 BOOST_ASIO_CHECK(sb.size() == 42);
7271 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
7272
7273 s.reset(read_data, sizeof(read_data));
7274 s.next_read_length(1);
7275 sb.consume(sb.size());
7276 called = false;
7277 boost::asio::async_read_at(s, 1234, sb,
7278 boost::asio::transfer_exactly(42),
7279 bindns::bind(async_read_handler,
7280 _1, _2, 42, &called));
b32b8144
FG
7281 ioc.restart();
7282 ioc.run();
7c673cae
FG
7283 BOOST_ASIO_CHECK(called);
7284 BOOST_ASIO_CHECK(sb.size() == 42);
7285 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
7286
7287 s.reset(read_data, sizeof(read_data));
7288 s.next_read_length(10);
7289 sb.consume(sb.size());
7290 called = false;
7291 boost::asio::async_read_at(s, 0, sb,
7292 boost::asio::transfer_exactly(42),
7293 bindns::bind(async_read_handler,
7294 _1, _2, 42, &called));
b32b8144
FG
7295 ioc.restart();
7296 ioc.run();
7c673cae
FG
7297 BOOST_ASIO_CHECK(called);
7298 BOOST_ASIO_CHECK(sb.size() == 42);
7299 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
7300
7301 s.reset(read_data, sizeof(read_data));
7302 s.next_read_length(10);
7303 sb.consume(sb.size());
7304 called = false;
7305 boost::asio::async_read_at(s, 1234, sb,
7306 boost::asio::transfer_exactly(42),
7307 bindns::bind(async_read_handler,
7308 _1, _2, 42, &called));
b32b8144
FG
7309 ioc.restart();
7310 ioc.run();
7c673cae
FG
7311 BOOST_ASIO_CHECK(called);
7312 BOOST_ASIO_CHECK(sb.size() == 42);
7313 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
7314
7315 s.reset(read_data, sizeof(read_data));
7316 sb.consume(sb.size());
7317 called = false;
7318 boost::asio::async_read_at(s, 0, sb, old_style_transfer_all,
7319 bindns::bind(async_read_handler,
7320 _1, _2, sizeof(read_data), &called));
b32b8144
FG
7321 ioc.restart();
7322 ioc.run();
7c673cae
FG
7323 BOOST_ASIO_CHECK(called);
7324 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7325 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
7326
7327 s.reset(read_data, sizeof(read_data));
7328 sb.consume(sb.size());
7329 called = false;
7330 boost::asio::async_read_at(s, 1234, sb, old_style_transfer_all,
7331 bindns::bind(async_read_handler,
7332 _1, _2, sizeof(read_data), &called));
b32b8144
FG
7333 ioc.restart();
7334 ioc.run();
7c673cae
FG
7335 BOOST_ASIO_CHECK(called);
7336 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7337 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
7338
7339 s.reset(read_data, sizeof(read_data));
7340 s.next_read_length(1);
7341 sb.consume(sb.size());
7342 called = false;
7343 boost::asio::async_read_at(s, 0, sb, old_style_transfer_all,
7344 bindns::bind(async_read_handler,
7345 _1, _2, sizeof(read_data), &called));
b32b8144
FG
7346 ioc.restart();
7347 ioc.run();
7c673cae
FG
7348 BOOST_ASIO_CHECK(called);
7349 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7350 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
7351
7352 s.reset(read_data, sizeof(read_data));
7353 s.next_read_length(1);
7354 sb.consume(sb.size());
7355 called = false;
7356 boost::asio::async_read_at(s, 1234, sb, old_style_transfer_all,
7357 bindns::bind(async_read_handler,
7358 _1, _2, sizeof(read_data), &called));
b32b8144
FG
7359 ioc.restart();
7360 ioc.run();
7c673cae
FG
7361 BOOST_ASIO_CHECK(called);
7362 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7363 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
7364
7365 s.reset(read_data, sizeof(read_data));
7366 s.next_read_length(10);
7367 sb.consume(sb.size());
7368 called = false;
7369 boost::asio::async_read_at(s, 0, sb, old_style_transfer_all,
7370 bindns::bind(async_read_handler,
7371 _1, _2, sizeof(read_data), &called));
b32b8144
FG
7372 ioc.restart();
7373 ioc.run();
7c673cae
FG
7374 BOOST_ASIO_CHECK(called);
7375 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7376 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
7377
7378 s.reset(read_data, sizeof(read_data));
7379 s.next_read_length(10);
7380 sb.consume(sb.size());
7381 called = false;
7382 boost::asio::async_read_at(s, 1234, sb, old_style_transfer_all,
7383 bindns::bind(async_read_handler,
7384 _1, _2, sizeof(read_data), &called));
b32b8144
FG
7385 ioc.restart();
7386 ioc.run();
7c673cae
FG
7387 BOOST_ASIO_CHECK(called);
7388 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7389 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
7390
7391 s.reset(read_data, sizeof(read_data));
7392 sb.consume(sb.size());
7393 called = false;
92f5a8d4 7394 boost::asio::async_read_at(s, 0, sb, short_transfer(),
7c673cae
FG
7395 bindns::bind(async_read_handler,
7396 _1, _2, sizeof(read_data), &called));
b32b8144
FG
7397 ioc.restart();
7398 ioc.run();
7c673cae
FG
7399 BOOST_ASIO_CHECK(called);
7400 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7401 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
7402
7403 s.reset(read_data, sizeof(read_data));
7404 sb.consume(sb.size());
7405 called = false;
92f5a8d4 7406 boost::asio::async_read_at(s, 1234, sb, short_transfer(),
7c673cae
FG
7407 bindns::bind(async_read_handler,
7408 _1, _2, sizeof(read_data), &called));
b32b8144
FG
7409 ioc.restart();
7410 ioc.run();
7c673cae
FG
7411 BOOST_ASIO_CHECK(called);
7412 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7413 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
7414
7415 s.reset(read_data, sizeof(read_data));
7416 s.next_read_length(1);
7417 sb.consume(sb.size());
7418 called = false;
92f5a8d4 7419 boost::asio::async_read_at(s, 0, sb, short_transfer(),
7c673cae
FG
7420 bindns::bind(async_read_handler,
7421 _1, _2, sizeof(read_data), &called));
b32b8144
FG
7422 ioc.restart();
7423 ioc.run();
7c673cae
FG
7424 BOOST_ASIO_CHECK(called);
7425 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7426 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
7427
7428 s.reset(read_data, sizeof(read_data));
7429 s.next_read_length(1);
7430 sb.consume(sb.size());
7431 called = false;
92f5a8d4 7432 boost::asio::async_read_at(s, 1234, sb, short_transfer(),
7c673cae
FG
7433 bindns::bind(async_read_handler,
7434 _1, _2, sizeof(read_data), &called));
b32b8144
FG
7435 ioc.restart();
7436 ioc.run();
7c673cae
FG
7437 BOOST_ASIO_CHECK(called);
7438 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7439 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
7440
7441 s.reset(read_data, sizeof(read_data));
7442 s.next_read_length(10);
7443 sb.consume(sb.size());
7444 called = false;
92f5a8d4 7445 boost::asio::async_read_at(s, 0, sb, short_transfer(),
7c673cae
FG
7446 bindns::bind(async_read_handler,
7447 _1, _2, sizeof(read_data), &called));
b32b8144
FG
7448 ioc.restart();
7449 ioc.run();
7c673cae
FG
7450 BOOST_ASIO_CHECK(called);
7451 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7452 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
7453
7454 s.reset(read_data, sizeof(read_data));
7455 s.next_read_length(10);
7456 sb.consume(sb.size());
7457 called = false;
92f5a8d4 7458 boost::asio::async_read_at(s, 1234, sb, short_transfer(),
7c673cae
FG
7459 bindns::bind(async_read_handler,
7460 _1, _2, sizeof(read_data), &called));
b32b8144
FG
7461 ioc.restart();
7462 ioc.run();
7c673cae
FG
7463 BOOST_ASIO_CHECK(called);
7464 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7465 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
7466
7467 s.reset(read_data, sizeof(read_data));
7468 sb.consume(sb.size());
7469 int i = boost::asio::async_read_at(s, 1234, sb,
92f5a8d4 7470 short_transfer(), archetypes::lazy_handler());
7c673cae 7471 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
7472 ioc.restart();
7473 ioc.run();
7c673cae
FG
7474 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
7475}
7476
7477BOOST_ASIO_TEST_SUITE
7478(
7479 "read_at",
b32b8144 7480 BOOST_ASIO_TEST_CASE(test_3_arg_mutable_buffer_read_at)
7c673cae
FG
7481 BOOST_ASIO_TEST_CASE(test_3_arg_vector_buffers_read_at)
7482 BOOST_ASIO_TEST_CASE(test_3_arg_streambuf_read_at)
b32b8144 7483 BOOST_ASIO_TEST_CASE(test_4_arg_nothrow_mutable_buffer_read_at)
7c673cae
FG
7484 BOOST_ASIO_TEST_CASE(test_4_arg_nothrow_vector_buffers_read_at)
7485 BOOST_ASIO_TEST_CASE(test_4_arg_nothrow_streambuf_read_at)
b32b8144 7486 BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffer_read_at)
7c673cae
FG
7487 BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_read_at)
7488 BOOST_ASIO_TEST_CASE(test_4_arg_streambuf_read_at)
b32b8144 7489 BOOST_ASIO_TEST_CASE(test_5_arg_mutable_buffer_read_at)
7c673cae
FG
7490 BOOST_ASIO_TEST_CASE(test_5_arg_vector_buffers_read_at)
7491 BOOST_ASIO_TEST_CASE(test_5_arg_streambuf_read_at)
b32b8144 7492 BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffer_async_read_at)
7c673cae
FG
7493 BOOST_ASIO_TEST_CASE(test_4_arg_boost_array_buffers_async_read_at)
7494 BOOST_ASIO_TEST_CASE(test_4_arg_std_array_buffers_async_read_at)
7495 BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_async_read_at)
7496 BOOST_ASIO_TEST_CASE(test_4_arg_streambuf_async_read_at)
b32b8144 7497 BOOST_ASIO_TEST_CASE(test_5_arg_mutable_buffer_async_read_at)
7c673cae
FG
7498 BOOST_ASIO_TEST_CASE(test_5_arg_boost_array_buffers_async_read_at)
7499 BOOST_ASIO_TEST_CASE(test_5_arg_std_array_buffers_async_read_at)
7500 BOOST_ASIO_TEST_CASE(test_5_arg_vector_buffers_async_read_at)
7501 BOOST_ASIO_TEST_CASE(test_5_arg_streambuf_async_read_at)
7502)