]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/asio/test/write.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / asio / test / write.cpp
CommitLineData
7c673cae
FG
1//
2// write.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.hpp>
18
19#include <cstring>
20#include <vector>
21#include "archetypes/async_result.hpp"
b32b8144
FG
22#include <boost/asio/io_context.hpp>
23#include <boost/asio/post.hpp>
7c673cae
FG
24#include <boost/asio/streambuf.hpp>
25#include "unit_test.hpp"
26
27#if defined(BOOST_ASIO_HAS_BOOST_BIND)
28# include <boost/bind.hpp>
29#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
30# include <functional>
31#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
32
33#if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
34#include <boost/array.hpp>
35#endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
36
37#if defined(BOOST_ASIO_HAS_STD_ARRAY)
38# include <array>
39#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
40
41using namespace std; // For memcmp, memcpy and memset.
42
43class test_stream
44{
45public:
b32b8144 46 typedef boost::asio::io_context::executor_type executor_type;
7c673cae 47
b32b8144
FG
48 test_stream(boost::asio::io_context& io_context)
49 : io_context_(io_context),
7c673cae
FG
50 length_(max_length),
51 position_(0),
52 next_write_length_(max_length)
53 {
54 memset(data_, 0, max_length);
55 }
56
b32b8144 57 executor_type get_executor() BOOST_ASIO_NOEXCEPT
7c673cae 58 {
b32b8144 59 return io_context_.get_executor();
7c673cae
FG
60 }
61
62 void reset(size_t length = max_length)
63 {
64 BOOST_ASIO_CHECK(length <= max_length);
65
66 memset(data_, 0, max_length);
67 length_ = length;
68 position_ = 0;
69 next_write_length_ = length;
70 }
71
72 void next_write_length(size_t length)
73 {
74 next_write_length_ = length;
75 }
76
b32b8144
FG
77 template <typename Iterator>
78 bool check_buffers(Iterator begin, Iterator end, size_t length)
7c673cae
FG
79 {
80 if (length != position_)
81 return false;
82
b32b8144 83 Iterator iter = begin;
7c673cae
FG
84 size_t checked_length = 0;
85 for (; iter != end && checked_length < length; ++iter)
86 {
87 size_t buffer_length = boost::asio::buffer_size(*iter);
88 if (buffer_length > length - checked_length)
89 buffer_length = length - checked_length;
b32b8144 90 if (memcmp(data_ + checked_length, iter->data(), buffer_length) != 0)
7c673cae
FG
91 return false;
92 checked_length += buffer_length;
93 }
94
95 return true;
96 }
97
b32b8144
FG
98 template <typename Const_Buffers>
99 bool check_buffers(const Const_Buffers& buffers, size_t length)
100 {
101 return check_buffers(boost::asio::buffer_sequence_begin(buffers),
102 boost::asio::buffer_sequence_end(buffers), length);
103 }
104
7c673cae
FG
105 template <typename Const_Buffers>
106 size_t write_some(const Const_Buffers& buffers)
107 {
108 size_t n = boost::asio::buffer_copy(
109 boost::asio::buffer(data_, length_) + position_,
110 buffers, next_write_length_);
111 position_ += n;
112 return n;
113 }
114
115 template <typename Const_Buffers>
116 size_t write_some(const Const_Buffers& buffers, boost::system::error_code& ec)
117 {
118 ec = boost::system::error_code();
119 return write_some(buffers);
120 }
121
122 template <typename Const_Buffers, typename Handler>
123 void async_write_some(const Const_Buffers& buffers, Handler handler)
124 {
125 size_t bytes_transferred = write_some(buffers);
b32b8144
FG
126 boost::asio::post(get_executor(),
127 boost::asio::detail::bind_handler(
128 BOOST_ASIO_MOVE_CAST(Handler)(handler),
129 boost::system::error_code(), bytes_transferred));
7c673cae
FG
130 }
131
132private:
b32b8144 133 boost::asio::io_context& io_context_;
7c673cae
FG
134 enum { max_length = 8192 };
135 char data_[max_length];
136 size_t length_;
137 size_t position_;
138 size_t next_write_length_;
139};
140
141static const char write_data[]
142 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
143static char mutable_write_data[]
144 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
145
146void test_2_arg_zero_buffers_write()
147{
b32b8144
FG
148 boost::asio::io_context ioc;
149 test_stream s(ioc);
7c673cae
FG
150 std::vector<boost::asio::const_buffer> buffers;
151
152 size_t bytes_transferred = boost::asio::write(s, buffers);
153 BOOST_ASIO_CHECK(bytes_transferred == 0);
154}
155
b32b8144 156void test_2_arg_const_buffer_write()
7c673cae 157{
b32b8144
FG
158 boost::asio::io_context ioc;
159 test_stream s(ioc);
160 boost::asio::const_buffer buffers
7c673cae
FG
161 = boost::asio::buffer(write_data, sizeof(write_data));
162
163 s.reset();
164 size_t bytes_transferred = boost::asio::write(s, buffers);
165 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
166 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
167
168 s.reset();
169 s.next_write_length(1);
170 bytes_transferred = boost::asio::write(s, buffers);
171 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
172 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
173
174 s.reset();
175 s.next_write_length(10);
176 bytes_transferred = boost::asio::write(s, buffers);
177 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
178 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
179}
180
b32b8144 181void test_2_arg_mutable_buffer_write()
7c673cae 182{
b32b8144
FG
183 boost::asio::io_context ioc;
184 test_stream s(ioc);
185 boost::asio::mutable_buffer buffers
7c673cae
FG
186 = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
187
188 s.reset();
189 size_t bytes_transferred = boost::asio::write(s, buffers);
190 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
191 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
192
193 s.reset();
194 s.next_write_length(1);
195 bytes_transferred = boost::asio::write(s, buffers);
196 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
197 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
198
199 s.reset();
200 s.next_write_length(10);
201 bytes_transferred = boost::asio::write(s, buffers);
202 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
203 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
204}
205
206void test_2_arg_vector_buffers_write()
207{
b32b8144
FG
208 boost::asio::io_context ioc;
209 test_stream s(ioc);
7c673cae
FG
210 std::vector<boost::asio::const_buffer> buffers;
211 buffers.push_back(boost::asio::buffer(write_data, 32));
b32b8144
FG
212 buffers.push_back(boost::asio::buffer(write_data, 39) + 32);
213 buffers.push_back(boost::asio::buffer(write_data) + 39);
7c673cae
FG
214
215 s.reset();
216 size_t bytes_transferred = boost::asio::write(s, buffers);
217 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
218 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
219
220 s.reset();
221 s.next_write_length(1);
222 bytes_transferred = boost::asio::write(s, buffers);
223 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
224 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
225
226 s.reset();
227 s.next_write_length(10);
228 bytes_transferred = boost::asio::write(s, buffers);
229 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
230 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
231}
232
233void test_3_arg_nothrow_zero_buffers_write()
234{
b32b8144
FG
235 boost::asio::io_context ioc;
236 test_stream s(ioc);
7c673cae
FG
237 std::vector<boost::asio::const_buffer> buffers;
238
239 boost::system::error_code error;
240 size_t bytes_transferred = boost::asio::write(s, buffers, error);
241 BOOST_ASIO_CHECK(bytes_transferred == 0);
242 BOOST_ASIO_CHECK(!error);
243}
244
b32b8144 245void test_3_arg_nothrow_const_buffer_write()
7c673cae 246{
b32b8144
FG
247 boost::asio::io_context ioc;
248 test_stream s(ioc);
249 boost::asio::const_buffer buffers
7c673cae
FG
250 = boost::asio::buffer(write_data, sizeof(write_data));
251
252 s.reset();
253 boost::system::error_code error;
254 size_t bytes_transferred = boost::asio::write(s, buffers, error);
255 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
256 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
257 BOOST_ASIO_CHECK(!error);
258
259 s.reset();
260 s.next_write_length(1);
261 bytes_transferred = boost::asio::write(s, buffers, error);
262 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
263 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
264 BOOST_ASIO_CHECK(!error);
265
266 s.reset();
267 s.next_write_length(10);
268 bytes_transferred = boost::asio::write(s, buffers, error);
269 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
270 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
271 BOOST_ASIO_CHECK(!error);
272}
273
b32b8144 274void test_3_arg_nothrow_mutable_buffer_write()
7c673cae 275{
b32b8144
FG
276 boost::asio::io_context ioc;
277 test_stream s(ioc);
278 boost::asio::mutable_buffer buffers
7c673cae
FG
279 = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
280
281 s.reset();
282 boost::system::error_code error;
283 size_t bytes_transferred = boost::asio::write(s, buffers, error);
284 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
285 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
286 BOOST_ASIO_CHECK(!error);
287
288 s.reset();
289 s.next_write_length(1);
290 bytes_transferred = boost::asio::write(s, buffers, error);
291 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
292 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
293 BOOST_ASIO_CHECK(!error);
294
295 s.reset();
296 s.next_write_length(10);
297 bytes_transferred = boost::asio::write(s, buffers, error);
298 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
299 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
300 BOOST_ASIO_CHECK(!error);
301}
302
303void test_3_arg_nothrow_vector_buffers_write()
304{
b32b8144
FG
305 boost::asio::io_context ioc;
306 test_stream s(ioc);
7c673cae
FG
307 std::vector<boost::asio::const_buffer> buffers;
308 buffers.push_back(boost::asio::buffer(write_data, 32));
b32b8144
FG
309 buffers.push_back(boost::asio::buffer(write_data, 39) + 32);
310 buffers.push_back(boost::asio::buffer(write_data) + 39);
7c673cae
FG
311
312 s.reset();
313 boost::system::error_code error;
314 size_t bytes_transferred = boost::asio::write(s, buffers, error);
315 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
316 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
317 BOOST_ASIO_CHECK(!error);
318
319 s.reset();
320 s.next_write_length(1);
321 bytes_transferred = boost::asio::write(s, buffers, error);
322 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
323 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
324 BOOST_ASIO_CHECK(!error);
325
326 s.reset();
327 s.next_write_length(10);
328 bytes_transferred = boost::asio::write(s, buffers, error);
329 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
330 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
331 BOOST_ASIO_CHECK(!error);
332}
333
334bool old_style_transfer_all(const boost::system::error_code& ec,
335 size_t /*bytes_transferred*/)
336{
337 return !!ec;
338}
339
340size_t short_transfer(const boost::system::error_code& ec,
341 size_t /*bytes_transferred*/)
342{
343 return !!ec ? 0 : 3;
344}
345
b32b8144 346void test_3_arg_const_buffer_write()
7c673cae 347{
b32b8144
FG
348 boost::asio::io_context ioc;
349 test_stream s(ioc);
350 boost::asio::const_buffer buffers
7c673cae
FG
351 = boost::asio::buffer(write_data, sizeof(write_data));
352
353 s.reset();
354 size_t bytes_transferred = boost::asio::write(s, buffers,
355 boost::asio::transfer_all());
356 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
357 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
358
359 s.reset();
360 s.next_write_length(1);
361 bytes_transferred = boost::asio::write(s, buffers,
362 boost::asio::transfer_all());
363 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
364 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
365
366 s.reset();
367 s.next_write_length(10);
368 bytes_transferred = boost::asio::write(s, buffers,
369 boost::asio::transfer_all());
370 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
371 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
372
373 s.reset();
374 bytes_transferred = boost::asio::write(s, buffers,
375 boost::asio::transfer_at_least(1));
376 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
377 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
378
379 s.reset();
380 s.next_write_length(1);
381 bytes_transferred = boost::asio::write(s, buffers,
382 boost::asio::transfer_at_least(1));
383 BOOST_ASIO_CHECK(bytes_transferred == 1);
384 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
385
386 s.reset();
387 s.next_write_length(10);
388 bytes_transferred = boost::asio::write(s, buffers,
389 boost::asio::transfer_at_least(1));
390 BOOST_ASIO_CHECK(bytes_transferred == 10);
391 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
392
393 s.reset();
394 bytes_transferred = boost::asio::write(s, buffers,
395 boost::asio::transfer_at_least(10));
396 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
397 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
398
399 s.reset();
400 s.next_write_length(1);
401 bytes_transferred = boost::asio::write(s, buffers,
402 boost::asio::transfer_at_least(10));
403 BOOST_ASIO_CHECK(bytes_transferred == 10);
404 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
405
406 s.reset();
407 s.next_write_length(10);
408 bytes_transferred = boost::asio::write(s, buffers,
409 boost::asio::transfer_at_least(10));
410 BOOST_ASIO_CHECK(bytes_transferred == 10);
411 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
412
413 s.reset();
414 bytes_transferred = boost::asio::write(s, buffers,
415 boost::asio::transfer_at_least(42));
416 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
417 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
418
419 s.reset();
420 s.next_write_length(1);
421 bytes_transferred = boost::asio::write(s, buffers,
422 boost::asio::transfer_at_least(42));
423 BOOST_ASIO_CHECK(bytes_transferred == 42);
424 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
425
426 s.reset();
427 s.next_write_length(10);
428 bytes_transferred = boost::asio::write(s, buffers,
429 boost::asio::transfer_at_least(42));
430 BOOST_ASIO_CHECK(bytes_transferred == 50);
431 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
432
433 s.reset();
434 bytes_transferred = boost::asio::write(s, buffers,
435 boost::asio::transfer_exactly(1));
436 BOOST_ASIO_CHECK(bytes_transferred == 1);
437 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
438
439 s.reset();
440 s.next_write_length(1);
441 bytes_transferred = boost::asio::write(s, buffers,
442 boost::asio::transfer_exactly(1));
443 BOOST_ASIO_CHECK(bytes_transferred == 1);
444 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
445
446 s.reset();
447 s.next_write_length(10);
448 bytes_transferred = boost::asio::write(s, buffers,
449 boost::asio::transfer_exactly(1));
450 BOOST_ASIO_CHECK(bytes_transferred == 1);
451 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
452
453 s.reset();
454 bytes_transferred = boost::asio::write(s, buffers,
455 boost::asio::transfer_exactly(10));
456 BOOST_ASIO_CHECK(bytes_transferred == 10);
457 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
458
459 s.reset();
460 s.next_write_length(1);
461 bytes_transferred = boost::asio::write(s, buffers,
462 boost::asio::transfer_exactly(10));
463 BOOST_ASIO_CHECK(bytes_transferred == 10);
464 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
465
466 s.reset();
467 s.next_write_length(10);
468 bytes_transferred = boost::asio::write(s, buffers,
469 boost::asio::transfer_exactly(10));
470 BOOST_ASIO_CHECK(bytes_transferred == 10);
471 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
472
473 s.reset();
474 bytes_transferred = boost::asio::write(s, buffers,
475 boost::asio::transfer_exactly(42));
476 BOOST_ASIO_CHECK(bytes_transferred == 42);
477 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
478
479 s.reset();
480 s.next_write_length(1);
481 bytes_transferred = boost::asio::write(s, buffers,
482 boost::asio::transfer_exactly(42));
483 BOOST_ASIO_CHECK(bytes_transferred == 42);
484 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
485
486 s.reset();
487 s.next_write_length(10);
488 bytes_transferred = boost::asio::write(s, buffers,
489 boost::asio::transfer_exactly(42));
490 BOOST_ASIO_CHECK(bytes_transferred == 42);
491 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
492
493 s.reset();
494 bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
495 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
496 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
497
498 s.reset();
499 s.next_write_length(1);
500 bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
501 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
502 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
503
504 s.reset();
505 s.next_write_length(10);
506 bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
507 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
508 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
509
510 s.reset();
511 bytes_transferred = boost::asio::write(s, buffers, short_transfer);
512 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
513 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
514
515 s.reset();
516 s.next_write_length(1);
517 bytes_transferred = boost::asio::write(s, buffers, short_transfer);
518 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
519 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
520
521 s.reset();
522 s.next_write_length(10);
523 bytes_transferred = boost::asio::write(s, buffers, short_transfer);
524 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
525 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
526}
527
b32b8144 528void test_3_arg_mutable_buffer_write()
7c673cae 529{
b32b8144
FG
530 boost::asio::io_context ioc;
531 test_stream s(ioc);
532 boost::asio::mutable_buffer buffers
7c673cae
FG
533 = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
534
535 s.reset();
536 size_t bytes_transferred = boost::asio::write(s, buffers,
537 boost::asio::transfer_all());
538 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
539 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
540
541 s.reset();
542 s.next_write_length(1);
543 bytes_transferred = boost::asio::write(s, buffers,
544 boost::asio::transfer_all());
545 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
546 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
547
548 s.reset();
549 s.next_write_length(10);
550 bytes_transferred = boost::asio::write(s, buffers,
551 boost::asio::transfer_all());
552 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
553 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
554
555 s.reset();
556 bytes_transferred = boost::asio::write(s, buffers,
557 boost::asio::transfer_at_least(1));
558 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
559 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
560
561 s.reset();
562 s.next_write_length(1);
563 bytes_transferred = boost::asio::write(s, buffers,
564 boost::asio::transfer_at_least(1));
565 BOOST_ASIO_CHECK(bytes_transferred == 1);
566 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
567
568 s.reset();
569 s.next_write_length(10);
570 bytes_transferred = boost::asio::write(s, buffers,
571 boost::asio::transfer_at_least(1));
572 BOOST_ASIO_CHECK(bytes_transferred == 10);
573 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
574
575 s.reset();
576 bytes_transferred = boost::asio::write(s, buffers,
577 boost::asio::transfer_at_least(10));
578 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
579 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
580
581 s.reset();
582 s.next_write_length(1);
583 bytes_transferred = boost::asio::write(s, buffers,
584 boost::asio::transfer_at_least(10));
585 BOOST_ASIO_CHECK(bytes_transferred == 10);
586 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
587
588 s.reset();
589 s.next_write_length(10);
590 bytes_transferred = boost::asio::write(s, buffers,
591 boost::asio::transfer_at_least(10));
592 BOOST_ASIO_CHECK(bytes_transferred == 10);
593 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
594
595 s.reset();
596 bytes_transferred = boost::asio::write(s, buffers,
597 boost::asio::transfer_at_least(42));
598 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
599 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
600
601 s.reset();
602 s.next_write_length(1);
603 bytes_transferred = boost::asio::write(s, buffers,
604 boost::asio::transfer_at_least(42));
605 BOOST_ASIO_CHECK(bytes_transferred == 42);
606 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
607
608 s.reset();
609 s.next_write_length(10);
610 bytes_transferred = boost::asio::write(s, buffers,
611 boost::asio::transfer_at_least(42));
612 BOOST_ASIO_CHECK(bytes_transferred == 50);
613 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
614
615 s.reset();
616 bytes_transferred = boost::asio::write(s, buffers,
617 boost::asio::transfer_exactly(1));
618 BOOST_ASIO_CHECK(bytes_transferred == 1);
619 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
620
621 s.reset();
622 s.next_write_length(1);
623 bytes_transferred = boost::asio::write(s, buffers,
624 boost::asio::transfer_exactly(1));
625 BOOST_ASIO_CHECK(bytes_transferred == 1);
626 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
627
628 s.reset();
629 s.next_write_length(10);
630 bytes_transferred = boost::asio::write(s, buffers,
631 boost::asio::transfer_exactly(1));
632 BOOST_ASIO_CHECK(bytes_transferred == 1);
633 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
634
635 s.reset();
636 bytes_transferred = boost::asio::write(s, buffers,
637 boost::asio::transfer_exactly(10));
638 BOOST_ASIO_CHECK(bytes_transferred == 10);
639 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
640
641 s.reset();
642 s.next_write_length(1);
643 bytes_transferred = boost::asio::write(s, buffers,
644 boost::asio::transfer_exactly(10));
645 BOOST_ASIO_CHECK(bytes_transferred == 10);
646 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
647
648 s.reset();
649 s.next_write_length(10);
650 bytes_transferred = boost::asio::write(s, buffers,
651 boost::asio::transfer_exactly(10));
652 BOOST_ASIO_CHECK(bytes_transferred == 10);
653 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
654
655 s.reset();
656 bytes_transferred = boost::asio::write(s, buffers,
657 boost::asio::transfer_exactly(42));
658 BOOST_ASIO_CHECK(bytes_transferred == 42);
659 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
660
661 s.reset();
662 s.next_write_length(1);
663 bytes_transferred = boost::asio::write(s, buffers,
664 boost::asio::transfer_exactly(42));
665 BOOST_ASIO_CHECK(bytes_transferred == 42);
666 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
667
668 s.reset();
669 s.next_write_length(10);
670 bytes_transferred = boost::asio::write(s, buffers,
671 boost::asio::transfer_exactly(42));
672 BOOST_ASIO_CHECK(bytes_transferred == 42);
673 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
674
675 s.reset();
676 bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
677 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
678 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
679
680 s.reset();
681 s.next_write_length(1);
682 bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
683 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
684 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
685
686 s.reset();
687 s.next_write_length(10);
688 bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
689 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
690 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
691
692 s.reset();
693 bytes_transferred = boost::asio::write(s, buffers, short_transfer);
694 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
695 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
696
697 s.reset();
698 s.next_write_length(1);
699 bytes_transferred = boost::asio::write(s, buffers, short_transfer);
700 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
701 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
702
703 s.reset();
704 s.next_write_length(10);
705 bytes_transferred = boost::asio::write(s, buffers, short_transfer);
706 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
707 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
708}
709
710void test_3_arg_vector_buffers_write()
711{
b32b8144
FG
712 boost::asio::io_context ioc;
713 test_stream s(ioc);
7c673cae
FG
714 std::vector<boost::asio::const_buffer> buffers;
715 buffers.push_back(boost::asio::buffer(write_data, 32));
b32b8144
FG
716 buffers.push_back(boost::asio::buffer(write_data, 39) + 32);
717 buffers.push_back(boost::asio::buffer(write_data) + 39);
7c673cae
FG
718
719 s.reset();
720 size_t bytes_transferred = boost::asio::write(s, buffers,
721 boost::asio::transfer_all());
722 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
723 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
724
725 s.reset();
726 s.next_write_length(1);
727 bytes_transferred = boost::asio::write(s, buffers,
728 boost::asio::transfer_all());
729 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
730 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
731
732 s.reset();
733 s.next_write_length(10);
734 bytes_transferred = boost::asio::write(s, buffers,
735 boost::asio::transfer_all());
736 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
737 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
738
739 s.reset();
740 bytes_transferred = boost::asio::write(s, buffers,
741 boost::asio::transfer_at_least(1));
742 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
743 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
744
745 s.reset();
746 s.next_write_length(1);
747 bytes_transferred = boost::asio::write(s, buffers,
748 boost::asio::transfer_at_least(1));
749 BOOST_ASIO_CHECK(bytes_transferred == 1);
750 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
751
752 s.reset();
753 s.next_write_length(10);
754 bytes_transferred = boost::asio::write(s, buffers,
755 boost::asio::transfer_at_least(1));
756 BOOST_ASIO_CHECK(bytes_transferred == 10);
757 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
758
759 s.reset();
760 bytes_transferred = boost::asio::write(s, buffers,
761 boost::asio::transfer_at_least(10));
762 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
763 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
764
765 s.reset();
766 s.next_write_length(1);
767 bytes_transferred = boost::asio::write(s, buffers,
768 boost::asio::transfer_at_least(10));
769 BOOST_ASIO_CHECK(bytes_transferred == 10);
770 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
771
772 s.reset();
773 s.next_write_length(10);
774 bytes_transferred = boost::asio::write(s, buffers,
775 boost::asio::transfer_at_least(10));
776 BOOST_ASIO_CHECK(bytes_transferred == 10);
777 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
778
779 s.reset();
780 bytes_transferred = boost::asio::write(s, buffers,
781 boost::asio::transfer_at_least(42));
782 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
783 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
784
785 s.reset();
786 s.next_write_length(1);
787 bytes_transferred = boost::asio::write(s, buffers,
788 boost::asio::transfer_at_least(42));
789 BOOST_ASIO_CHECK(bytes_transferred == 42);
790 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
791
792 s.reset();
793 s.next_write_length(10);
794 bytes_transferred = boost::asio::write(s, buffers,
795 boost::asio::transfer_at_least(42));
796 BOOST_ASIO_CHECK(bytes_transferred == 50);
797 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
798
799 s.reset();
800 bytes_transferred = boost::asio::write(s, buffers,
801 boost::asio::transfer_exactly(1));
802 BOOST_ASIO_CHECK(bytes_transferred == 1);
803 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
804
805 s.reset();
806 s.next_write_length(1);
807 bytes_transferred = boost::asio::write(s, buffers,
808 boost::asio::transfer_exactly(1));
809 BOOST_ASIO_CHECK(bytes_transferred == 1);
810 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
811
812 s.reset();
813 s.next_write_length(10);
814 bytes_transferred = boost::asio::write(s, buffers,
815 boost::asio::transfer_exactly(1));
816 BOOST_ASIO_CHECK(bytes_transferred == 1);
817 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
818
819 s.reset();
820 bytes_transferred = boost::asio::write(s, buffers,
821 boost::asio::transfer_exactly(10));
822 BOOST_ASIO_CHECK(bytes_transferred == 10);
823 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
824
825 s.reset();
826 s.next_write_length(1);
827 bytes_transferred = boost::asio::write(s, buffers,
828 boost::asio::transfer_exactly(10));
829 BOOST_ASIO_CHECK(bytes_transferred == 10);
830 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
831
832 s.reset();
833 s.next_write_length(10);
834 bytes_transferred = boost::asio::write(s, buffers,
835 boost::asio::transfer_exactly(10));
836 BOOST_ASIO_CHECK(bytes_transferred == 10);
837 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
838
839 s.reset();
840 bytes_transferred = boost::asio::write(s, buffers,
841 boost::asio::transfer_exactly(42));
842 BOOST_ASIO_CHECK(bytes_transferred == 42);
843 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
844
845 s.reset();
846 s.next_write_length(1);
847 bytes_transferred = boost::asio::write(s, buffers,
848 boost::asio::transfer_exactly(42));
849 BOOST_ASIO_CHECK(bytes_transferred == 42);
850 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
851
852 s.reset();
853 s.next_write_length(10);
854 bytes_transferred = boost::asio::write(s, buffers,
855 boost::asio::transfer_exactly(42));
856 BOOST_ASIO_CHECK(bytes_transferred == 42);
857 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
858
859 s.reset();
860 bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
861 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
862 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
863
864 s.reset();
865 s.next_write_length(1);
866 bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
867 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
868 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
869
870 s.reset();
871 s.next_write_length(10);
872 bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
873 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
874 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
875
876 s.reset();
877 bytes_transferred = boost::asio::write(s, buffers, short_transfer);
878 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
879 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
880
881 s.reset();
882 s.next_write_length(1);
883 bytes_transferred = boost::asio::write(s, buffers, short_transfer);
884 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
885 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
886
887 s.reset();
888 s.next_write_length(10);
889 bytes_transferred = boost::asio::write(s, buffers, short_transfer);
890 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
891 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
892}
893
b32b8144 894void test_4_arg_const_buffer_write()
7c673cae 895{
b32b8144
FG
896 boost::asio::io_context ioc;
897 test_stream s(ioc);
898 boost::asio::const_buffer buffers
7c673cae
FG
899 = boost::asio::buffer(write_data, sizeof(write_data));
900
901 s.reset();
902 boost::system::error_code error;
903 size_t bytes_transferred = boost::asio::write(s, buffers,
904 boost::asio::transfer_all(), error);
905 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
906 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
907 BOOST_ASIO_CHECK(!error);
908
909 s.reset();
910 s.next_write_length(1);
911 error = boost::system::error_code();
912 bytes_transferred = boost::asio::write(s, buffers,
913 boost::asio::transfer_all(), error);
914 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
915 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
916 BOOST_ASIO_CHECK(!error);
917
918 s.reset();
919 s.next_write_length(10);
920 error = boost::system::error_code();
921 bytes_transferred = boost::asio::write(s, buffers,
922 boost::asio::transfer_all(), error);
923 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
924 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
925 BOOST_ASIO_CHECK(!error);
926
927 s.reset();
928 error = boost::system::error_code();
929 bytes_transferred = boost::asio::write(s, buffers,
930 boost::asio::transfer_at_least(1), error);
931 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
932 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
933 BOOST_ASIO_CHECK(!error);
934
935 s.reset();
936 s.next_write_length(1);
937 error = boost::system::error_code();
938 bytes_transferred = boost::asio::write(s, buffers,
939 boost::asio::transfer_at_least(1), error);
940 BOOST_ASIO_CHECK(bytes_transferred == 1);
941 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
942 BOOST_ASIO_CHECK(!error);
943
944 s.reset();
945 s.next_write_length(10);
946 error = boost::system::error_code();
947 bytes_transferred = boost::asio::write(s, buffers,
948 boost::asio::transfer_at_least(1), error);
949 BOOST_ASIO_CHECK(bytes_transferred == 10);
950 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
951 BOOST_ASIO_CHECK(!error);
952
953 s.reset();
954 error = boost::system::error_code();
955 bytes_transferred = boost::asio::write(s, buffers,
956 boost::asio::transfer_at_least(10), error);
957 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
958 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
959 BOOST_ASIO_CHECK(!error);
960
961 s.reset();
962 s.next_write_length(1);
963 error = boost::system::error_code();
964 bytes_transferred = boost::asio::write(s, buffers,
965 boost::asio::transfer_at_least(10), error);
966 BOOST_ASIO_CHECK(bytes_transferred == 10);
967 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
968 BOOST_ASIO_CHECK(!error);
969
970 s.reset();
971 s.next_write_length(10);
972 error = boost::system::error_code();
973 bytes_transferred = boost::asio::write(s, buffers,
974 boost::asio::transfer_at_least(10), error);
975 BOOST_ASIO_CHECK(bytes_transferred == 10);
976 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
977 BOOST_ASIO_CHECK(!error);
978
979 s.reset();
980 error = boost::system::error_code();
981 bytes_transferred = boost::asio::write(s, buffers,
982 boost::asio::transfer_at_least(42), error);
983 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
984 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
985 BOOST_ASIO_CHECK(!error);
986
987 s.reset();
988 s.next_write_length(1);
989 error = boost::system::error_code();
990 bytes_transferred = boost::asio::write(s, buffers,
991 boost::asio::transfer_at_least(42), error);
992 BOOST_ASIO_CHECK(bytes_transferred == 42);
993 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
994 BOOST_ASIO_CHECK(!error);
995
996 s.reset();
997 s.next_write_length(10);
998 error = boost::system::error_code();
999 bytes_transferred = boost::asio::write(s, buffers,
1000 boost::asio::transfer_at_least(42), error);
1001 BOOST_ASIO_CHECK(bytes_transferred == 50);
1002 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
1003 BOOST_ASIO_CHECK(!error);
1004
1005 s.reset();
1006 error = boost::system::error_code();
1007 bytes_transferred = boost::asio::write(s, buffers,
1008 boost::asio::transfer_exactly(1), error);
1009 BOOST_ASIO_CHECK(bytes_transferred == 1);
1010 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1011 BOOST_ASIO_CHECK(!error);
1012
1013 s.reset();
1014 s.next_write_length(1);
1015 error = boost::system::error_code();
1016 bytes_transferred = boost::asio::write(s, buffers,
1017 boost::asio::transfer_exactly(1), error);
1018 BOOST_ASIO_CHECK(bytes_transferred == 1);
1019 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1020 BOOST_ASIO_CHECK(!error);
1021
1022 s.reset();
1023 s.next_write_length(10);
1024 error = boost::system::error_code();
1025 bytes_transferred = boost::asio::write(s, buffers,
1026 boost::asio::transfer_exactly(1), error);
1027 BOOST_ASIO_CHECK(bytes_transferred == 1);
1028 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1029 BOOST_ASIO_CHECK(!error);
1030
1031 s.reset();
1032 error = boost::system::error_code();
1033 bytes_transferred = boost::asio::write(s, buffers,
1034 boost::asio::transfer_exactly(10), error);
1035 BOOST_ASIO_CHECK(bytes_transferred == 10);
1036 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1037 BOOST_ASIO_CHECK(!error);
1038
1039 s.reset();
1040 s.next_write_length(1);
1041 error = boost::system::error_code();
1042 bytes_transferred = boost::asio::write(s, buffers,
1043 boost::asio::transfer_exactly(10), error);
1044 BOOST_ASIO_CHECK(bytes_transferred == 10);
1045 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1046 BOOST_ASIO_CHECK(!error);
1047
1048 s.reset();
1049 s.next_write_length(10);
1050 error = boost::system::error_code();
1051 bytes_transferred = boost::asio::write(s, buffers,
1052 boost::asio::transfer_exactly(10), error);
1053 BOOST_ASIO_CHECK(bytes_transferred == 10);
1054 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1055 BOOST_ASIO_CHECK(!error);
1056
1057 s.reset();
1058 error = boost::system::error_code();
1059 bytes_transferred = boost::asio::write(s, buffers,
1060 boost::asio::transfer_exactly(42), error);
1061 BOOST_ASIO_CHECK(bytes_transferred == 42);
1062 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1063 BOOST_ASIO_CHECK(!error);
1064
1065 s.reset();
1066 s.next_write_length(1);
1067 error = boost::system::error_code();
1068 bytes_transferred = boost::asio::write(s, buffers,
1069 boost::asio::transfer_exactly(42), error);
1070 BOOST_ASIO_CHECK(bytes_transferred == 42);
1071 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1072 BOOST_ASIO_CHECK(!error);
1073
1074 s.reset();
1075 s.next_write_length(10);
1076 error = boost::system::error_code();
1077 bytes_transferred = boost::asio::write(s, buffers,
1078 boost::asio::transfer_exactly(42), error);
1079 BOOST_ASIO_CHECK(bytes_transferred == 42);
1080 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1081 BOOST_ASIO_CHECK(!error);
1082
1083 s.reset();
1084 bytes_transferred = boost::asio::write(s, buffers,
1085 old_style_transfer_all, error);
1086 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1087 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1088 BOOST_ASIO_CHECK(!error);
1089
1090 s.reset();
1091 s.next_write_length(1);
1092 error = boost::system::error_code();
1093 bytes_transferred = boost::asio::write(s, buffers,
1094 old_style_transfer_all, error);
1095 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1096 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1097 BOOST_ASIO_CHECK(!error);
1098
1099 s.reset();
1100 s.next_write_length(10);
1101 error = boost::system::error_code();
1102 bytes_transferred = boost::asio::write(s, buffers,
1103 old_style_transfer_all, error);
1104 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1105 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1106 BOOST_ASIO_CHECK(!error);
1107
1108 s.reset();
1109 bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
1110 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1111 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1112 BOOST_ASIO_CHECK(!error);
1113
1114 s.reset();
1115 s.next_write_length(1);
1116 error = boost::system::error_code();
1117 bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
1118 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1119 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1120 BOOST_ASIO_CHECK(!error);
1121
1122 s.reset();
1123 s.next_write_length(10);
1124 error = boost::system::error_code();
1125 bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
1126 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1127 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1128 BOOST_ASIO_CHECK(!error);
1129}
1130
b32b8144 1131void test_4_arg_mutable_buffer_write()
7c673cae 1132{
b32b8144
FG
1133 boost::asio::io_context ioc;
1134 test_stream s(ioc);
1135 boost::asio::mutable_buffer buffers
7c673cae
FG
1136 = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
1137
1138 s.reset();
1139 boost::system::error_code error;
1140 size_t bytes_transferred = boost::asio::write(s, buffers,
1141 boost::asio::transfer_all(), error);
1142 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
1143 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1144 BOOST_ASIO_CHECK(!error);
1145
1146 s.reset();
1147 s.next_write_length(1);
1148 error = boost::system::error_code();
1149 bytes_transferred = boost::asio::write(s, buffers,
1150 boost::asio::transfer_all(), error);
1151 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
1152 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1153 BOOST_ASIO_CHECK(!error);
1154
1155 s.reset();
1156 s.next_write_length(10);
1157 error = boost::system::error_code();
1158 bytes_transferred = boost::asio::write(s, buffers,
1159 boost::asio::transfer_all(), error);
1160 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
1161 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1162 BOOST_ASIO_CHECK(!error);
1163
1164 s.reset();
1165 error = boost::system::error_code();
1166 bytes_transferred = boost::asio::write(s, buffers,
1167 boost::asio::transfer_at_least(1), error);
1168 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
1169 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1170 BOOST_ASIO_CHECK(!error);
1171
1172 s.reset();
1173 s.next_write_length(1);
1174 error = boost::system::error_code();
1175 bytes_transferred = boost::asio::write(s, buffers,
1176 boost::asio::transfer_at_least(1), error);
1177 BOOST_ASIO_CHECK(bytes_transferred == 1);
1178 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1179 BOOST_ASIO_CHECK(!error);
1180
1181 s.reset();
1182 s.next_write_length(10);
1183 error = boost::system::error_code();
1184 bytes_transferred = boost::asio::write(s, buffers,
1185 boost::asio::transfer_at_least(1), error);
1186 BOOST_ASIO_CHECK(bytes_transferred == 10);
1187 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1188 BOOST_ASIO_CHECK(!error);
1189
1190 s.reset();
1191 error = boost::system::error_code();
1192 bytes_transferred = boost::asio::write(s, buffers,
1193 boost::asio::transfer_at_least(10), error);
1194 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
1195 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1196 BOOST_ASIO_CHECK(!error);
1197
1198 s.reset();
1199 s.next_write_length(1);
1200 error = boost::system::error_code();
1201 bytes_transferred = boost::asio::write(s, buffers,
1202 boost::asio::transfer_at_least(10), error);
1203 BOOST_ASIO_CHECK(bytes_transferred == 10);
1204 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1205 BOOST_ASIO_CHECK(!error);
1206
1207 s.reset();
1208 s.next_write_length(10);
1209 error = boost::system::error_code();
1210 bytes_transferred = boost::asio::write(s, buffers,
1211 boost::asio::transfer_at_least(10), error);
1212 BOOST_ASIO_CHECK(bytes_transferred == 10);
1213 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1214 BOOST_ASIO_CHECK(!error);
1215
1216 s.reset();
1217 error = boost::system::error_code();
1218 bytes_transferred = boost::asio::write(s, buffers,
1219 boost::asio::transfer_at_least(42), error);
1220 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
1221 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1222 BOOST_ASIO_CHECK(!error);
1223
1224 s.reset();
1225 s.next_write_length(1);
1226 error = boost::system::error_code();
1227 bytes_transferred = boost::asio::write(s, buffers,
1228 boost::asio::transfer_at_least(42), error);
1229 BOOST_ASIO_CHECK(bytes_transferred == 42);
1230 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1231 BOOST_ASIO_CHECK(!error);
1232
1233 s.reset();
1234 s.next_write_length(10);
1235 error = boost::system::error_code();
1236 bytes_transferred = boost::asio::write(s, buffers,
1237 boost::asio::transfer_at_least(42), error);
1238 BOOST_ASIO_CHECK(bytes_transferred == 50);
1239 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
1240 BOOST_ASIO_CHECK(!error);
1241
1242 s.reset();
1243 error = boost::system::error_code();
1244 bytes_transferred = boost::asio::write(s, buffers,
1245 boost::asio::transfer_exactly(1), error);
1246 BOOST_ASIO_CHECK(bytes_transferred == 1);
1247 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1248 BOOST_ASIO_CHECK(!error);
1249
1250 s.reset();
1251 s.next_write_length(1);
1252 error = boost::system::error_code();
1253 bytes_transferred = boost::asio::write(s, buffers,
1254 boost::asio::transfer_exactly(1), error);
1255 BOOST_ASIO_CHECK(bytes_transferred == 1);
1256 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1257 BOOST_ASIO_CHECK(!error);
1258
1259 s.reset();
1260 s.next_write_length(10);
1261 error = boost::system::error_code();
1262 bytes_transferred = boost::asio::write(s, buffers,
1263 boost::asio::transfer_exactly(1), error);
1264 BOOST_ASIO_CHECK(bytes_transferred == 1);
1265 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1266 BOOST_ASIO_CHECK(!error);
1267
1268 s.reset();
1269 error = boost::system::error_code();
1270 bytes_transferred = boost::asio::write(s, buffers,
1271 boost::asio::transfer_exactly(10), error);
1272 BOOST_ASIO_CHECK(bytes_transferred == 10);
1273 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1274 BOOST_ASIO_CHECK(!error);
1275
1276 s.reset();
1277 s.next_write_length(1);
1278 error = boost::system::error_code();
1279 bytes_transferred = boost::asio::write(s, buffers,
1280 boost::asio::transfer_exactly(10), error);
1281 BOOST_ASIO_CHECK(bytes_transferred == 10);
1282 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1283 BOOST_ASIO_CHECK(!error);
1284
1285 s.reset();
1286 s.next_write_length(10);
1287 error = boost::system::error_code();
1288 bytes_transferred = boost::asio::write(s, buffers,
1289 boost::asio::transfer_exactly(10), error);
1290 BOOST_ASIO_CHECK(bytes_transferred == 10);
1291 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1292 BOOST_ASIO_CHECK(!error);
1293
1294 s.reset();
1295 error = boost::system::error_code();
1296 bytes_transferred = boost::asio::write(s, buffers,
1297 boost::asio::transfer_exactly(42), error);
1298 BOOST_ASIO_CHECK(bytes_transferred == 42);
1299 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1300 BOOST_ASIO_CHECK(!error);
1301
1302 s.reset();
1303 s.next_write_length(1);
1304 error = boost::system::error_code();
1305 bytes_transferred = boost::asio::write(s, buffers,
1306 boost::asio::transfer_exactly(42), error);
1307 BOOST_ASIO_CHECK(bytes_transferred == 42);
1308 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1309 BOOST_ASIO_CHECK(!error);
1310
1311 s.reset();
1312 s.next_write_length(10);
1313 error = boost::system::error_code();
1314 bytes_transferred = boost::asio::write(s, buffers,
1315 boost::asio::transfer_exactly(42), error);
1316 BOOST_ASIO_CHECK(bytes_transferred == 42);
1317 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1318 BOOST_ASIO_CHECK(!error);
1319
1320 s.reset();
1321 bytes_transferred = boost::asio::write(s, buffers,
1322 old_style_transfer_all, error);
1323 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
1324 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1325 BOOST_ASIO_CHECK(!error);
1326
1327 s.reset();
1328 s.next_write_length(1);
1329 error = boost::system::error_code();
1330 bytes_transferred = boost::asio::write(s, buffers,
1331 old_style_transfer_all, error);
1332 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
1333 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1334 BOOST_ASIO_CHECK(!error);
1335
1336 s.reset();
1337 s.next_write_length(10);
1338 error = boost::system::error_code();
1339 bytes_transferred = boost::asio::write(s, buffers,
1340 old_style_transfer_all, error);
1341 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
1342 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1343 BOOST_ASIO_CHECK(!error);
1344
1345 s.reset();
1346 bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
1347 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
1348 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1349 BOOST_ASIO_CHECK(!error);
1350
1351 s.reset();
1352 s.next_write_length(1);
1353 error = boost::system::error_code();
1354 bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
1355 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
1356 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1357 BOOST_ASIO_CHECK(!error);
1358
1359 s.reset();
1360 s.next_write_length(10);
1361 error = boost::system::error_code();
1362 bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
1363 BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
1364 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1365 BOOST_ASIO_CHECK(!error);
1366}
1367
1368void test_4_arg_vector_buffers_write()
1369{
b32b8144
FG
1370 boost::asio::io_context ioc;
1371 test_stream s(ioc);
7c673cae
FG
1372 std::vector<boost::asio::const_buffer> buffers;
1373 buffers.push_back(boost::asio::buffer(write_data, 32));
b32b8144
FG
1374 buffers.push_back(boost::asio::buffer(write_data, 39) + 32);
1375 buffers.push_back(boost::asio::buffer(write_data) + 39);
7c673cae
FG
1376
1377 s.reset();
1378 boost::system::error_code error;
1379 size_t bytes_transferred = boost::asio::write(s, buffers,
1380 boost::asio::transfer_all(), error);
1381 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1382 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1383 BOOST_ASIO_CHECK(!error);
1384
1385 s.reset();
1386 s.next_write_length(1);
1387 error = boost::system::error_code();
1388 bytes_transferred = boost::asio::write(s, buffers,
1389 boost::asio::transfer_all(), error);
1390 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1391 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1392 BOOST_ASIO_CHECK(!error);
1393
1394 s.reset();
1395 s.next_write_length(10);
1396 error = boost::system::error_code();
1397 bytes_transferred = boost::asio::write(s, buffers,
1398 boost::asio::transfer_all(), error);
1399 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1400 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1401 BOOST_ASIO_CHECK(!error);
1402
1403 s.reset();
1404 error = boost::system::error_code();
1405 bytes_transferred = boost::asio::write(s, buffers,
1406 boost::asio::transfer_at_least(1), error);
1407 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1408 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1409 BOOST_ASIO_CHECK(!error);
1410
1411 s.reset();
1412 s.next_write_length(1);
1413 error = boost::system::error_code();
1414 bytes_transferred = boost::asio::write(s, buffers,
1415 boost::asio::transfer_at_least(1), error);
1416 BOOST_ASIO_CHECK(bytes_transferred == 1);
1417 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1418 BOOST_ASIO_CHECK(!error);
1419
1420 s.reset();
1421 s.next_write_length(10);
1422 error = boost::system::error_code();
1423 bytes_transferred = boost::asio::write(s, buffers,
1424 boost::asio::transfer_at_least(1), error);
1425 BOOST_ASIO_CHECK(bytes_transferred == 10);
1426 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1427 BOOST_ASIO_CHECK(!error);
1428
1429 s.reset();
1430 error = boost::system::error_code();
1431 bytes_transferred = boost::asio::write(s, buffers,
1432 boost::asio::transfer_at_least(10), error);
1433 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1434 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1435 BOOST_ASIO_CHECK(!error);
1436
1437 s.reset();
1438 s.next_write_length(1);
1439 error = boost::system::error_code();
1440 bytes_transferred = boost::asio::write(s, buffers,
1441 boost::asio::transfer_at_least(10), error);
1442 BOOST_ASIO_CHECK(bytes_transferred == 10);
1443 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1444 BOOST_ASIO_CHECK(!error);
1445
1446 s.reset();
1447 s.next_write_length(10);
1448 error = boost::system::error_code();
1449 bytes_transferred = boost::asio::write(s, buffers,
1450 boost::asio::transfer_at_least(10), error);
1451 BOOST_ASIO_CHECK(bytes_transferred == 10);
1452 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1453 BOOST_ASIO_CHECK(!error);
1454
1455 s.reset();
1456 error = boost::system::error_code();
1457 bytes_transferred = boost::asio::write(s, buffers,
1458 boost::asio::transfer_at_least(42), error);
1459 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1460 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1461 BOOST_ASIO_CHECK(!error);
1462
1463 s.reset();
1464 s.next_write_length(1);
1465 error = boost::system::error_code();
1466 bytes_transferred = boost::asio::write(s, buffers,
1467 boost::asio::transfer_at_least(42), error);
1468 BOOST_ASIO_CHECK(bytes_transferred == 42);
1469 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1470 BOOST_ASIO_CHECK(!error);
1471
1472 s.reset();
1473 s.next_write_length(10);
1474 error = boost::system::error_code();
1475 bytes_transferred = boost::asio::write(s, buffers,
1476 boost::asio::transfer_at_least(42), error);
1477 BOOST_ASIO_CHECK(bytes_transferred == 50);
1478 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
1479 BOOST_ASIO_CHECK(!error);
1480
1481 s.reset();
1482 error = boost::system::error_code();
1483 bytes_transferred = boost::asio::write(s, buffers,
1484 boost::asio::transfer_exactly(1), error);
1485 BOOST_ASIO_CHECK(bytes_transferred == 1);
1486 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1487 BOOST_ASIO_CHECK(!error);
1488
1489 s.reset();
1490 s.next_write_length(1);
1491 error = boost::system::error_code();
1492 bytes_transferred = boost::asio::write(s, buffers,
1493 boost::asio::transfer_exactly(1), error);
1494 BOOST_ASIO_CHECK(bytes_transferred == 1);
1495 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1496 BOOST_ASIO_CHECK(!error);
1497
1498 s.reset();
1499 s.next_write_length(10);
1500 error = boost::system::error_code();
1501 bytes_transferred = boost::asio::write(s, buffers,
1502 boost::asio::transfer_exactly(1), error);
1503 BOOST_ASIO_CHECK(bytes_transferred == 1);
1504 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1505 BOOST_ASIO_CHECK(!error);
1506
1507 s.reset();
1508 error = boost::system::error_code();
1509 bytes_transferred = boost::asio::write(s, buffers,
1510 boost::asio::transfer_exactly(10), error);
1511 BOOST_ASIO_CHECK(bytes_transferred == 10);
1512 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1513 BOOST_ASIO_CHECK(!error);
1514
1515 s.reset();
1516 s.next_write_length(1);
1517 error = boost::system::error_code();
1518 bytes_transferred = boost::asio::write(s, buffers,
1519 boost::asio::transfer_exactly(10), error);
1520 BOOST_ASIO_CHECK(bytes_transferred == 10);
1521 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1522 BOOST_ASIO_CHECK(!error);
1523
1524 s.reset();
1525 s.next_write_length(10);
1526 error = boost::system::error_code();
1527 bytes_transferred = boost::asio::write(s, buffers,
1528 boost::asio::transfer_exactly(10), error);
1529 BOOST_ASIO_CHECK(bytes_transferred == 10);
1530 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1531 BOOST_ASIO_CHECK(!error);
1532
1533 s.reset();
1534 error = boost::system::error_code();
1535 bytes_transferred = boost::asio::write(s, buffers,
1536 boost::asio::transfer_exactly(42), error);
1537 BOOST_ASIO_CHECK(bytes_transferred == 42);
1538 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1539 BOOST_ASIO_CHECK(!error);
1540
1541 s.reset();
1542 s.next_write_length(1);
1543 error = boost::system::error_code();
1544 bytes_transferred = boost::asio::write(s, buffers,
1545 boost::asio::transfer_exactly(42), error);
1546 BOOST_ASIO_CHECK(bytes_transferred == 42);
1547 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1548 BOOST_ASIO_CHECK(!error);
1549
1550 s.reset();
1551 s.next_write_length(10);
1552 error = boost::system::error_code();
1553 bytes_transferred = boost::asio::write(s, buffers,
1554 boost::asio::transfer_exactly(42), error);
1555 BOOST_ASIO_CHECK(bytes_transferred == 42);
1556 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1557 BOOST_ASIO_CHECK(!error);
1558
1559 s.reset();
1560 bytes_transferred = boost::asio::write(s, buffers,
1561 old_style_transfer_all, error);
1562 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1563 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1564 BOOST_ASIO_CHECK(!error);
1565
1566 s.reset();
1567 s.next_write_length(1);
1568 error = boost::system::error_code();
1569 bytes_transferred = boost::asio::write(s, buffers,
1570 old_style_transfer_all, error);
1571 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1572 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1573 BOOST_ASIO_CHECK(!error);
1574
1575 s.reset();
1576 s.next_write_length(10);
1577 error = boost::system::error_code();
1578 bytes_transferred = boost::asio::write(s, buffers,
1579 old_style_transfer_all, error);
1580 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1581 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1582 BOOST_ASIO_CHECK(!error);
1583
1584 s.reset();
1585 bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
1586 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1587 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1588 BOOST_ASIO_CHECK(!error);
1589
1590 s.reset();
1591 s.next_write_length(1);
1592 error = boost::system::error_code();
1593 bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
1594 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1595 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1596 BOOST_ASIO_CHECK(!error);
1597
1598 s.reset();
1599 s.next_write_length(10);
1600 error = boost::system::error_code();
1601 bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
1602 BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
1603 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1604 BOOST_ASIO_CHECK(!error);
1605}
1606
1607void async_write_handler(const boost::system::error_code& e,
1608 size_t bytes_transferred, size_t expected_bytes_transferred, bool* called)
1609{
1610 *called = true;
1611 BOOST_ASIO_CHECK(!e);
1612 BOOST_ASIO_CHECK(bytes_transferred == expected_bytes_transferred);
1613}
1614
b32b8144 1615void test_3_arg_const_buffer_async_write()
7c673cae
FG
1616{
1617#if defined(BOOST_ASIO_HAS_BOOST_BIND)
1618 namespace bindns = boost;
1619#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
1620 namespace bindns = std;
1621 using std::placeholders::_1;
1622 using std::placeholders::_2;
1623#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
1624
b32b8144
FG
1625 boost::asio::io_context ioc;
1626 test_stream s(ioc);
1627 boost::asio::const_buffer buffers
7c673cae
FG
1628 = boost::asio::buffer(write_data, sizeof(write_data));
1629
1630 s.reset();
1631 bool called = false;
1632 boost::asio::async_write(s, buffers,
1633 bindns::bind(async_write_handler,
1634 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1635 ioc.restart();
1636 ioc.run();
7c673cae
FG
1637 BOOST_ASIO_CHECK(called);
1638 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1639
1640 s.reset();
1641 s.next_write_length(1);
1642 called = false;
1643 boost::asio::async_write(s, buffers,
1644 bindns::bind(async_write_handler,
1645 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1646 ioc.restart();
1647 ioc.run();
7c673cae
FG
1648 BOOST_ASIO_CHECK(called);
1649 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1650
1651 s.reset();
1652 s.next_write_length(10);
1653 called = false;
1654 boost::asio::async_write(s, buffers,
1655 bindns::bind(async_write_handler,
1656 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1657 ioc.restart();
1658 ioc.run();
7c673cae
FG
1659 BOOST_ASIO_CHECK(called);
1660 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1661
1662 s.reset();
1663 int i = boost::asio::async_write(s, buffers, archetypes::lazy_handler());
1664 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
1665 ioc.restart();
1666 ioc.run();
7c673cae
FG
1667 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1668}
1669
b32b8144 1670void test_3_arg_mutable_buffer_async_write()
7c673cae
FG
1671{
1672#if defined(BOOST_ASIO_HAS_BOOST_BIND)
1673 namespace bindns = boost;
1674#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
1675 namespace bindns = std;
1676 using std::placeholders::_1;
1677 using std::placeholders::_2;
1678#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
1679
b32b8144
FG
1680 boost::asio::io_context ioc;
1681 test_stream s(ioc);
1682 boost::asio::mutable_buffer buffers
7c673cae
FG
1683 = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
1684
1685 s.reset();
1686 bool called = false;
1687 boost::asio::async_write(s, buffers,
1688 bindns::bind(async_write_handler,
1689 _1, _2, sizeof(mutable_write_data), &called));
b32b8144
FG
1690 ioc.restart();
1691 ioc.run();
7c673cae
FG
1692 BOOST_ASIO_CHECK(called);
1693 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1694
1695 s.reset();
1696 s.next_write_length(1);
1697 called = false;
1698 boost::asio::async_write(s, buffers,
1699 bindns::bind(async_write_handler,
1700 _1, _2, sizeof(mutable_write_data), &called));
b32b8144
FG
1701 ioc.restart();
1702 ioc.run();
7c673cae
FG
1703 BOOST_ASIO_CHECK(called);
1704 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1705
1706 s.reset();
1707 s.next_write_length(10);
1708 called = false;
1709 boost::asio::async_write(s, buffers,
1710 bindns::bind(async_write_handler,
1711 _1, _2, sizeof(mutable_write_data), &called));
b32b8144
FG
1712 ioc.restart();
1713 ioc.run();
7c673cae
FG
1714 BOOST_ASIO_CHECK(called);
1715 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1716
1717 s.reset();
1718 int i = boost::asio::async_write(s, buffers, archetypes::lazy_handler());
1719 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
1720 ioc.restart();
1721 ioc.run();
7c673cae
FG
1722 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
1723}
1724
1725void test_3_arg_boost_array_buffers_async_write()
1726{
1727#if defined(BOOST_ASIO_HAS_BOOST_BIND)
1728 namespace bindns = boost;
1729#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
1730 namespace bindns = std;
1731 using std::placeholders::_1;
1732 using std::placeholders::_2;
1733#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
1734
1735#if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
b32b8144
FG
1736 boost::asio::io_context ioc;
1737 test_stream s(ioc);
7c673cae
FG
1738 boost::array<boost::asio::const_buffer, 2> buffers = { {
1739 boost::asio::buffer(write_data, 32),
1740 boost::asio::buffer(write_data) + 32 } };
1741
1742 s.reset();
1743 bool called = false;
1744 boost::asio::async_write(s, buffers,
1745 bindns::bind(async_write_handler,
1746 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1747 ioc.restart();
1748 ioc.run();
7c673cae
FG
1749 BOOST_ASIO_CHECK(called);
1750 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1751
1752 s.reset();
1753 s.next_write_length(1);
1754 called = false;
1755 boost::asio::async_write(s, buffers,
1756 bindns::bind(async_write_handler,
1757 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1758 ioc.restart();
1759 ioc.run();
7c673cae
FG
1760 BOOST_ASIO_CHECK(called);
1761 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1762
1763 s.reset();
1764 s.next_write_length(10);
1765 called = false;
1766 boost::asio::async_write(s, buffers,
1767 bindns::bind(async_write_handler,
1768 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1769 ioc.restart();
1770 ioc.run();
7c673cae
FG
1771 BOOST_ASIO_CHECK(called);
1772 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1773
1774 s.reset();
1775 int i = boost::asio::async_write(s, buffers, archetypes::lazy_handler());
1776 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
1777 ioc.restart();
1778 ioc.run();
7c673cae
FG
1779 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1780#endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
1781}
1782
1783void test_3_arg_std_array_buffers_async_write()
1784{
1785#if defined(BOOST_ASIO_HAS_BOOST_BIND)
1786 namespace bindns = boost;
1787#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
1788 namespace bindns = std;
1789 using std::placeholders::_1;
1790 using std::placeholders::_2;
1791#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
1792
1793#if defined(BOOST_ASIO_HAS_STD_ARRAY)
b32b8144
FG
1794 boost::asio::io_context ioc;
1795 test_stream s(ioc);
7c673cae
FG
1796 std::array<boost::asio::const_buffer, 2> buffers = { {
1797 boost::asio::buffer(write_data, 32),
1798 boost::asio::buffer(write_data) + 32 } };
1799
1800 s.reset();
1801 bool called = false;
1802 boost::asio::async_write(s, buffers,
1803 bindns::bind(async_write_handler,
1804 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1805 ioc.restart();
1806 ioc.run();
7c673cae
FG
1807 BOOST_ASIO_CHECK(called);
1808 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1809
1810 s.reset();
1811 s.next_write_length(1);
1812 called = false;
1813 boost::asio::async_write(s, buffers,
1814 bindns::bind(async_write_handler,
1815 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1816 ioc.restart();
1817 ioc.run();
7c673cae
FG
1818 BOOST_ASIO_CHECK(called);
1819 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1820
1821 s.reset();
1822 s.next_write_length(10);
1823 called = false;
1824 boost::asio::async_write(s, buffers,
1825 bindns::bind(async_write_handler,
1826 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1827 ioc.restart();
1828 ioc.run();
7c673cae
FG
1829 BOOST_ASIO_CHECK(called);
1830 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1831
1832 s.reset();
1833 int i = boost::asio::async_write(s, buffers, archetypes::lazy_handler());
1834 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
1835 ioc.restart();
1836 ioc.run();
7c673cae
FG
1837 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1838#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
1839}
1840
1841void test_3_arg_vector_buffers_async_write()
1842{
1843#if defined(BOOST_ASIO_HAS_BOOST_BIND)
1844 namespace bindns = boost;
1845#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
1846 namespace bindns = std;
1847 using std::placeholders::_1;
1848 using std::placeholders::_2;
1849#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
1850
b32b8144
FG
1851 boost::asio::io_context ioc;
1852 test_stream s(ioc);
7c673cae
FG
1853 std::vector<boost::asio::const_buffer> buffers;
1854 buffers.push_back(boost::asio::buffer(write_data, 32));
b32b8144
FG
1855 buffers.push_back(boost::asio::buffer(write_data, 39) + 32);
1856 buffers.push_back(boost::asio::buffer(write_data) + 39);
7c673cae
FG
1857
1858 s.reset();
1859 bool called = false;
1860 boost::asio::async_write(s, buffers,
1861 bindns::bind(async_write_handler,
1862 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1863 ioc.restart();
1864 ioc.run();
7c673cae
FG
1865 BOOST_ASIO_CHECK(called);
1866 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1867
1868 s.reset();
1869 s.next_write_length(1);
1870 called = false;
1871 boost::asio::async_write(s, buffers,
1872 bindns::bind(async_write_handler,
1873 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1874 ioc.restart();
1875 ioc.run();
7c673cae
FG
1876 BOOST_ASIO_CHECK(called);
1877 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1878
1879 s.reset();
1880 s.next_write_length(10);
1881 called = false;
1882 boost::asio::async_write(s, buffers,
1883 bindns::bind(async_write_handler,
1884 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1885 ioc.restart();
1886 ioc.run();
7c673cae
FG
1887 BOOST_ASIO_CHECK(called);
1888 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1889
1890 s.reset();
1891 int i = boost::asio::async_write(s, buffers, archetypes::lazy_handler());
1892 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
1893 ioc.restart();
1894 ioc.run();
7c673cae
FG
1895 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1896}
1897
1898void test_3_arg_streambuf_async_write()
1899{
1900#if defined(BOOST_ASIO_HAS_BOOST_BIND)
1901 namespace bindns = boost;
1902#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
1903 namespace bindns = std;
1904 using std::placeholders::_1;
1905 using std::placeholders::_2;
1906#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
1907
b32b8144
FG
1908 boost::asio::io_context ioc;
1909 test_stream s(ioc);
7c673cae 1910 boost::asio::streambuf sb;
b32b8144 1911 boost::asio::const_buffer buffers
7c673cae
FG
1912 = boost::asio::buffer(write_data, sizeof(write_data));
1913
1914 s.reset();
1915 sb.consume(sb.size());
1916 sb.sputn(write_data, sizeof(write_data));
1917 bool called = false;
1918 boost::asio::async_write(s, sb,
1919 bindns::bind(async_write_handler,
1920 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1921 ioc.restart();
1922 ioc.run();
7c673cae
FG
1923 BOOST_ASIO_CHECK(called);
1924 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1925
1926 s.reset();
1927 sb.consume(sb.size());
1928 sb.sputn(write_data, sizeof(write_data));
1929 s.next_write_length(1);
1930 called = false;
1931 boost::asio::async_write(s, sb,
1932 bindns::bind(async_write_handler,
1933 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1934 ioc.restart();
1935 ioc.run();
7c673cae
FG
1936 BOOST_ASIO_CHECK(called);
1937 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1938
1939 s.reset();
1940 sb.consume(sb.size());
1941 sb.sputn(write_data, sizeof(write_data));
1942 s.next_write_length(10);
1943 called = false;
1944 boost::asio::async_write(s, sb,
1945 bindns::bind(async_write_handler,
1946 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1947 ioc.restart();
1948 ioc.run();
7c673cae
FG
1949 BOOST_ASIO_CHECK(called);
1950 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1951
1952 s.reset();
1953 sb.consume(sb.size());
1954 sb.sputn(write_data, sizeof(write_data));
1955 int i = boost::asio::async_write(s, sb, archetypes::lazy_handler());
1956 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
1957 ioc.restart();
1958 ioc.run();
7c673cae
FG
1959 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1960}
1961
b32b8144 1962void test_4_arg_const_buffer_async_write()
7c673cae
FG
1963{
1964#if defined(BOOST_ASIO_HAS_BOOST_BIND)
1965 namespace bindns = boost;
1966#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
1967 namespace bindns = std;
1968 using std::placeholders::_1;
1969 using std::placeholders::_2;
1970#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
1971
b32b8144
FG
1972 boost::asio::io_context ioc;
1973 test_stream s(ioc);
1974 boost::asio::const_buffer buffers
7c673cae
FG
1975 = boost::asio::buffer(write_data, sizeof(write_data));
1976
1977 s.reset();
1978 bool called = false;
1979 boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
1980 bindns::bind(async_write_handler,
1981 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1982 ioc.restart();
1983 ioc.run();
7c673cae
FG
1984 BOOST_ASIO_CHECK(called);
1985 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1986
1987 s.reset();
1988 s.next_write_length(1);
1989 called = false;
1990 boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
1991 bindns::bind(async_write_handler,
1992 _1, _2, sizeof(write_data), &called));
b32b8144
FG
1993 ioc.restart();
1994 ioc.run();
7c673cae
FG
1995 BOOST_ASIO_CHECK(called);
1996 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
1997
1998 s.reset();
1999 s.next_write_length(10);
2000 called = false;
2001 boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
2002 bindns::bind(async_write_handler,
2003 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2004 ioc.restart();
2005 ioc.run();
7c673cae
FG
2006 BOOST_ASIO_CHECK(called);
2007 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2008
2009 s.reset();
2010 called = false;
2011 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
2012 bindns::bind(async_write_handler,
2013 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2014 ioc.restart();
2015 ioc.run();
7c673cae
FG
2016 BOOST_ASIO_CHECK(called);
2017 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2018
2019 s.reset();
2020 s.next_write_length(1);
2021 called = false;
2022 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
2023 bindns::bind(async_write_handler,
2024 _1, _2, 1, &called));
b32b8144
FG
2025 ioc.restart();
2026 ioc.run();
7c673cae
FG
2027 BOOST_ASIO_CHECK(called);
2028 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2029
2030 s.reset();
2031 s.next_write_length(10);
2032 called = false;
2033 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
2034 bindns::bind(async_write_handler,
2035 _1, _2, 10, &called));
b32b8144
FG
2036 ioc.restart();
2037 ioc.run();
7c673cae
FG
2038 BOOST_ASIO_CHECK(called);
2039 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2040
2041 s.reset();
2042 called = false;
2043 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
2044 bindns::bind(async_write_handler,
2045 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2046 ioc.restart();
2047 ioc.run();
7c673cae
FG
2048 BOOST_ASIO_CHECK(called);
2049 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2050
2051 s.reset();
2052 s.next_write_length(1);
2053 called = false;
2054 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
2055 bindns::bind(async_write_handler,
2056 _1, _2, 10, &called));
b32b8144
FG
2057 ioc.restart();
2058 ioc.run();
7c673cae
FG
2059 BOOST_ASIO_CHECK(called);
2060 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2061
2062 s.reset();
2063 s.next_write_length(10);
2064 called = false;
2065 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
2066 bindns::bind(async_write_handler,
2067 _1, _2, 10, &called));
b32b8144
FG
2068 ioc.restart();
2069 ioc.run();
7c673cae
FG
2070 BOOST_ASIO_CHECK(called);
2071 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2072
2073 s.reset();
2074 called = false;
2075 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
2076 bindns::bind(async_write_handler,
2077 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2078 ioc.restart();
2079 ioc.run();
7c673cae
FG
2080 BOOST_ASIO_CHECK(called);
2081 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2082
2083 s.reset();
2084 s.next_write_length(1);
2085 called = false;
2086 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
2087 bindns::bind(async_write_handler,
2088 _1, _2, 42, &called));
b32b8144
FG
2089 ioc.restart();
2090 ioc.run();
7c673cae
FG
2091 BOOST_ASIO_CHECK(called);
2092 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2093
2094 s.reset();
2095 s.next_write_length(10);
2096 called = false;
2097 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
2098 bindns::bind(async_write_handler,
2099 _1, _2, 50, &called));
b32b8144
FG
2100 ioc.restart();
2101 ioc.run();
7c673cae
FG
2102 BOOST_ASIO_CHECK(called);
2103 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
2104
2105 s.reset();
2106 called = false;
2107 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
2108 bindns::bind(async_write_handler,
2109 _1, _2, 1, &called));
b32b8144
FG
2110 ioc.restart();
2111 ioc.run();
7c673cae
FG
2112 BOOST_ASIO_CHECK(called);
2113 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2114
2115 s.reset();
2116 s.next_write_length(1);
2117 called = false;
2118 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
2119 bindns::bind(async_write_handler,
2120 _1, _2, 1, &called));
b32b8144
FG
2121 ioc.restart();
2122 ioc.run();
7c673cae
FG
2123 BOOST_ASIO_CHECK(called);
2124 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2125
2126 s.reset();
2127 s.next_write_length(10);
2128 called = false;
2129 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
2130 bindns::bind(async_write_handler,
2131 _1, _2, 1, &called));
b32b8144
FG
2132 ioc.restart();
2133 ioc.run();
7c673cae
FG
2134 BOOST_ASIO_CHECK(called);
2135 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2136
2137 s.reset();
2138 called = false;
2139 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
2140 bindns::bind(async_write_handler,
2141 _1, _2, 10, &called));
b32b8144
FG
2142 ioc.restart();
2143 ioc.run();
7c673cae
FG
2144 BOOST_ASIO_CHECK(called);
2145 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2146
2147 s.reset();
2148 s.next_write_length(1);
2149 called = false;
2150 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
2151 bindns::bind(async_write_handler,
2152 _1, _2, 10, &called));
b32b8144
FG
2153 ioc.restart();
2154 ioc.run();
7c673cae
FG
2155 BOOST_ASIO_CHECK(called);
2156 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2157
2158 s.reset();
2159 s.next_write_length(10);
2160 called = false;
2161 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
2162 bindns::bind(async_write_handler,
2163 _1, _2, 10, &called));
b32b8144
FG
2164 ioc.restart();
2165 ioc.run();
7c673cae
FG
2166 BOOST_ASIO_CHECK(called);
2167 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2168
2169 s.reset();
2170 called = false;
2171 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
2172 bindns::bind(async_write_handler,
2173 _1, _2, 42, &called));
b32b8144
FG
2174 ioc.restart();
2175 ioc.run();
7c673cae
FG
2176 BOOST_ASIO_CHECK(called);
2177 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2178
2179 s.reset();
2180 s.next_write_length(1);
2181 called = false;
2182 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
2183 bindns::bind(async_write_handler,
2184 _1, _2, 42, &called));
b32b8144
FG
2185 ioc.restart();
2186 ioc.run();
7c673cae
FG
2187 BOOST_ASIO_CHECK(called);
2188 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2189
2190 s.reset();
2191 s.next_write_length(10);
2192 called = false;
2193 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
2194 bindns::bind(async_write_handler,
2195 _1, _2, 42, &called));
b32b8144
FG
2196 ioc.restart();
2197 ioc.run();
7c673cae
FG
2198 BOOST_ASIO_CHECK(called);
2199 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2200
2201 s.reset();
2202 called = false;
2203 boost::asio::async_write(s, buffers, old_style_transfer_all,
2204 bindns::bind(async_write_handler,
2205 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2206 ioc.restart();
2207 ioc.run();
7c673cae
FG
2208 BOOST_ASIO_CHECK(called);
2209 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2210
2211 s.reset();
2212 s.next_write_length(1);
2213 called = false;
2214 boost::asio::async_write(s, buffers, old_style_transfer_all,
2215 bindns::bind(async_write_handler,
2216 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2217 ioc.restart();
2218 ioc.run();
7c673cae
FG
2219 BOOST_ASIO_CHECK(called);
2220 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2221
2222 s.reset();
2223 s.next_write_length(10);
2224 called = false;
2225 boost::asio::async_write(s, buffers, old_style_transfer_all,
2226 bindns::bind(async_write_handler,
2227 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2228 ioc.restart();
2229 ioc.run();
7c673cae
FG
2230 BOOST_ASIO_CHECK(called);
2231 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2232
2233 s.reset();
2234 called = false;
2235 boost::asio::async_write(s, buffers, short_transfer,
2236 bindns::bind(async_write_handler,
2237 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2238 ioc.restart();
2239 ioc.run();
7c673cae
FG
2240 BOOST_ASIO_CHECK(called);
2241 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2242
2243 s.reset();
2244 s.next_write_length(1);
2245 called = false;
2246 boost::asio::async_write(s, buffers, short_transfer,
2247 bindns::bind(async_write_handler,
2248 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2249 ioc.restart();
2250 ioc.run();
7c673cae
FG
2251 BOOST_ASIO_CHECK(called);
2252 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2253
2254 s.reset();
2255 s.next_write_length(10);
2256 called = false;
2257 boost::asio::async_write(s, buffers, short_transfer,
2258 bindns::bind(async_write_handler,
2259 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2260 ioc.restart();
2261 ioc.run();
7c673cae
FG
2262 BOOST_ASIO_CHECK(called);
2263 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2264
2265 s.reset();
2266 int i = boost::asio::async_write(s, buffers, short_transfer,
2267 archetypes::lazy_handler());
2268 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
2269 ioc.restart();
2270 ioc.run();
7c673cae
FG
2271 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2272}
2273
b32b8144 2274void test_4_arg_mutable_buffer_async_write()
7c673cae
FG
2275{
2276#if defined(BOOST_ASIO_HAS_BOOST_BIND)
2277 namespace bindns = boost;
2278#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2279 namespace bindns = std;
2280 using std::placeholders::_1;
2281 using std::placeholders::_2;
2282#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
2283
b32b8144
FG
2284 boost::asio::io_context ioc;
2285 test_stream s(ioc);
2286 boost::asio::mutable_buffer buffers
7c673cae
FG
2287 = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
2288
2289 s.reset();
2290 bool called = false;
2291 boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
2292 bindns::bind(async_write_handler,
2293 _1, _2, sizeof(mutable_write_data), &called));
b32b8144
FG
2294 ioc.restart();
2295 ioc.run();
7c673cae
FG
2296 BOOST_ASIO_CHECK(called);
2297 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
2298
2299 s.reset();
2300 s.next_write_length(1);
2301 called = false;
2302 boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
2303 bindns::bind(async_write_handler,
2304 _1, _2, sizeof(mutable_write_data), &called));
b32b8144
FG
2305 ioc.restart();
2306 ioc.run();
7c673cae
FG
2307 BOOST_ASIO_CHECK(called);
2308 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
2309
2310 s.reset();
2311 s.next_write_length(10);
2312 called = false;
2313 boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
2314 bindns::bind(async_write_handler,
2315 _1, _2, sizeof(mutable_write_data), &called));
b32b8144
FG
2316 ioc.restart();
2317 ioc.run();
7c673cae
FG
2318 BOOST_ASIO_CHECK(called);
2319 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
2320
2321 s.reset();
2322 called = false;
2323 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
2324 bindns::bind(async_write_handler,
2325 _1, _2, sizeof(mutable_write_data), &called));
b32b8144
FG
2326 ioc.restart();
2327 ioc.run();
7c673cae
FG
2328 BOOST_ASIO_CHECK(called);
2329 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
2330
2331 s.reset();
2332 s.next_write_length(1);
2333 called = false;
2334 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
2335 bindns::bind(async_write_handler,
2336 _1, _2, 1, &called));
b32b8144
FG
2337 ioc.restart();
2338 ioc.run();
7c673cae
FG
2339 BOOST_ASIO_CHECK(called);
2340 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2341
2342 s.reset();
2343 s.next_write_length(10);
2344 called = false;
2345 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
2346 bindns::bind(async_write_handler,
2347 _1, _2, 10, &called));
b32b8144
FG
2348 ioc.restart();
2349 ioc.run();
7c673cae
FG
2350 BOOST_ASIO_CHECK(called);
2351 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2352
2353 s.reset();
2354 called = false;
2355 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
2356 bindns::bind(async_write_handler,
2357 _1, _2, sizeof(mutable_write_data), &called));
b32b8144
FG
2358 ioc.restart();
2359 ioc.run();
7c673cae
FG
2360 BOOST_ASIO_CHECK(called);
2361 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
2362
2363 s.reset();
2364 s.next_write_length(1);
2365 called = false;
2366 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
2367 bindns::bind(async_write_handler,
2368 _1, _2, 10, &called));
b32b8144
FG
2369 ioc.restart();
2370 ioc.run();
7c673cae
FG
2371 BOOST_ASIO_CHECK(called);
2372 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2373
2374 s.reset();
2375 s.next_write_length(10);
2376 called = false;
2377 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
2378 bindns::bind(async_write_handler,
2379 _1, _2, 10, &called));
b32b8144
FG
2380 ioc.restart();
2381 ioc.run();
7c673cae
FG
2382 BOOST_ASIO_CHECK(called);
2383 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2384
2385 s.reset();
2386 called = false;
2387 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
2388 bindns::bind(async_write_handler,
2389 _1, _2, sizeof(mutable_write_data), &called));
b32b8144
FG
2390 ioc.restart();
2391 ioc.run();
7c673cae
FG
2392 BOOST_ASIO_CHECK(called);
2393 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
2394
2395 s.reset();
2396 s.next_write_length(1);
2397 called = false;
2398 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
2399 bindns::bind(async_write_handler,
2400 _1, _2, 42, &called));
b32b8144
FG
2401 ioc.restart();
2402 ioc.run();
7c673cae
FG
2403 BOOST_ASIO_CHECK(called);
2404 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2405
2406 s.reset();
2407 s.next_write_length(10);
2408 called = false;
2409 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
2410 bindns::bind(async_write_handler,
2411 _1, _2, 50, &called));
b32b8144
FG
2412 ioc.restart();
2413 ioc.run();
7c673cae
FG
2414 BOOST_ASIO_CHECK(called);
2415 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
2416
2417 s.reset();
2418 called = false;
2419 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
2420 bindns::bind(async_write_handler,
2421 _1, _2, 1, &called));
b32b8144
FG
2422 ioc.restart();
2423 ioc.run();
7c673cae
FG
2424 BOOST_ASIO_CHECK(called);
2425 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2426
2427 s.reset();
2428 s.next_write_length(1);
2429 called = false;
2430 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
2431 bindns::bind(async_write_handler,
2432 _1, _2, 1, &called));
b32b8144
FG
2433 ioc.restart();
2434 ioc.run();
7c673cae
FG
2435 BOOST_ASIO_CHECK(called);
2436 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2437
2438 s.reset();
2439 s.next_write_length(10);
2440 called = false;
2441 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
2442 bindns::bind(async_write_handler,
2443 _1, _2, 1, &called));
b32b8144
FG
2444 ioc.restart();
2445 ioc.run();
7c673cae
FG
2446 BOOST_ASIO_CHECK(called);
2447 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2448
2449 s.reset();
2450 called = false;
2451 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
2452 bindns::bind(async_write_handler,
2453 _1, _2, 10, &called));
b32b8144
FG
2454 ioc.restart();
2455 ioc.run();
7c673cae
FG
2456 BOOST_ASIO_CHECK(called);
2457 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2458
2459 s.reset();
2460 s.next_write_length(1);
2461 called = false;
2462 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
2463 bindns::bind(async_write_handler,
2464 _1, _2, 10, &called));
b32b8144
FG
2465 ioc.restart();
2466 ioc.run();
7c673cae
FG
2467 BOOST_ASIO_CHECK(called);
2468 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2469
2470 s.reset();
2471 s.next_write_length(10);
2472 called = false;
2473 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
2474 bindns::bind(async_write_handler,
2475 _1, _2, 10, &called));
b32b8144
FG
2476 ioc.restart();
2477 ioc.run();
7c673cae
FG
2478 BOOST_ASIO_CHECK(called);
2479 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2480
2481 s.reset();
2482 called = false;
2483 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
2484 bindns::bind(async_write_handler,
2485 _1, _2, 42, &called));
b32b8144
FG
2486 ioc.restart();
2487 ioc.run();
7c673cae
FG
2488 BOOST_ASIO_CHECK(called);
2489 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2490
2491 s.reset();
2492 s.next_write_length(1);
2493 called = false;
2494 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
2495 bindns::bind(async_write_handler,
2496 _1, _2, 42, &called));
b32b8144
FG
2497 ioc.restart();
2498 ioc.run();
7c673cae
FG
2499 BOOST_ASIO_CHECK(called);
2500 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2501
2502 s.reset();
2503 s.next_write_length(10);
2504 called = false;
2505 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
2506 bindns::bind(async_write_handler,
2507 _1, _2, 42, &called));
b32b8144
FG
2508 ioc.restart();
2509 ioc.run();
7c673cae
FG
2510 BOOST_ASIO_CHECK(called);
2511 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2512
2513 s.reset();
2514 called = false;
2515 boost::asio::async_write(s, buffers, old_style_transfer_all,
2516 bindns::bind(async_write_handler,
2517 _1, _2, sizeof(mutable_write_data), &called));
b32b8144
FG
2518 ioc.restart();
2519 ioc.run();
7c673cae
FG
2520 BOOST_ASIO_CHECK(called);
2521 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
2522
2523 s.reset();
2524 s.next_write_length(1);
2525 called = false;
2526 boost::asio::async_write(s, buffers, old_style_transfer_all,
2527 bindns::bind(async_write_handler,
2528 _1, _2, sizeof(mutable_write_data), &called));
b32b8144
FG
2529 ioc.restart();
2530 ioc.run();
7c673cae
FG
2531 BOOST_ASIO_CHECK(called);
2532 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
2533
2534 s.reset();
2535 s.next_write_length(10);
2536 called = false;
2537 boost::asio::async_write(s, buffers, old_style_transfer_all,
2538 bindns::bind(async_write_handler,
2539 _1, _2, sizeof(mutable_write_data), &called));
b32b8144
FG
2540 ioc.restart();
2541 ioc.run();
7c673cae
FG
2542 BOOST_ASIO_CHECK(called);
2543 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
2544
2545 s.reset();
2546 called = false;
2547 boost::asio::async_write(s, buffers, short_transfer,
2548 bindns::bind(async_write_handler,
2549 _1, _2, sizeof(mutable_write_data), &called));
b32b8144
FG
2550 ioc.restart();
2551 ioc.run();
7c673cae
FG
2552 BOOST_ASIO_CHECK(called);
2553 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
2554
2555 s.reset();
2556 s.next_write_length(1);
2557 called = false;
2558 boost::asio::async_write(s, buffers, short_transfer,
2559 bindns::bind(async_write_handler,
2560 _1, _2, sizeof(mutable_write_data), &called));
b32b8144
FG
2561 ioc.restart();
2562 ioc.run();
7c673cae
FG
2563 BOOST_ASIO_CHECK(called);
2564 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
2565
2566 s.reset();
2567 s.next_write_length(10);
2568 called = false;
2569 boost::asio::async_write(s, buffers, short_transfer,
2570 bindns::bind(async_write_handler,
2571 _1, _2, sizeof(mutable_write_data), &called));
b32b8144
FG
2572 ioc.restart();
2573 ioc.run();
7c673cae
FG
2574 BOOST_ASIO_CHECK(called);
2575 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
2576
2577 s.reset();
2578 int i = boost::asio::async_write(s, buffers, short_transfer,
2579 archetypes::lazy_handler());
2580 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
2581 ioc.restart();
2582 ioc.run();
7c673cae
FG
2583 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2584}
2585
2586void test_4_arg_boost_array_buffers_async_write()
2587{
2588#if defined(BOOST_ASIO_HAS_BOOST_BIND)
2589 namespace bindns = boost;
2590#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2591 namespace bindns = std;
2592 using std::placeholders::_1;
2593 using std::placeholders::_2;
2594#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
2595
2596#if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
b32b8144
FG
2597 boost::asio::io_context ioc;
2598 test_stream s(ioc);
7c673cae
FG
2599 boost::array<boost::asio::const_buffer, 2> buffers = { {
2600 boost::asio::buffer(write_data, 32),
2601 boost::asio::buffer(write_data) + 32 } };
2602
2603 s.reset();
2604 bool called = false;
2605 boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
2606 bindns::bind(async_write_handler,
2607 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2608 ioc.restart();
2609 ioc.run();
7c673cae
FG
2610 BOOST_ASIO_CHECK(called);
2611 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2612
2613 s.reset();
2614 s.next_write_length(1);
2615 called = false;
2616 boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
2617 bindns::bind(async_write_handler,
2618 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2619 ioc.restart();
2620 ioc.run();
7c673cae
FG
2621 BOOST_ASIO_CHECK(called);
2622 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2623
2624 s.reset();
2625 s.next_write_length(10);
2626 called = false;
2627 boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
2628 bindns::bind(async_write_handler,
2629 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2630 ioc.restart();
2631 ioc.run();
7c673cae
FG
2632 BOOST_ASIO_CHECK(called);
2633 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2634
2635 s.reset();
2636 called = false;
2637 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
2638 bindns::bind(async_write_handler,
2639 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2640 ioc.restart();
2641 ioc.run();
7c673cae
FG
2642 BOOST_ASIO_CHECK(called);
2643 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2644
2645 s.reset();
2646 s.next_write_length(1);
2647 called = false;
2648 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
2649 bindns::bind(async_write_handler,
2650 _1, _2, 1, &called));
b32b8144
FG
2651 ioc.restart();
2652 ioc.run();
7c673cae
FG
2653 BOOST_ASIO_CHECK(called);
2654 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2655
2656 s.reset();
2657 s.next_write_length(10);
2658 called = false;
2659 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
2660 bindns::bind(async_write_handler,
2661 _1, _2, 10, &called));
b32b8144
FG
2662 ioc.restart();
2663 ioc.run();
7c673cae
FG
2664 BOOST_ASIO_CHECK(called);
2665 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2666
2667 s.reset();
2668 called = false;
2669 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
2670 bindns::bind(async_write_handler,
2671 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2672 ioc.restart();
2673 ioc.run();
7c673cae
FG
2674 BOOST_ASIO_CHECK(called);
2675 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2676
2677 s.reset();
2678 s.next_write_length(1);
2679 called = false;
2680 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
2681 bindns::bind(async_write_handler,
2682 _1, _2, 10, &called));
b32b8144
FG
2683 ioc.restart();
2684 ioc.run();
7c673cae
FG
2685 BOOST_ASIO_CHECK(called);
2686 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2687
2688 s.reset();
2689 s.next_write_length(10);
2690 called = false;
2691 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
2692 bindns::bind(async_write_handler,
2693 _1, _2, 10, &called));
b32b8144
FG
2694 ioc.restart();
2695 ioc.run();
7c673cae
FG
2696 BOOST_ASIO_CHECK(called);
2697 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2698
2699 s.reset();
2700 called = false;
2701 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
2702 bindns::bind(async_write_handler,
2703 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2704 ioc.restart();
2705 ioc.run();
7c673cae
FG
2706 BOOST_ASIO_CHECK(called);
2707 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2708
2709 s.reset();
2710 s.next_write_length(1);
2711 called = false;
2712 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
2713 bindns::bind(async_write_handler,
2714 _1, _2, 42, &called));
b32b8144
FG
2715 ioc.restart();
2716 ioc.run();
7c673cae
FG
2717 BOOST_ASIO_CHECK(called);
2718 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2719
2720 s.reset();
2721 s.next_write_length(10);
2722 called = false;
2723 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
2724 bindns::bind(async_write_handler,
2725 _1, _2, 50, &called));
b32b8144
FG
2726 ioc.restart();
2727 ioc.run();
7c673cae
FG
2728 BOOST_ASIO_CHECK(called);
2729 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
2730
2731 s.reset();
2732 called = false;
2733 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
2734 bindns::bind(async_write_handler,
2735 _1, _2, 1, &called));
b32b8144
FG
2736 ioc.restart();
2737 ioc.run();
7c673cae
FG
2738 BOOST_ASIO_CHECK(called);
2739 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2740
2741 s.reset();
2742 s.next_write_length(1);
2743 called = false;
2744 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
2745 bindns::bind(async_write_handler,
2746 _1, _2, 1, &called));
b32b8144
FG
2747 ioc.restart();
2748 ioc.run();
7c673cae
FG
2749 BOOST_ASIO_CHECK(called);
2750 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2751
2752 s.reset();
2753 s.next_write_length(10);
2754 called = false;
2755 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
2756 bindns::bind(async_write_handler,
2757 _1, _2, 1, &called));
b32b8144
FG
2758 ioc.restart();
2759 ioc.run();
7c673cae
FG
2760 BOOST_ASIO_CHECK(called);
2761 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2762
2763 s.reset();
2764 called = false;
2765 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
2766 bindns::bind(async_write_handler,
2767 _1, _2, 10, &called));
b32b8144
FG
2768 ioc.restart();
2769 ioc.run();
7c673cae
FG
2770 BOOST_ASIO_CHECK(called);
2771 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2772
2773 s.reset();
2774 s.next_write_length(1);
2775 called = false;
2776 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
2777 bindns::bind(async_write_handler,
2778 _1, _2, 10, &called));
b32b8144
FG
2779 ioc.restart();
2780 ioc.run();
7c673cae
FG
2781 BOOST_ASIO_CHECK(called);
2782 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2783
2784 s.reset();
2785 s.next_write_length(10);
2786 called = false;
2787 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
2788 bindns::bind(async_write_handler,
2789 _1, _2, 10, &called));
b32b8144
FG
2790 ioc.restart();
2791 ioc.run();
7c673cae
FG
2792 BOOST_ASIO_CHECK(called);
2793 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2794
2795 s.reset();
2796 called = false;
2797 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
2798 bindns::bind(async_write_handler,
2799 _1, _2, 42, &called));
b32b8144
FG
2800 ioc.restart();
2801 ioc.run();
7c673cae
FG
2802 BOOST_ASIO_CHECK(called);
2803 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2804
2805 s.reset();
2806 s.next_write_length(1);
2807 called = false;
2808 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
2809 bindns::bind(async_write_handler,
2810 _1, _2, 42, &called));
b32b8144
FG
2811 ioc.restart();
2812 ioc.run();
7c673cae
FG
2813 BOOST_ASIO_CHECK(called);
2814 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2815
2816 s.reset();
2817 s.next_write_length(10);
2818 called = false;
2819 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
2820 bindns::bind(async_write_handler,
2821 _1, _2, 42, &called));
b32b8144
FG
2822 ioc.restart();
2823 ioc.run();
7c673cae
FG
2824 BOOST_ASIO_CHECK(called);
2825 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2826
2827 s.reset();
2828 called = false;
2829 boost::asio::async_write(s, buffers, old_style_transfer_all,
2830 bindns::bind(async_write_handler,
2831 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2832 ioc.restart();
2833 ioc.run();
7c673cae
FG
2834 BOOST_ASIO_CHECK(called);
2835 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2836
2837 s.reset();
2838 s.next_write_length(1);
2839 called = false;
2840 boost::asio::async_write(s, buffers, old_style_transfer_all,
2841 bindns::bind(async_write_handler,
2842 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2843 ioc.restart();
2844 ioc.run();
7c673cae
FG
2845 BOOST_ASIO_CHECK(called);
2846 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2847
2848 s.reset();
2849 s.next_write_length(10);
2850 called = false;
2851 boost::asio::async_write(s, buffers, old_style_transfer_all,
2852 bindns::bind(async_write_handler,
2853 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2854 ioc.restart();
2855 ioc.run();
7c673cae
FG
2856 BOOST_ASIO_CHECK(called);
2857 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2858
2859 s.reset();
2860 called = false;
2861 boost::asio::async_write(s, buffers, short_transfer,
2862 bindns::bind(async_write_handler,
2863 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2864 ioc.restart();
2865 ioc.run();
7c673cae
FG
2866 BOOST_ASIO_CHECK(called);
2867 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2868
2869 s.reset();
2870 s.next_write_length(1);
2871 called = false;
2872 boost::asio::async_write(s, buffers, short_transfer,
2873 bindns::bind(async_write_handler,
2874 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2875 ioc.restart();
2876 ioc.run();
7c673cae
FG
2877 BOOST_ASIO_CHECK(called);
2878 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2879
2880 s.reset();
2881 s.next_write_length(10);
2882 called = false;
2883 boost::asio::async_write(s, buffers, short_transfer,
2884 bindns::bind(async_write_handler,
2885 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2886 ioc.restart();
2887 ioc.run();
7c673cae
FG
2888 BOOST_ASIO_CHECK(called);
2889 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2890
2891 s.reset();
2892 int i = boost::asio::async_write(s, buffers, short_transfer,
2893 archetypes::lazy_handler());
2894 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
2895 ioc.restart();
2896 ioc.run();
7c673cae
FG
2897 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2898#endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
2899}
2900
2901void test_4_arg_std_array_buffers_async_write()
2902{
2903#if defined(BOOST_ASIO_HAS_BOOST_BIND)
2904 namespace bindns = boost;
2905#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2906 namespace bindns = std;
2907 using std::placeholders::_1;
2908 using std::placeholders::_2;
2909#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
2910
2911#if defined(BOOST_ASIO_HAS_STD_ARRAY)
b32b8144
FG
2912 boost::asio::io_context ioc;
2913 test_stream s(ioc);
7c673cae
FG
2914 std::array<boost::asio::const_buffer, 2> buffers = { {
2915 boost::asio::buffer(write_data, 32),
2916 boost::asio::buffer(write_data) + 32 } };
2917
2918 s.reset();
2919 bool called = false;
2920 boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
2921 bindns::bind(async_write_handler,
2922 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2923 ioc.restart();
2924 ioc.run();
7c673cae
FG
2925 BOOST_ASIO_CHECK(called);
2926 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2927
2928 s.reset();
2929 s.next_write_length(1);
2930 called = false;
2931 boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
2932 bindns::bind(async_write_handler,
2933 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2934 ioc.restart();
2935 ioc.run();
7c673cae
FG
2936 BOOST_ASIO_CHECK(called);
2937 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2938
2939 s.reset();
2940 s.next_write_length(10);
2941 called = false;
2942 boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
2943 bindns::bind(async_write_handler,
2944 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2945 ioc.restart();
2946 ioc.run();
7c673cae
FG
2947 BOOST_ASIO_CHECK(called);
2948 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2949
2950 s.reset();
2951 called = false;
2952 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
2953 bindns::bind(async_write_handler,
2954 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2955 ioc.restart();
2956 ioc.run();
7c673cae
FG
2957 BOOST_ASIO_CHECK(called);
2958 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2959
2960 s.reset();
2961 s.next_write_length(1);
2962 called = false;
2963 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
2964 bindns::bind(async_write_handler,
2965 _1, _2, 1, &called));
b32b8144
FG
2966 ioc.restart();
2967 ioc.run();
7c673cae
FG
2968 BOOST_ASIO_CHECK(called);
2969 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2970
2971 s.reset();
2972 s.next_write_length(10);
2973 called = false;
2974 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
2975 bindns::bind(async_write_handler,
2976 _1, _2, 10, &called));
b32b8144
FG
2977 ioc.restart();
2978 ioc.run();
7c673cae
FG
2979 BOOST_ASIO_CHECK(called);
2980 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2981
2982 s.reset();
2983 called = false;
2984 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
2985 bindns::bind(async_write_handler,
2986 _1, _2, sizeof(write_data), &called));
b32b8144
FG
2987 ioc.restart();
2988 ioc.run();
7c673cae
FG
2989 BOOST_ASIO_CHECK(called);
2990 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
2991
2992 s.reset();
2993 s.next_write_length(1);
2994 called = false;
2995 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
2996 bindns::bind(async_write_handler,
2997 _1, _2, 10, &called));
b32b8144
FG
2998 ioc.restart();
2999 ioc.run();
7c673cae
FG
3000 BOOST_ASIO_CHECK(called);
3001 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3002
3003 s.reset();
3004 s.next_write_length(10);
3005 called = false;
3006 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
3007 bindns::bind(async_write_handler,
3008 _1, _2, 10, &called));
b32b8144
FG
3009 ioc.restart();
3010 ioc.run();
7c673cae
FG
3011 BOOST_ASIO_CHECK(called);
3012 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3013
3014 s.reset();
3015 called = false;
3016 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
3017 bindns::bind(async_write_handler,
3018 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3019 ioc.restart();
3020 ioc.run();
7c673cae
FG
3021 BOOST_ASIO_CHECK(called);
3022 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3023
3024 s.reset();
3025 s.next_write_length(1);
3026 called = false;
3027 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
3028 bindns::bind(async_write_handler,
3029 _1, _2, 42, &called));
b32b8144
FG
3030 ioc.restart();
3031 ioc.run();
7c673cae
FG
3032 BOOST_ASIO_CHECK(called);
3033 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3034
3035 s.reset();
3036 s.next_write_length(10);
3037 called = false;
3038 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
3039 bindns::bind(async_write_handler,
3040 _1, _2, 50, &called));
b32b8144
FG
3041 ioc.restart();
3042 ioc.run();
7c673cae
FG
3043 BOOST_ASIO_CHECK(called);
3044 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
3045
3046 s.reset();
3047 called = false;
3048 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
3049 bindns::bind(async_write_handler,
3050 _1, _2, 1, &called));
b32b8144
FG
3051 ioc.restart();
3052 ioc.run();
7c673cae
FG
3053 BOOST_ASIO_CHECK(called);
3054 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3055
3056 s.reset();
3057 s.next_write_length(1);
3058 called = false;
3059 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
3060 bindns::bind(async_write_handler,
3061 _1, _2, 1, &called));
b32b8144
FG
3062 ioc.restart();
3063 ioc.run();
7c673cae
FG
3064 BOOST_ASIO_CHECK(called);
3065 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3066
3067 s.reset();
3068 s.next_write_length(10);
3069 called = false;
3070 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
3071 bindns::bind(async_write_handler,
3072 _1, _2, 1, &called));
b32b8144
FG
3073 ioc.restart();
3074 ioc.run();
7c673cae
FG
3075 BOOST_ASIO_CHECK(called);
3076 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3077
3078 s.reset();
3079 called = false;
3080 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
3081 bindns::bind(async_write_handler,
3082 _1, _2, 10, &called));
b32b8144
FG
3083 ioc.restart();
3084 ioc.run();
7c673cae
FG
3085 BOOST_ASIO_CHECK(called);
3086 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3087
3088 s.reset();
3089 s.next_write_length(1);
3090 called = false;
3091 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
3092 bindns::bind(async_write_handler,
3093 _1, _2, 10, &called));
b32b8144
FG
3094 ioc.restart();
3095 ioc.run();
7c673cae
FG
3096 BOOST_ASIO_CHECK(called);
3097 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3098
3099 s.reset();
3100 s.next_write_length(10);
3101 called = false;
3102 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
3103 bindns::bind(async_write_handler,
3104 _1, _2, 10, &called));
b32b8144
FG
3105 ioc.restart();
3106 ioc.run();
7c673cae
FG
3107 BOOST_ASIO_CHECK(called);
3108 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3109
3110 s.reset();
3111 called = false;
3112 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
3113 bindns::bind(async_write_handler,
3114 _1, _2, 42, &called));
b32b8144
FG
3115 ioc.restart();
3116 ioc.run();
7c673cae
FG
3117 BOOST_ASIO_CHECK(called);
3118 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3119
3120 s.reset();
3121 s.next_write_length(1);
3122 called = false;
3123 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
3124 bindns::bind(async_write_handler,
3125 _1, _2, 42, &called));
b32b8144
FG
3126 ioc.restart();
3127 ioc.run();
7c673cae
FG
3128 BOOST_ASIO_CHECK(called);
3129 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3130
3131 s.reset();
3132 s.next_write_length(10);
3133 called = false;
3134 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
3135 bindns::bind(async_write_handler,
3136 _1, _2, 42, &called));
b32b8144
FG
3137 ioc.restart();
3138 ioc.run();
7c673cae
FG
3139 BOOST_ASIO_CHECK(called);
3140 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3141
3142 s.reset();
3143 called = false;
3144 boost::asio::async_write(s, buffers, old_style_transfer_all,
3145 bindns::bind(async_write_handler,
3146 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3147 ioc.restart();
3148 ioc.run();
7c673cae
FG
3149 BOOST_ASIO_CHECK(called);
3150 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3151
3152 s.reset();
3153 s.next_write_length(1);
3154 called = false;
3155 boost::asio::async_write(s, buffers, old_style_transfer_all,
3156 bindns::bind(async_write_handler,
3157 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3158 ioc.restart();
3159 ioc.run();
7c673cae
FG
3160 BOOST_ASIO_CHECK(called);
3161 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3162
3163 s.reset();
3164 s.next_write_length(10);
3165 called = false;
3166 boost::asio::async_write(s, buffers, old_style_transfer_all,
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(buffers, sizeof(write_data)));
3173
3174 s.reset();
3175 called = false;
3176 boost::asio::async_write(s, buffers, short_transfer,
3177 bindns::bind(async_write_handler,
3178 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3179 ioc.restart();
3180 ioc.run();
7c673cae
FG
3181 BOOST_ASIO_CHECK(called);
3182 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3183
3184 s.reset();
3185 s.next_write_length(1);
3186 called = false;
3187 boost::asio::async_write(s, buffers, short_transfer,
3188 bindns::bind(async_write_handler,
3189 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3190 ioc.restart();
3191 ioc.run();
7c673cae
FG
3192 BOOST_ASIO_CHECK(called);
3193 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3194
3195 s.reset();
3196 s.next_write_length(10);
3197 called = false;
3198 boost::asio::async_write(s, buffers, short_transfer,
3199 bindns::bind(async_write_handler,
3200 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3201 ioc.restart();
3202 ioc.run();
7c673cae
FG
3203 BOOST_ASIO_CHECK(called);
3204 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3205
3206 s.reset();
3207 int i = boost::asio::async_write(s, buffers, short_transfer,
3208 archetypes::lazy_handler());
3209 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
3210 ioc.restart();
3211 ioc.run();
7c673cae
FG
3212 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3213#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
3214}
3215
3216void test_4_arg_vector_buffers_async_write()
3217{
3218#if defined(BOOST_ASIO_HAS_BOOST_BIND)
3219 namespace bindns = boost;
3220#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3221 namespace bindns = std;
3222 using std::placeholders::_1;
3223 using std::placeholders::_2;
3224#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
3225
b32b8144
FG
3226 boost::asio::io_context ioc;
3227 test_stream s(ioc);
7c673cae
FG
3228 std::vector<boost::asio::const_buffer> buffers;
3229 buffers.push_back(boost::asio::buffer(write_data, 32));
b32b8144
FG
3230 buffers.push_back(boost::asio::buffer(write_data, 39) + 32);
3231 buffers.push_back(boost::asio::buffer(write_data) + 39);
7c673cae
FG
3232
3233 s.reset();
3234 bool called = false;
3235 boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
3236 bindns::bind(async_write_handler,
3237 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3238 ioc.restart();
3239 ioc.run();
7c673cae
FG
3240 BOOST_ASIO_CHECK(called);
3241 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3242
3243 s.reset();
3244 s.next_write_length(1);
3245 called = false;
3246 boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
3247 bindns::bind(async_write_handler,
3248 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3249 ioc.restart();
3250 ioc.run();
7c673cae
FG
3251 BOOST_ASIO_CHECK(called);
3252 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3253
3254 s.reset();
3255 s.next_write_length(10);
3256 called = false;
3257 boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
3258 bindns::bind(async_write_handler,
3259 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3260 ioc.restart();
3261 ioc.run();
7c673cae
FG
3262 BOOST_ASIO_CHECK(called);
3263 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3264
3265 s.reset();
3266 called = false;
3267 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
3268 bindns::bind(async_write_handler,
3269 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3270 ioc.restart();
3271 ioc.run();
7c673cae
FG
3272 BOOST_ASIO_CHECK(called);
3273 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3274
3275 s.reset();
3276 s.next_write_length(1);
3277 called = false;
3278 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
3279 bindns::bind(async_write_handler,
3280 _1, _2, 1, &called));
b32b8144
FG
3281 ioc.restart();
3282 ioc.run();
7c673cae
FG
3283 BOOST_ASIO_CHECK(called);
3284 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3285
3286 s.reset();
3287 s.next_write_length(10);
3288 called = false;
3289 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
3290 bindns::bind(async_write_handler,
3291 _1, _2, 10, &called));
b32b8144
FG
3292 ioc.restart();
3293 ioc.run();
7c673cae
FG
3294 BOOST_ASIO_CHECK(called);
3295 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3296
3297 s.reset();
3298 called = false;
3299 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
3300 bindns::bind(async_write_handler,
3301 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3302 ioc.restart();
3303 ioc.run();
7c673cae
FG
3304 BOOST_ASIO_CHECK(called);
3305 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3306
3307 s.reset();
3308 s.next_write_length(1);
3309 called = false;
3310 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
3311 bindns::bind(async_write_handler,
3312 _1, _2, 10, &called));
b32b8144
FG
3313 ioc.restart();
3314 ioc.run();
7c673cae
FG
3315 BOOST_ASIO_CHECK(called);
3316 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3317
3318 s.reset();
3319 s.next_write_length(10);
3320 called = false;
3321 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
3322 bindns::bind(async_write_handler,
3323 _1, _2, 10, &called));
b32b8144
FG
3324 ioc.restart();
3325 ioc.run();
7c673cae
FG
3326 BOOST_ASIO_CHECK(called);
3327 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3328
3329 s.reset();
3330 called = false;
3331 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
3332 bindns::bind(async_write_handler,
3333 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3334 ioc.restart();
3335 ioc.run();
7c673cae
FG
3336 BOOST_ASIO_CHECK(called);
3337 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3338
3339 s.reset();
3340 s.next_write_length(1);
3341 called = false;
3342 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
3343 bindns::bind(async_write_handler,
3344 _1, _2, 42, &called));
b32b8144
FG
3345 ioc.restart();
3346 ioc.run();
7c673cae
FG
3347 BOOST_ASIO_CHECK(called);
3348 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3349
3350 s.reset();
3351 s.next_write_length(10);
3352 called = false;
3353 boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
3354 bindns::bind(async_write_handler,
3355 _1, _2, 50, &called));
b32b8144
FG
3356 ioc.restart();
3357 ioc.run();
7c673cae
FG
3358 BOOST_ASIO_CHECK(called);
3359 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
3360
3361 s.reset();
3362 called = false;
3363 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
3364 bindns::bind(async_write_handler,
3365 _1, _2, 1, &called));
b32b8144
FG
3366 ioc.restart();
3367 ioc.run();
7c673cae
FG
3368 BOOST_ASIO_CHECK(called);
3369 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3370
3371 s.reset();
3372 s.next_write_length(1);
3373 called = false;
3374 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
3375 bindns::bind(async_write_handler,
3376 _1, _2, 1, &called));
b32b8144
FG
3377 ioc.restart();
3378 ioc.run();
7c673cae
FG
3379 BOOST_ASIO_CHECK(called);
3380 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3381
3382 s.reset();
3383 s.next_write_length(10);
3384 called = false;
3385 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
3386 bindns::bind(async_write_handler,
3387 _1, _2, 1, &called));
b32b8144
FG
3388 ioc.restart();
3389 ioc.run();
7c673cae
FG
3390 BOOST_ASIO_CHECK(called);
3391 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3392
3393 s.reset();
3394 called = false;
3395 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
3396 bindns::bind(async_write_handler,
3397 _1, _2, 10, &called));
b32b8144
FG
3398 ioc.restart();
3399 ioc.run();
7c673cae
FG
3400 BOOST_ASIO_CHECK(called);
3401 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3402
3403 s.reset();
3404 s.next_write_length(1);
3405 called = false;
3406 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
3407 bindns::bind(async_write_handler,
3408 _1, _2, 10, &called));
b32b8144
FG
3409 ioc.restart();
3410 ioc.run();
7c673cae
FG
3411 BOOST_ASIO_CHECK(called);
3412 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3413
3414 s.reset();
3415 s.next_write_length(10);
3416 called = false;
3417 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
3418 bindns::bind(async_write_handler,
3419 _1, _2, 10, &called));
b32b8144
FG
3420 ioc.restart();
3421 ioc.run();
7c673cae
FG
3422 BOOST_ASIO_CHECK(called);
3423 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3424
3425 s.reset();
3426 called = false;
3427 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
3428 bindns::bind(async_write_handler,
3429 _1, _2, 42, &called));
b32b8144
FG
3430 ioc.restart();
3431 ioc.run();
7c673cae
FG
3432 BOOST_ASIO_CHECK(called);
3433 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3434
3435 s.reset();
3436 s.next_write_length(1);
3437 called = false;
3438 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
3439 bindns::bind(async_write_handler,
3440 _1, _2, 42, &called));
b32b8144
FG
3441 ioc.restart();
3442 ioc.run();
7c673cae
FG
3443 BOOST_ASIO_CHECK(called);
3444 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3445
3446 s.reset();
3447 s.next_write_length(10);
3448 called = false;
3449 boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
3450 bindns::bind(async_write_handler,
3451 _1, _2, 42, &called));
b32b8144
FG
3452 ioc.restart();
3453 ioc.run();
7c673cae
FG
3454 BOOST_ASIO_CHECK(called);
3455 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3456
3457 s.reset();
3458 called = false;
3459 boost::asio::async_write(s, buffers, old_style_transfer_all,
3460 bindns::bind(async_write_handler,
3461 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3462 ioc.restart();
3463 ioc.run();
7c673cae
FG
3464 BOOST_ASIO_CHECK(called);
3465 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3466
3467 s.reset();
3468 s.next_write_length(1);
3469 called = false;
3470 boost::asio::async_write(s, buffers, old_style_transfer_all,
3471 bindns::bind(async_write_handler,
3472 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3473 ioc.restart();
3474 ioc.run();
7c673cae
FG
3475 BOOST_ASIO_CHECK(called);
3476 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3477
3478 s.reset();
3479 s.next_write_length(10);
3480 called = false;
3481 boost::asio::async_write(s, buffers, old_style_transfer_all,
3482 bindns::bind(async_write_handler,
3483 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3484 ioc.restart();
3485 ioc.run();
7c673cae
FG
3486 BOOST_ASIO_CHECK(called);
3487 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3488
3489 s.reset();
3490 called = false;
3491 boost::asio::async_write(s, buffers, short_transfer,
3492 bindns::bind(async_write_handler,
3493 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3494 ioc.restart();
3495 ioc.run();
7c673cae
FG
3496 BOOST_ASIO_CHECK(called);
3497 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3498
3499 s.reset();
3500 s.next_write_length(1);
3501 called = false;
3502 boost::asio::async_write(s, buffers, short_transfer,
3503 bindns::bind(async_write_handler,
3504 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3505 ioc.restart();
3506 ioc.run();
7c673cae
FG
3507 BOOST_ASIO_CHECK(called);
3508 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3509
3510 s.reset();
3511 s.next_write_length(10);
3512 called = false;
3513 boost::asio::async_write(s, buffers, short_transfer,
3514 bindns::bind(async_write_handler,
3515 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3516 ioc.restart();
3517 ioc.run();
7c673cae
FG
3518 BOOST_ASIO_CHECK(called);
3519 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3520
3521 s.reset();
3522 int i = boost::asio::async_write(s, buffers, short_transfer,
3523 archetypes::lazy_handler());
3524 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
3525 ioc.restart();
3526 ioc.run();
7c673cae
FG
3527 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3528}
3529
3530void test_4_arg_streambuf_async_write()
3531{
3532#if defined(BOOST_ASIO_HAS_BOOST_BIND)
3533 namespace bindns = boost;
3534#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3535 namespace bindns = std;
3536 using std::placeholders::_1;
3537 using std::placeholders::_2;
3538#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
3539
b32b8144
FG
3540 boost::asio::io_context ioc;
3541 test_stream s(ioc);
7c673cae 3542 boost::asio::streambuf sb;
b32b8144 3543 boost::asio::const_buffer buffers
7c673cae
FG
3544 = boost::asio::buffer(write_data, sizeof(write_data));
3545
3546 s.reset();
3547 sb.consume(sb.size());
3548 sb.sputn(write_data, sizeof(write_data));
3549 bool called = false;
3550 boost::asio::async_write(s, sb, boost::asio::transfer_all(),
3551 bindns::bind(async_write_handler,
3552 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3553 ioc.restart();
3554 ioc.run();
7c673cae
FG
3555 BOOST_ASIO_CHECK(called);
3556 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3557
3558 s.reset();
3559 sb.consume(sb.size());
3560 sb.sputn(write_data, sizeof(write_data));
3561 s.next_write_length(1);
3562 called = false;
3563 boost::asio::async_write(s, sb, boost::asio::transfer_all(),
3564 bindns::bind(async_write_handler,
3565 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3566 ioc.restart();
3567 ioc.run();
7c673cae
FG
3568 BOOST_ASIO_CHECK(called);
3569 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3570
3571 s.reset();
3572 sb.consume(sb.size());
3573 sb.sputn(write_data, sizeof(write_data));
3574 s.next_write_length(10);
3575 called = false;
3576 boost::asio::async_write(s, sb, boost::asio::transfer_all(),
3577 bindns::bind(async_write_handler,
3578 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3579 ioc.restart();
3580 ioc.run();
7c673cae
FG
3581 BOOST_ASIO_CHECK(called);
3582 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3583
3584 s.reset();
3585 sb.consume(sb.size());
3586 sb.sputn(write_data, sizeof(write_data));
3587 called = false;
3588 boost::asio::async_write(s, sb, boost::asio::transfer_at_least(1),
3589 bindns::bind(async_write_handler,
3590 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3591 ioc.restart();
3592 ioc.run();
7c673cae
FG
3593 BOOST_ASIO_CHECK(called);
3594 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3595
3596 s.reset();
3597 sb.consume(sb.size());
3598 sb.sputn(write_data, sizeof(write_data));
3599 s.next_write_length(1);
3600 called = false;
3601 boost::asio::async_write(s, sb, boost::asio::transfer_at_least(1),
3602 bindns::bind(async_write_handler,
3603 _1, _2, 1, &called));
b32b8144
FG
3604 ioc.restart();
3605 ioc.run();
7c673cae
FG
3606 BOOST_ASIO_CHECK(called);
3607 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3608
3609 s.reset();
3610 sb.consume(sb.size());
3611 sb.sputn(write_data, sizeof(write_data));
3612 s.next_write_length(10);
3613 called = false;
3614 boost::asio::async_write(s, sb, boost::asio::transfer_at_least(1),
3615 bindns::bind(async_write_handler,
3616 _1, _2, 10, &called));
b32b8144
FG
3617 ioc.restart();
3618 ioc.run();
7c673cae
FG
3619 BOOST_ASIO_CHECK(called);
3620 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3621
3622 s.reset();
3623 sb.consume(sb.size());
3624 sb.sputn(write_data, sizeof(write_data));
3625 called = false;
3626 boost::asio::async_write(s, sb, boost::asio::transfer_at_least(10),
3627 bindns::bind(async_write_handler,
3628 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3629 ioc.restart();
3630 ioc.run();
7c673cae
FG
3631 BOOST_ASIO_CHECK(called);
3632 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3633
3634 s.reset();
3635 sb.consume(sb.size());
3636 sb.sputn(write_data, sizeof(write_data));
3637 s.next_write_length(1);
3638 called = false;
3639 boost::asio::async_write(s, sb, boost::asio::transfer_at_least(10),
3640 bindns::bind(async_write_handler,
3641 _1, _2, 10, &called));
b32b8144
FG
3642 ioc.restart();
3643 ioc.run();
7c673cae
FG
3644 BOOST_ASIO_CHECK(called);
3645 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3646
3647 s.reset();
3648 sb.consume(sb.size());
3649 sb.sputn(write_data, sizeof(write_data));
3650 s.next_write_length(10);
3651 called = false;
3652 boost::asio::async_write(s, sb, boost::asio::transfer_at_least(10),
3653 bindns::bind(async_write_handler,
3654 _1, _2, 10, &called));
b32b8144
FG
3655 ioc.restart();
3656 ioc.run();
7c673cae
FG
3657 BOOST_ASIO_CHECK(called);
3658 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3659
3660 s.reset();
3661 sb.consume(sb.size());
3662 sb.sputn(write_data, sizeof(write_data));
3663 called = false;
3664 boost::asio::async_write(s, sb, boost::asio::transfer_at_least(42),
3665 bindns::bind(async_write_handler,
3666 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3667 ioc.restart();
3668 ioc.run();
7c673cae
FG
3669 BOOST_ASIO_CHECK(called);
3670 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3671
3672 s.reset();
3673 sb.consume(sb.size());
3674 sb.sputn(write_data, sizeof(write_data));
3675 s.next_write_length(1);
3676 called = false;
3677 boost::asio::async_write(s, sb, boost::asio::transfer_at_least(42),
3678 bindns::bind(async_write_handler,
3679 _1, _2, 42, &called));
b32b8144
FG
3680 ioc.restart();
3681 ioc.run();
7c673cae
FG
3682 BOOST_ASIO_CHECK(called);
3683 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3684
3685 s.reset();
3686 sb.consume(sb.size());
3687 sb.sputn(write_data, sizeof(write_data));
3688 s.next_write_length(10);
3689 called = false;
3690 boost::asio::async_write(s, sb, boost::asio::transfer_at_least(42),
3691 bindns::bind(async_write_handler,
3692 _1, _2, 50, &called));
b32b8144
FG
3693 ioc.restart();
3694 ioc.run();
7c673cae
FG
3695 BOOST_ASIO_CHECK(called);
3696 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
3697
3698 s.reset();
3699 sb.consume(sb.size());
3700 sb.sputn(write_data, sizeof(write_data));
3701 called = false;
3702 boost::asio::async_write(s, sb, boost::asio::transfer_exactly(1),
3703 bindns::bind(async_write_handler,
3704 _1, _2, 1, &called));
b32b8144
FG
3705 ioc.restart();
3706 ioc.run();
7c673cae
FG
3707 BOOST_ASIO_CHECK(called);
3708 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3709
3710 s.reset();
3711 sb.consume(sb.size());
3712 sb.sputn(write_data, sizeof(write_data));
3713 s.next_write_length(1);
3714 called = false;
3715 boost::asio::async_write(s, sb, boost::asio::transfer_exactly(1),
3716 bindns::bind(async_write_handler,
3717 _1, _2, 1, &called));
b32b8144
FG
3718 ioc.restart();
3719 ioc.run();
7c673cae
FG
3720 BOOST_ASIO_CHECK(called);
3721 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3722
3723 s.reset();
3724 sb.consume(sb.size());
3725 sb.sputn(write_data, sizeof(write_data));
3726 s.next_write_length(10);
3727 called = false;
3728 boost::asio::async_write(s, sb, boost::asio::transfer_exactly(1),
3729 bindns::bind(async_write_handler,
3730 _1, _2, 1, &called));
b32b8144
FG
3731 ioc.restart();
3732 ioc.run();
7c673cae
FG
3733 BOOST_ASIO_CHECK(called);
3734 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3735
3736 s.reset();
3737 sb.consume(sb.size());
3738 sb.sputn(write_data, sizeof(write_data));
3739 called = false;
3740 boost::asio::async_write(s, sb, boost::asio::transfer_exactly(10),
3741 bindns::bind(async_write_handler,
3742 _1, _2, 10, &called));
b32b8144
FG
3743 ioc.restart();
3744 ioc.run();
7c673cae
FG
3745 BOOST_ASIO_CHECK(called);
3746 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3747
3748 s.reset();
3749 sb.consume(sb.size());
3750 sb.sputn(write_data, sizeof(write_data));
3751 s.next_write_length(1);
3752 called = false;
3753 boost::asio::async_write(s, sb, boost::asio::transfer_exactly(10),
3754 bindns::bind(async_write_handler,
3755 _1, _2, 10, &called));
b32b8144
FG
3756 ioc.restart();
3757 ioc.run();
7c673cae
FG
3758 BOOST_ASIO_CHECK(called);
3759 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3760
3761 s.reset();
3762 sb.consume(sb.size());
3763 sb.sputn(write_data, sizeof(write_data));
3764 s.next_write_length(10);
3765 called = false;
3766 boost::asio::async_write(s, sb, boost::asio::transfer_exactly(10),
3767 bindns::bind(async_write_handler,
3768 _1, _2, 10, &called));
b32b8144
FG
3769 ioc.restart();
3770 ioc.run();
7c673cae
FG
3771 BOOST_ASIO_CHECK(called);
3772 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3773
3774 s.reset();
3775 sb.consume(sb.size());
3776 sb.sputn(write_data, sizeof(write_data));
3777 called = false;
3778 boost::asio::async_write(s, sb, boost::asio::transfer_exactly(42),
3779 bindns::bind(async_write_handler,
3780 _1, _2, 42, &called));
b32b8144
FG
3781 ioc.restart();
3782 ioc.run();
7c673cae
FG
3783 BOOST_ASIO_CHECK(called);
3784 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3785
3786 s.reset();
3787 sb.consume(sb.size());
3788 sb.sputn(write_data, sizeof(write_data));
3789 s.next_write_length(1);
3790 called = false;
3791 boost::asio::async_write(s, sb, boost::asio::transfer_exactly(42),
3792 bindns::bind(async_write_handler,
3793 _1, _2, 42, &called));
b32b8144
FG
3794 ioc.restart();
3795 ioc.run();
7c673cae
FG
3796 BOOST_ASIO_CHECK(called);
3797 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3798
3799 s.reset();
3800 sb.consume(sb.size());
3801 sb.sputn(write_data, sizeof(write_data));
3802 s.next_write_length(10);
3803 called = false;
3804 boost::asio::async_write(s, sb, boost::asio::transfer_exactly(42),
3805 bindns::bind(async_write_handler,
3806 _1, _2, 42, &called));
b32b8144
FG
3807 ioc.restart();
3808 ioc.run();
7c673cae
FG
3809 BOOST_ASIO_CHECK(called);
3810 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3811
3812 s.reset();
3813 sb.consume(sb.size());
3814 sb.sputn(write_data, sizeof(write_data));
3815 called = false;
3816 boost::asio::async_write(s, sb, old_style_transfer_all,
3817 bindns::bind(async_write_handler,
3818 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3819 ioc.restart();
3820 ioc.run();
7c673cae
FG
3821 BOOST_ASIO_CHECK(called);
3822 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3823
3824 s.reset();
3825 sb.consume(sb.size());
3826 sb.sputn(write_data, sizeof(write_data));
3827 s.next_write_length(1);
3828 called = false;
3829 boost::asio::async_write(s, sb, old_style_transfer_all,
3830 bindns::bind(async_write_handler,
3831 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3832 ioc.restart();
3833 ioc.run();
7c673cae
FG
3834 BOOST_ASIO_CHECK(called);
3835 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3836
3837 s.reset();
3838 sb.consume(sb.size());
3839 sb.sputn(write_data, sizeof(write_data));
3840 s.next_write_length(10);
3841 called = false;
3842 boost::asio::async_write(s, sb, old_style_transfer_all,
3843 bindns::bind(async_write_handler,
3844 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3845 ioc.restart();
3846 ioc.run();
7c673cae
FG
3847 BOOST_ASIO_CHECK(called);
3848 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3849
3850 s.reset();
3851 sb.consume(sb.size());
3852 sb.sputn(write_data, sizeof(write_data));
3853 called = false;
3854 boost::asio::async_write(s, sb, short_transfer,
3855 bindns::bind(async_write_handler,
3856 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3857 ioc.restart();
3858 ioc.run();
7c673cae
FG
3859 BOOST_ASIO_CHECK(called);
3860 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3861
3862 s.reset();
3863 sb.consume(sb.size());
3864 sb.sputn(write_data, sizeof(write_data));
3865 s.next_write_length(1);
3866 called = false;
3867 boost::asio::async_write(s, sb, short_transfer,
3868 bindns::bind(async_write_handler,
3869 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3870 ioc.restart();
3871 ioc.run();
7c673cae
FG
3872 BOOST_ASIO_CHECK(called);
3873 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3874
3875 s.reset();
3876 sb.consume(sb.size());
3877 sb.sputn(write_data, sizeof(write_data));
3878 s.next_write_length(10);
3879 called = false;
3880 boost::asio::async_write(s, sb, short_transfer,
3881 bindns::bind(async_write_handler,
3882 _1, _2, sizeof(write_data), &called));
b32b8144
FG
3883 ioc.restart();
3884 ioc.run();
7c673cae
FG
3885 BOOST_ASIO_CHECK(called);
3886 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3887
3888 s.reset();
3889 sb.consume(sb.size());
3890 sb.sputn(write_data, sizeof(write_data));
3891 int i = boost::asio::async_write(s, sb, short_transfer,
3892 archetypes::lazy_handler());
3893 BOOST_ASIO_CHECK(i == 42);
b32b8144
FG
3894 ioc.restart();
3895 ioc.run();
7c673cae
FG
3896 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
3897}
3898
3899BOOST_ASIO_TEST_SUITE
3900(
3901 "write",
3902 BOOST_ASIO_TEST_CASE(test_2_arg_zero_buffers_write)
b32b8144
FG
3903 BOOST_ASIO_TEST_CASE(test_2_arg_const_buffer_write)
3904 BOOST_ASIO_TEST_CASE(test_2_arg_mutable_buffer_write)
7c673cae
FG
3905 BOOST_ASIO_TEST_CASE(test_2_arg_vector_buffers_write)
3906 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_zero_buffers_write)
b32b8144
FG
3907 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_const_buffer_write)
3908 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_mutable_buffer_write)
7c673cae 3909 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_vector_buffers_write)
b32b8144
FG
3910 BOOST_ASIO_TEST_CASE(test_3_arg_const_buffer_write)
3911 BOOST_ASIO_TEST_CASE(test_3_arg_mutable_buffer_write)
7c673cae 3912 BOOST_ASIO_TEST_CASE(test_3_arg_vector_buffers_write)
b32b8144
FG
3913 BOOST_ASIO_TEST_CASE(test_4_arg_const_buffer_write)
3914 BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffer_write)
7c673cae 3915 BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_write)
b32b8144
FG
3916 BOOST_ASIO_TEST_CASE(test_3_arg_const_buffer_async_write)
3917 BOOST_ASIO_TEST_CASE(test_3_arg_mutable_buffer_async_write)
7c673cae
FG
3918 BOOST_ASIO_TEST_CASE(test_3_arg_boost_array_buffers_async_write)
3919 BOOST_ASIO_TEST_CASE(test_3_arg_std_array_buffers_async_write)
3920 BOOST_ASIO_TEST_CASE(test_3_arg_vector_buffers_async_write)
3921 BOOST_ASIO_TEST_CASE(test_3_arg_streambuf_async_write)
b32b8144
FG
3922 BOOST_ASIO_TEST_CASE(test_4_arg_const_buffer_async_write)
3923 BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffer_async_write)
7c673cae
FG
3924 BOOST_ASIO_TEST_CASE(test_4_arg_boost_array_buffers_async_write)
3925 BOOST_ASIO_TEST_CASE(test_4_arg_std_array_buffers_async_write)
3926 BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_async_write)
3927 BOOST_ASIO_TEST_CASE(test_4_arg_streambuf_async_write)
3928)