diff --git a/asio/src/Makefile.mgw b/asio/src/Makefile.mgw index 86b208c7d1..e05de8755a 100644 --- a/asio/src/Makefile.mgw +++ b/asio/src/Makefile.mgw @@ -53,6 +53,8 @@ UNIT_TEST_EXES = \ tests/unit/ip/udp.exe \ tests/unit/ip/unicast.exe \ tests/unit/ip/v6_only.exe \ + tests/unit/is_buffer_sequence.exe \ + tests/unit/is_buffer_sequence_no_decltype.exe \ tests/unit/is_read_buffered.exe \ tests/unit/is_write_buffered.exe \ tests/unit/placeholders.exe \ diff --git a/asio/src/Makefile.msc b/asio/src/Makefile.msc index 8fafd15450..ed26bf7ea9 100644 --- a/asio/src/Makefile.msc +++ b/asio/src/Makefile.msc @@ -174,6 +174,8 @@ UNIT_TEST_EXES = \ tests\unit\ip\udp.exe \ tests\unit\ip\unicast.exe \ tests\unit\ip\v6_only.exe \ + tests\unit\is_buffer_sequence.exe \ + tests\unit\is_buffer_sequence_no_decltype.exe \ tests\unit\is_read_buffered.exe \ tests\unit\is_write_buffered.exe \ tests\unit\packaged_task.exe \ diff --git a/asio/src/tests/Makefile.am b/asio/src/tests/Makefile.am index 4c7ffd245b..4cbedc4484 100644 --- a/asio/src/tests/Makefile.am +++ b/asio/src/tests/Makefile.am @@ -74,6 +74,8 @@ check_PROGRAMS = \ unit/ip/udp \ unit/ip/unicast \ unit/ip/v6_only \ + unit/is_buffer_sequence \ + unit/is_buffer_sequence_no_decltype \ unit/is_read_buffered \ unit/is_write_buffered \ unit/local/basic_endpoint \ @@ -208,6 +210,8 @@ TESTS = \ unit/ip/udp \ unit/ip/unicast \ unit/ip/v6_only \ + unit/is_buffer_sequence \ + unit/is_buffer_sequence_no_decltype \ unit/is_read_buffered \ unit/is_write_buffered \ unit/local/basic_endpoint \ @@ -352,6 +356,8 @@ unit_ip_tcp_SOURCES = unit/ip/tcp.cpp unit_ip_udp_SOURCES = unit/ip/udp.cpp unit_ip_unicast_SOURCES = unit/ip/unicast.cpp unit_ip_v6_only_SOURCES = unit/ip/v6_only.cpp +unit_is_buffer_sequence_SOURCES = unit/is_buffer_sequence.cpp +unit_is_buffer_sequence_no_decltype_SOURCES = unit/is_buffer_sequence_no_decltype.cpp unit_is_read_buffered_SOURCES = unit/is_read_buffered.cpp unit_is_write_buffered_SOURCES = unit/is_write_buffered.cpp unit_local_basic_endpoint_SOURCES = unit/local/basic_endpoint.cpp diff --git a/asio/src/tests/unit/is_buffer_sequence.cpp b/asio/src/tests/unit/is_buffer_sequence.cpp new file mode 100644 index 0000000000..f58882a461 --- /dev/null +++ b/asio/src/tests/unit/is_buffer_sequence.cpp @@ -0,0 +1,119 @@ +// +// is_buffer_sequence.cpp +// ~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2019 Alexander Karzhenkov +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#include +#include "asio/buffer.hpp" +#include "unit_test.hpp" + +#ifdef ASIO_HAS_DECLTYPE +# define ASIO_HAS_DECLTYPE_MSG "ASIO_HAS_DECLTYPE is defined" +# define ASIO_HAS_DECLTYPE_FLAG true +#else +# define ASIO_HAS_DECLTYPE_MSG "ASIO_HAS_DECLTYPE is not defined" +# define ASIO_HAS_DECLTYPE_FLAG false +#endif + +using namespace asio; + +namespace { + +struct A1 +{ + mutable_buffer* begin(); + + // no "value_type" type + // no "const_iterator" type + // no "end" member function +}; + +struct B1 +{ + typedef mutable_buffer value_type; + + // bad "const_iterator" type + typedef void const_iterator; + + // no "begin" member function + // no "end" member function +}; + +struct X1 +{ + typedef mutable_buffer value_type; + typedef const mutable_buffer* const_iterator; + + const mutable_buffer* begin() const; + const mutable_buffer* end() const; +}; + +struct B2 +{ + typedef mutable_buffer value_type; + typedef void const_iterator; // (!) + + const mutable_buffer* begin() const; + const mutable_buffer* end() const; +}; + +struct B3 +{ + typedef mutable_buffer value_type; + typedef const mutable_buffer* const_iterator; + + int begin; // (!) + const mutable_buffer* end() const; +}; + +struct C1 +{ + typedef mutable_buffer value_type; + typedef const mutable_buffer* const_iterator; + + const mutable_buffer* begin() const; + int end() const; // (!) +}; + +void run() +{ + ASIO_TEST_IOSTREAM << ASIO_HAS_DECLTYPE_MSG << std::endl; + + ASIO_CHECK(!is_mutable_buffer_sequence::value); + ASIO_CHECK(!is_mutable_buffer_sequence::value); + ASIO_CHECK( is_mutable_buffer_sequence::value); + ASIO_CHECK( is_mutable_buffer_sequence::value == ASIO_HAS_DECLTYPE_FLAG); + ASIO_CHECK(!is_mutable_buffer_sequence::value); + ASIO_CHECK(!is_mutable_buffer_sequence::value); + + ASIO_CHECK(!is_mutable_buffer_sequence::value); + ASIO_CHECK(!is_const_buffer_sequence::value); + + ASIO_CHECK(!is_mutable_buffer_sequence::value); + ASIO_CHECK(!is_const_buffer_sequence::value); + + ASIO_CHECK( is_mutable_buffer_sequence::value); + ASIO_CHECK( is_const_buffer_sequence::value); + + ASIO_CHECK(!is_mutable_buffer_sequence::value); + ASIO_CHECK( is_const_buffer_sequence::value); + + ASIO_CHECK( is_mutable_buffer_sequence >::value); + ASIO_CHECK( is_const_buffer_sequence >::value); + + ASIO_CHECK(!is_mutable_buffer_sequence >::value); + ASIO_CHECK( is_const_buffer_sequence >::value); +} + +} // namespace + +ASIO_TEST_SUITE +( + "is_buffer_sequence", + ASIO_TEST_CASE(run) +) diff --git a/asio/src/tests/unit/is_buffer_sequence_no_decltype.cpp b/asio/src/tests/unit/is_buffer_sequence_no_decltype.cpp new file mode 100644 index 0000000000..1a1d580130 --- /dev/null +++ b/asio/src/tests/unit/is_buffer_sequence_no_decltype.cpp @@ -0,0 +1,12 @@ +// +// is_buffer_sequence_no_decltype.cpp +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2019 Alexander Karzhenkov +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#define ASIO_DISABLE_DECLTYPE +#include "is_buffer_sequence.cpp"