2 // random_access_handle.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/windows/random_access_handle.hpp>
19 #include <boost/asio/io_context.hpp>
20 #include "../archetypes/async_result.hpp"
21 #include "../unit_test.hpp"
23 //------------------------------------------------------------------------------
25 // windows_random_access_handle_compile test
26 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27 // The following test checks that all public member functions on the class
28 // windows::random_access_handle compile and link correctly. Runtime failures
31 namespace windows_random_access_handle_compile
{
33 void write_some_handler(const boost::system::error_code
&, std::size_t)
37 void read_some_handler(const boost::system::error_code
&, std::size_t)
43 #if defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE)
44 using namespace boost::asio
;
45 namespace win
= boost::asio::windows
;
50 char mutable_char_buffer
[128] = "";
51 const char const_char_buffer
[128] = "";
52 boost::asio::uint64_t offset
= 0;
53 archetypes::lazy_handler lazy
;
54 boost::system::error_code ec
;
56 // basic_random_access_handle constructors.
58 win::random_access_handle
handle1(ioc
);
59 HANDLE native_handle1
= INVALID_HANDLE_VALUE
;
60 win::random_access_handle
handle2(ioc
, native_handle1
);
62 #if defined(BOOST_ASIO_HAS_MOVE)
63 win::random_access_handle
handle3(std::move(handle2
));
64 #endif // defined(BOOST_ASIO_HAS_MOVE)
66 // basic_random_access_handle operators.
68 #if defined(BOOST_ASIO_HAS_MOVE)
69 handle1
= win::random_access_handle(ioc
);
70 handle1
= std::move(handle2
);
71 #endif // defined(BOOST_ASIO_HAS_MOVE)
73 // basic_io_object functions.
75 #if !defined(BOOST_ASIO_NO_DEPRECATED)
76 io_context
& ioc_ref
= handle1
.get_io_context();
78 #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
80 io_context::executor_type ex
= handle1
.get_executor();
83 // basic_handle functions.
85 win::random_access_handle::lowest_layer_type
& lowest_layer
86 = handle1
.lowest_layer();
89 const win::random_access_handle
& handle4
= handle1
;
90 const win::random_access_handle::lowest_layer_type
& lowest_layer2
91 = handle4
.lowest_layer();
94 HANDLE native_handle2
= INVALID_HANDLE_VALUE
;
95 handle1
.assign(native_handle2
);
97 bool is_open
= handle1
.is_open();
103 win::random_access_handle::native_handle_type native_handle3
104 = handle1
.native_handle();
105 (void)native_handle3
;
110 // basic_random_access_handle functions.
112 handle1
.write_some_at(offset
, buffer(mutable_char_buffer
));
113 handle1
.write_some_at(offset
, buffer(const_char_buffer
));
114 handle1
.write_some_at(offset
, buffer(mutable_char_buffer
), ec
);
115 handle1
.write_some_at(offset
, buffer(const_char_buffer
), ec
);
117 handle1
.async_write_some_at(offset
,
118 buffer(mutable_char_buffer
), &write_some_handler
);
119 handle1
.async_write_some_at(offset
,
120 buffer(const_char_buffer
), &write_some_handler
);
121 int i1
= handle1
.async_write_some_at(offset
,
122 buffer(mutable_char_buffer
), lazy
);
124 int i2
= handle1
.async_write_some_at(offset
,
125 buffer(const_char_buffer
), lazy
);
128 handle1
.read_some_at(offset
, buffer(mutable_char_buffer
));
129 handle1
.read_some_at(offset
, buffer(mutable_char_buffer
), ec
);
131 handle1
.async_read_some_at(offset
,
132 buffer(mutable_char_buffer
), &read_some_handler
);
133 int i3
= handle1
.async_read_some_at(offset
,
134 buffer(mutable_char_buffer
), lazy
);
137 catch (std::exception
&)
140 #endif // defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE)
143 } // namespace windows_random_access_handle_compile
145 //------------------------------------------------------------------------------
147 BOOST_ASIO_TEST_SUITE
149 "windows/random_access_handle",
150 BOOST_ASIO_TEST_CASE(windows_random_access_handle_compile::test
)