buffers_iterator.cpp 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. //
  2. // buffers_iterator.cpp
  3. // ~~~~~~~~~~~~~~~~~~~~
  4. //
  5. // Copyright (c) 2003-2019 Christopher M. Kohlhoff (chris at kohlhoff dot com)
  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. // Disable autolinking for unit tests.
  11. #if !defined(BOOST_ALL_NO_LIB)
  12. #define BOOST_ALL_NO_LIB 1
  13. #endif // !defined(BOOST_ALL_NO_LIB)
  14. // Test that header file is self-contained.
  15. #include <boost/asio/buffers_iterator.hpp>
  16. #include <boost/asio/buffer.hpp>
  17. #include "unit_test.hpp"
  18. #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  19. # include <boost/array.hpp>
  20. #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  21. #if defined(BOOST_ASIO_HAS_STD_ARRAY)
  22. # include <array>
  23. #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
  24. //------------------------------------------------------------------------------
  25. // buffers_iterator_compile test
  26. // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  27. // The following test checks that all operations on the buffers_iterator compile
  28. // and link correctly. Runtime failures are ignored.
  29. namespace buffers_iterator_compile {
  30. #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  31. using boost::array;
  32. #elif defined(BOOST_ASIO_HAS_STD_ARRAY)
  33. using std::array;
  34. #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  35. using std::vector;
  36. using namespace boost::asio;
  37. void test()
  38. {
  39. try
  40. {
  41. char data1[16], data2[16];
  42. const char cdata1[16] = "", cdata2[16] = "";
  43. mutable_buffer mb1 = buffer(data1);
  44. array<mutable_buffer, 2> mb2 = {{ buffer(data1), buffer(data2) }};
  45. std::vector<mutable_buffer> mb3;
  46. mb3.push_back(buffer(data1));
  47. const_buffer cb1 = buffer(cdata1);
  48. array<const_buffer, 2> cb2 = {{ buffer(cdata1), buffer(cdata2) }};
  49. vector<const_buffer> cb3;
  50. cb3.push_back(buffer(cdata1));
  51. // buffers_iterator constructors.
  52. buffers_iterator<mutable_buffer, char> bi1;
  53. buffers_iterator<mutable_buffer, const char> bi2;
  54. buffers_iterator<array<mutable_buffer, 2>, char> bi3;
  55. buffers_iterator<array<mutable_buffer, 2>, const char> bi4;
  56. buffers_iterator<vector<mutable_buffer>, char> bi5;
  57. buffers_iterator<vector<mutable_buffer>, const char> bi6;
  58. buffers_iterator<const_buffer, char> bi7;
  59. buffers_iterator<const_buffer, const char> bi8;
  60. buffers_iterator<array<const_buffer, 2>, char> bi9;
  61. buffers_iterator<array<const_buffer, 2>, const char> bi10;
  62. buffers_iterator<vector<const_buffer>, char> bi11;
  63. buffers_iterator<vector<const_buffer>, const char> bi12;
  64. buffers_iterator<mutable_buffer, char> bi13(
  65. buffers_iterator<mutable_buffer, char>::begin(mb1));
  66. buffers_iterator<mutable_buffer, const char> bi14(
  67. buffers_iterator<mutable_buffer, const char>::begin(mb1));
  68. buffers_iterator<array<mutable_buffer, 2>, char> bi15(
  69. buffers_iterator<array<mutable_buffer, 2>, char>::begin(mb2));
  70. buffers_iterator<array<mutable_buffer, 2>, const char> bi16(
  71. buffers_iterator<array<mutable_buffer, 2>, const char>::begin(mb2));
  72. buffers_iterator<vector<mutable_buffer>, char> bi17(
  73. buffers_iterator<vector<mutable_buffer>, char>::begin(mb3));
  74. buffers_iterator<vector<mutable_buffer>, const char> bi18(
  75. buffers_iterator<vector<mutable_buffer>, const char>::begin(mb3));
  76. buffers_iterator<const_buffer, char> bi19(
  77. buffers_iterator<const_buffer, char>::begin(cb1));
  78. buffers_iterator<const_buffer, const char> bi20(
  79. buffers_iterator<const_buffer, const char>::begin(cb1));
  80. buffers_iterator<array<const_buffer, 2>, char> bi21(
  81. buffers_iterator<array<const_buffer, 2>, char>::begin(cb2));
  82. buffers_iterator<array<const_buffer, 2>, const char> bi22(
  83. buffers_iterator<array<const_buffer, 2>, const char>::begin(cb2));
  84. buffers_iterator<vector<const_buffer>, char> bi23(
  85. buffers_iterator<vector<const_buffer>, char>::begin(cb3));
  86. buffers_iterator<vector<const_buffer>, const char> bi24(
  87. buffers_iterator<vector<const_buffer>, const char>::begin(cb3));
  88. // buffers_iterator member functions.
  89. bi1 = buffers_iterator<mutable_buffer, char>::begin(mb1);
  90. bi2 = buffers_iterator<mutable_buffer, const char>::begin(mb1);
  91. bi3 = buffers_iterator<array<mutable_buffer, 2>, char>::begin(mb2);
  92. bi4 = buffers_iterator<array<mutable_buffer, 2>, const char>::begin(mb2);
  93. bi5 = buffers_iterator<vector<mutable_buffer>, char>::begin(mb3);
  94. bi6 = buffers_iterator<vector<mutable_buffer>, const char>::begin(mb3);
  95. bi7 = buffers_iterator<const_buffer, char>::begin(cb1);
  96. bi8 = buffers_iterator<const_buffer, const char>::begin(cb1);
  97. bi9 = buffers_iterator<array<const_buffer, 2>, char>::begin(cb2);
  98. bi10 = buffers_iterator<array<const_buffer, 2>, const char>::begin(cb2);
  99. bi11 = buffers_iterator<vector<const_buffer>, char>::begin(cb3);
  100. bi12 = buffers_iterator<vector<const_buffer>, const char>::begin(cb3);
  101. bi1 = buffers_iterator<mutable_buffer, char>::end(mb1);
  102. bi2 = buffers_iterator<mutable_buffer, const char>::end(mb1);
  103. bi3 = buffers_iterator<array<mutable_buffer, 2>, char>::end(mb2);
  104. bi4 = buffers_iterator<array<mutable_buffer, 2>, const char>::end(mb2);
  105. bi5 = buffers_iterator<vector<mutable_buffer>, char>::end(mb3);
  106. bi6 = buffers_iterator<vector<mutable_buffer>, const char>::end(mb3);
  107. bi7 = buffers_iterator<const_buffer, char>::end(cb1);
  108. bi8 = buffers_iterator<const_buffer, const char>::end(cb1);
  109. bi9 = buffers_iterator<array<const_buffer, 2>, char>::end(cb2);
  110. bi10 = buffers_iterator<array<const_buffer, 2>, const char>::end(cb2);
  111. bi11 = buffers_iterator<vector<const_buffer>, char>::end(cb3);
  112. bi12 = buffers_iterator<vector<const_buffer>, const char>::end(cb3);
  113. // buffers_iterator related functions.
  114. bi1 = buffers_begin(mb1);
  115. bi3 = buffers_begin(mb2);
  116. bi5 = buffers_begin(mb3);
  117. bi7 = buffers_begin(cb1);
  118. bi9 = buffers_begin(cb2);
  119. bi11 = buffers_begin(cb3);
  120. bi1 = buffers_end(mb1);
  121. bi3 = buffers_end(mb2);
  122. bi5 = buffers_end(mb3);
  123. bi7 = buffers_end(cb1);
  124. bi9 = buffers_end(cb2);
  125. bi11 = buffers_end(cb3);
  126. // RandomAccessIterator operations.
  127. --bi1;
  128. --bi2;
  129. --bi3;
  130. --bi4;
  131. --bi5;
  132. --bi6;
  133. --bi7;
  134. --bi8;
  135. --bi9;
  136. --bi10;
  137. --bi11;
  138. --bi12;
  139. ++bi1;
  140. ++bi2;
  141. ++bi3;
  142. ++bi4;
  143. ++bi5;
  144. ++bi6;
  145. ++bi7;
  146. ++bi8;
  147. ++bi9;
  148. ++bi10;
  149. ++bi11;
  150. ++bi12;
  151. bi1--;
  152. bi2--;
  153. bi3--;
  154. bi4--;
  155. bi5--;
  156. bi6--;
  157. bi7--;
  158. bi8--;
  159. bi9--;
  160. bi10--;
  161. bi11--;
  162. bi12--;
  163. bi1++;
  164. bi2++;
  165. bi3++;
  166. bi4++;
  167. bi5++;
  168. bi6++;
  169. bi7++;
  170. bi8++;
  171. bi9++;
  172. bi10++;
  173. bi11++;
  174. bi12++;
  175. bi1 -= 1;
  176. bi2 -= 1;
  177. bi3 -= 1;
  178. bi4 -= 1;
  179. bi5 -= 1;
  180. bi6 -= 1;
  181. bi7 -= 1;
  182. bi8 -= 1;
  183. bi9 -= 1;
  184. bi10 -= 1;
  185. bi11 -= 1;
  186. bi12 -= 1;
  187. bi1 += 1;
  188. bi2 += 1;
  189. bi3 += 1;
  190. bi4 += 1;
  191. bi5 += 1;
  192. bi6 += 1;
  193. bi7 += 1;
  194. bi8 += 1;
  195. bi9 += 1;
  196. bi10 += 1;
  197. bi11 += 1;
  198. bi12 += 1;
  199. bi1 = bi1 - 1;
  200. bi2 = bi2 - 1;
  201. bi3 = bi3 - 1;
  202. bi4 = bi4 - 1;
  203. bi5 = bi5 - 1;
  204. bi6 = bi6 - 1;
  205. bi7 = bi7 - 1;
  206. bi8 = bi8 - 1;
  207. bi9 = bi9 - 1;
  208. bi10 = bi10 - 1;
  209. bi11 = bi11 - 1;
  210. bi12 = bi12 - 1;
  211. bi1 = bi1 + 1;
  212. bi2 = bi2 + 1;
  213. bi3 = bi3 + 1;
  214. bi4 = bi4 + 1;
  215. bi5 = bi5 + 1;
  216. bi6 = bi6 + 1;
  217. bi7 = bi7 + 1;
  218. bi8 = bi8 + 1;
  219. bi9 = bi9 + 1;
  220. bi10 = bi10 + 1;
  221. bi11 = bi11 + 1;
  222. bi12 = bi12 + 1;
  223. bi1 = (-1) + bi1;
  224. bi2 = (-1) + bi2;
  225. bi3 = (-1) + bi3;
  226. bi4 = (-1) + bi4;
  227. bi5 = (-1) + bi5;
  228. bi6 = (-1) + bi6;
  229. bi7 = (-1) + bi7;
  230. bi8 = (-1) + bi8;
  231. bi9 = (-1) + bi9;
  232. bi10 = (-1) + bi10;
  233. bi11 = (-1) + bi11;
  234. bi12 = (-1) + bi12;
  235. (void)static_cast<std::ptrdiff_t>(bi13 - bi1);
  236. (void)static_cast<std::ptrdiff_t>(bi14 - bi2);
  237. (void)static_cast<std::ptrdiff_t>(bi15 - bi3);
  238. (void)static_cast<std::ptrdiff_t>(bi16 - bi4);
  239. (void)static_cast<std::ptrdiff_t>(bi17 - bi5);
  240. (void)static_cast<std::ptrdiff_t>(bi18 - bi6);
  241. (void)static_cast<std::ptrdiff_t>(bi19 - bi7);
  242. (void)static_cast<std::ptrdiff_t>(bi20 - bi8);
  243. (void)static_cast<std::ptrdiff_t>(bi21 - bi9);
  244. (void)static_cast<std::ptrdiff_t>(bi22 - bi10);
  245. (void)static_cast<std::ptrdiff_t>(bi23 - bi11);
  246. (void)static_cast<std::ptrdiff_t>(bi24 - bi12);
  247. }
  248. catch (std::exception&)
  249. {
  250. }
  251. }
  252. } // namespace buffers_iterator_compile
  253. //------------------------------------------------------------------------------
  254. BOOST_ASIO_TEST_SUITE
  255. (
  256. "buffers_iterator",
  257. BOOST_ASIO_TEST_CASE(buffers_iterator_compile::test)
  258. )