2 // buffers_iterator.cpp
3 // ~~~~~~~~~~~~~~~~~~~~
5 // Copyright (c) 2003-2017 Christopher M. Kohlhoff (chris at kohlhoff dot com)
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)
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)
16 // Test that header file is self-contained.
17 #include <boost/asio/buffers_iterator.hpp>
19 #include <boost/asio/buffer.hpp>
20 #include "unit_test.hpp"
22 #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
23 # include <boost/array.hpp>
24 #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
26 #if defined(BOOST_ASIO_HAS_STD_ARRAY)
28 #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
30 //------------------------------------------------------------------------------
32 // buffers_iterator_compile test
33 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
34 // The following test checks that all operations on the buffers_iterator compile
35 // and link correctly. Runtime failures are ignored.
37 namespace buffers_iterator_compile {
39 #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
41 #elif defined(BOOST_ASIO_HAS_STD_ARRAY)
43 #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
45 using namespace boost::asio;
51 char data1[16], data2[16];
52 const char cdata1[16] = "", cdata2[16] = "";
53 mutable_buffers_1 mb1 = buffer(data1);
54 array<mutable_buffer, 2> mb2 = {{ buffer(data1), buffer(data2) }};
55 std::vector<mutable_buffer> mb3;
56 mb3.push_back(buffer(data1));
57 const_buffers_1 cb1 = buffer(cdata1);
58 array<const_buffer, 2> cb2 = {{ buffer(cdata1), buffer(cdata2) }};
59 vector<const_buffer> cb3;
60 cb3.push_back(buffer(cdata1));
63 // buffers_iterator constructors.
65 buffers_iterator<mutable_buffers_1, char> bi1;
66 buffers_iterator<mutable_buffers_1, const char> bi2;
67 buffers_iterator<array<mutable_buffer, 2>, char> bi3;
68 buffers_iterator<array<mutable_buffer, 2>, const char> bi4;
69 buffers_iterator<vector<mutable_buffer>, char> bi5;
70 buffers_iterator<vector<mutable_buffer>, const char> bi6;
71 buffers_iterator<const_buffers_1, char> bi7;
72 buffers_iterator<const_buffers_1, const char> bi8;
73 buffers_iterator<array<const_buffer, 2>, char> bi9;
74 buffers_iterator<array<const_buffer, 2>, const char> bi10;
75 buffers_iterator<vector<const_buffer>, char> bi11;
76 buffers_iterator<vector<const_buffer>, const char> bi12;
78 buffers_iterator<mutable_buffers_1, char> bi13(
79 buffers_iterator<mutable_buffers_1, char>::begin(mb1));
80 buffers_iterator<mutable_buffers_1, const char> bi14(
81 buffers_iterator<mutable_buffers_1, const char>::begin(mb1));
82 buffers_iterator<array<mutable_buffer, 2>, char> bi15(
83 buffers_iterator<array<mutable_buffer, 2>, char>::begin(mb2));
84 buffers_iterator<array<mutable_buffer, 2>, const char> bi16(
85 buffers_iterator<array<mutable_buffer, 2>, const char>::begin(mb2));
86 buffers_iterator<vector<mutable_buffer>, char> bi17(
87 buffers_iterator<vector<mutable_buffer>, char>::begin(mb3));
88 buffers_iterator<vector<mutable_buffer>, const char> bi18(
89 buffers_iterator<vector<mutable_buffer>, const char>::begin(mb3));
90 buffers_iterator<const_buffers_1, char> bi19(
91 buffers_iterator<const_buffers_1, char>::begin(cb1));
92 buffers_iterator<const_buffers_1, const char> bi20(
93 buffers_iterator<const_buffers_1, const char>::begin(cb1));
94 buffers_iterator<array<const_buffer, 2>, char> bi21(
95 buffers_iterator<array<const_buffer, 2>, char>::begin(cb2));
96 buffers_iterator<array<const_buffer, 2>, const char> bi22(
97 buffers_iterator<array<const_buffer, 2>, const char>::begin(cb2));
98 buffers_iterator<vector<const_buffer>, char> bi23(
99 buffers_iterator<vector<const_buffer>, char>::begin(cb3));
100 buffers_iterator<vector<const_buffer>, const char> bi24(
101 buffers_iterator<vector<const_buffer>, const char>::begin(cb3));
103 // buffers_iterator member functions.
105 bi1 = buffers_iterator<mutable_buffers_1, char>::begin(mb1);
106 bi2 = buffers_iterator<mutable_buffers_1, const char>::begin(mb1);
107 bi3 = buffers_iterator<array<mutable_buffer, 2>, char>::begin(mb2);
108 bi4 = buffers_iterator<array<mutable_buffer, 2>, const char>::begin(mb2);
109 bi5 = buffers_iterator<vector<mutable_buffer>, char>::begin(mb3);
110 bi6 = buffers_iterator<vector<mutable_buffer>, const char>::begin(mb3);
111 bi7 = buffers_iterator<const_buffers_1, char>::begin(cb1);
112 bi8 = buffers_iterator<const_buffers_1, const char>::begin(cb1);
113 bi9 = buffers_iterator<array<const_buffer, 2>, char>::begin(cb2);
114 bi10 = buffers_iterator<array<const_buffer, 2>, const char>::begin(cb2);
115 bi11 = buffers_iterator<vector<const_buffer>, char>::begin(cb3);
116 bi12 = buffers_iterator<vector<const_buffer>, const char>::begin(cb3);
118 bi1 = buffers_iterator<mutable_buffers_1, char>::end(mb1);
119 bi2 = buffers_iterator<mutable_buffers_1, const char>::end(mb1);
120 bi3 = buffers_iterator<array<mutable_buffer, 2>, char>::end(mb2);
121 bi4 = buffers_iterator<array<mutable_buffer, 2>, const char>::end(mb2);
122 bi5 = buffers_iterator<vector<mutable_buffer>, char>::end(mb3);
123 bi6 = buffers_iterator<vector<mutable_buffer>, const char>::end(mb3);
124 bi7 = buffers_iterator<const_buffers_1, char>::end(cb1);
125 bi8 = buffers_iterator<const_buffers_1, const char>::end(cb1);
126 bi9 = buffers_iterator<array<const_buffer, 2>, char>::end(cb2);
127 bi10 = buffers_iterator<array<const_buffer, 2>, const char>::end(cb2);
128 bi11 = buffers_iterator<vector<const_buffer>, char>::end(cb3);
129 bi12 = buffers_iterator<vector<const_buffer>, const char>::end(cb3);
131 // buffers_iterator related functions.
133 bi1 = buffers_begin(mb1);
134 bi3 = buffers_begin(mb2);
135 bi5 = buffers_begin(mb3);
136 bi7 = buffers_begin(cb1);
137 bi9 = buffers_begin(cb2);
138 bi11 = buffers_begin(cb3);
140 bi1 = buffers_end(mb1);
141 bi3 = buffers_end(mb2);
142 bi5 = buffers_end(mb3);
143 bi7 = buffers_end(cb1);
144 bi9 = buffers_end(cb2);
145 bi11 = buffers_end(cb3);
147 // RandomAccessIterator operations.
266 (void)static_cast<std::ptrdiff_t>(bi13 - bi1);
267 (void)static_cast<std::ptrdiff_t>(bi14 - bi2);
268 (void)static_cast<std::ptrdiff_t>(bi15 - bi3);
269 (void)static_cast<std::ptrdiff_t>(bi16 - bi4);
270 (void)static_cast<std::ptrdiff_t>(bi17 - bi5);
271 (void)static_cast<std::ptrdiff_t>(bi18 - bi6);
272 (void)static_cast<std::ptrdiff_t>(bi19 - bi7);
273 (void)static_cast<std::ptrdiff_t>(bi20 - bi8);
274 (void)static_cast<std::ptrdiff_t>(bi21 - bi9);
275 (void)static_cast<std::ptrdiff_t>(bi22 - bi10);
276 (void)static_cast<std::ptrdiff_t>(bi23 - bi11);
277 (void)static_cast<std::ptrdiff_t>(bi24 - bi12);
279 catch (std::exception&)
284 } // namespace buffers_iterator_compile
286 //------------------------------------------------------------------------------
288 BOOST_ASIO_TEST_SUITE
291 BOOST_ASIO_TEST_CASE(buffers_iterator_compile::test)