]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/asio/test/system_executor.cpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / libs / asio / test / system_executor.cpp
1 //
2 // system_executor.cpp
3 // ~~~~~~~~~~~~~~~~~~~
4 //
5 // Copyright (c) 2003-2020 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
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 // Prevent link dependency on the Boost.System library.
17 #if !defined(BOOST_SYSTEM_NO_DEPRECATED)
18 #define BOOST_SYSTEM_NO_DEPRECATED
19 #endif // !defined(BOOST_SYSTEM_NO_DEPRECATED)
20
21 // Test that header file is self-contained.
22 #include <boost/asio/system_executor.hpp>
23
24 #include <boost/asio/dispatch.hpp>
25 #include <boost/asio/post.hpp>
26 #include "unit_test.hpp"
27
28 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
29 # include <boost/bind/bind.hpp>
30 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
31 # include <functional>
32 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
33
34 using namespace boost::asio;
35
36 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
37 namespace bindns = boost;
38 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
39 namespace bindns = std;
40 #endif
41
42 void increment(boost::asio::detail::atomic_count* count)
43 {
44 ++(*count);
45 }
46
47 void system_executor_query_test()
48 {
49 BOOST_ASIO_CHECK(
50 &boost::asio::query(system_executor(),
51 boost::asio::execution::context)
52 != static_cast<const system_context*>(0));
53
54 BOOST_ASIO_CHECK(
55 boost::asio::query(system_executor(),
56 boost::asio::execution::blocking)
57 == boost::asio::execution::blocking.possibly);
58
59 BOOST_ASIO_CHECK(
60 boost::asio::query(system_executor(),
61 boost::asio::execution::blocking.possibly)
62 == boost::asio::execution::blocking.possibly);
63
64 BOOST_ASIO_CHECK(
65 boost::asio::query(system_executor(),
66 boost::asio::execution::outstanding_work)
67 == boost::asio::execution::outstanding_work.untracked);
68
69 BOOST_ASIO_CHECK(
70 boost::asio::query(system_executor(),
71 boost::asio::execution::outstanding_work.untracked)
72 == boost::asio::execution::outstanding_work.untracked);
73
74 BOOST_ASIO_CHECK(
75 boost::asio::query(system_executor(),
76 boost::asio::execution::relationship)
77 == boost::asio::execution::relationship.fork);
78
79 BOOST_ASIO_CHECK(
80 boost::asio::query(system_executor(),
81 boost::asio::execution::relationship.fork)
82 == boost::asio::execution::relationship.fork);
83
84 BOOST_ASIO_CHECK(
85 boost::asio::query(system_executor(),
86 boost::asio::execution::bulk_guarantee)
87 == boost::asio::execution::bulk_guarantee.unsequenced);
88
89 BOOST_ASIO_CHECK(
90 boost::asio::query(system_executor(),
91 boost::asio::execution::mapping)
92 == boost::asio::execution::mapping.thread);
93
94 BOOST_ASIO_CHECK(
95 boost::asio::query(system_executor(),
96 boost::asio::execution::allocator)
97 == std::allocator<void>());
98 }
99
100 void system_executor_execute_test()
101 {
102 boost::asio::detail::atomic_count count(0);
103
104 boost::asio::execution::execute(system_executor(),
105 bindns::bind(increment, &count));
106
107 boost::asio::execution::execute(
108 boost::asio::require(system_executor(),
109 boost::asio::execution::blocking.possibly),
110 bindns::bind(increment, &count));
111
112 boost::asio::execution::execute(
113 boost::asio::require(system_executor(),
114 boost::asio::execution::blocking.always),
115 bindns::bind(increment, &count));
116
117 boost::asio::execution::execute(
118 boost::asio::require(system_executor(),
119 boost::asio::execution::blocking.never),
120 bindns::bind(increment, &count));
121
122 boost::asio::execution::execute(
123 boost::asio::require(system_executor(),
124 boost::asio::execution::blocking.never,
125 boost::asio::execution::outstanding_work.untracked),
126 bindns::bind(increment, &count));
127
128 boost::asio::execution::execute(
129 boost::asio::require(system_executor(),
130 boost::asio::execution::blocking.never,
131 boost::asio::execution::outstanding_work.untracked,
132 boost::asio::execution::relationship.fork),
133 bindns::bind(increment, &count));
134
135 boost::asio::execution::execute(
136 boost::asio::require(system_executor(),
137 boost::asio::execution::blocking.never,
138 boost::asio::execution::outstanding_work.untracked,
139 boost::asio::execution::relationship.continuation),
140 bindns::bind(increment, &count));
141
142 boost::asio::execution::execute(
143 boost::asio::prefer(
144 boost::asio::require(system_executor(),
145 boost::asio::execution::blocking.never,
146 boost::asio::execution::outstanding_work.untracked,
147 boost::asio::execution::relationship.continuation),
148 boost::asio::execution::allocator(std::allocator<void>())),
149 bindns::bind(increment, &count));
150
151 boost::asio::execution::execute(
152 boost::asio::prefer(
153 boost::asio::require(system_executor(),
154 boost::asio::execution::blocking.never,
155 boost::asio::execution::outstanding_work.untracked,
156 boost::asio::execution::relationship.continuation),
157 boost::asio::execution::allocator),
158 bindns::bind(increment, &count));
159
160 boost::asio::query(system_executor(), execution::context).join();
161
162 BOOST_ASIO_CHECK(count == 9);
163 }
164
165 BOOST_ASIO_TEST_SUITE
166 (
167 "system_executor",
168 BOOST_ASIO_TEST_CASE(system_executor_query_test)
169 BOOST_ASIO_TEST_CASE(system_executor_execute_test)
170 )