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