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