summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/asio/src/tests/unit/system_executor.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/asio/src/tests/unit/system_executor.cpp')
-rw-r--r--3rdparty/asio/src/tests/unit/system_executor.cpp170
1 files changed, 170 insertions, 0 deletions
diff --git a/3rdparty/asio/src/tests/unit/system_executor.cpp b/3rdparty/asio/src/tests/unit/system_executor.cpp
new file mode 100644
index 00000000000..68d9236ba89
--- /dev/null
+++ b/3rdparty/asio/src/tests/unit/system_executor.cpp
@@ -0,0 +1,170 @@
+//
+// system_executor.cpp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// 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)
+//
+
+// Disable autolinking for unit tests.
+#if !defined(BOOST_ALL_NO_LIB)
+#define BOOST_ALL_NO_LIB 1
+#endif // !defined(BOOST_ALL_NO_LIB)
+
+// Prevent link dependency on the Boost.System library.
+#if !defined(BOOST_SYSTEM_NO_DEPRECATED)
+#define BOOST_SYSTEM_NO_DEPRECATED
+#endif // !defined(BOOST_SYSTEM_NO_DEPRECATED)
+
+// Test that header file is self-contained.
+#include "asio/system_executor.hpp"
+
+#include "asio/dispatch.hpp"
+#include "asio/post.hpp"
+#include "unit_test.hpp"
+
+#if defined(ASIO_HAS_BOOST_BIND)
+# include <boost/bind/bind.hpp>
+#else // defined(ASIO_HAS_BOOST_BIND)
+# include <functional>
+#endif // defined(ASIO_HAS_BOOST_BIND)
+
+using namespace asio;
+
+#if defined(ASIO_HAS_BOOST_BIND)
+namespace bindns = boost;
+#else // defined(ASIO_HAS_BOOST_BIND)
+namespace bindns = std;
+#endif
+
+void increment(asio::detail::atomic_count* count)
+{
+ ++(*count);
+}
+
+void system_executor_query_test()
+{
+ ASIO_CHECK(
+ &asio::query(system_executor(),
+ asio::execution::context)
+ != static_cast<const system_context*>(0));
+
+ ASIO_CHECK(
+ asio::query(system_executor(),
+ asio::execution::blocking)
+ == asio::execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(system_executor(),
+ asio::execution::blocking.possibly)
+ == asio::execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(system_executor(),
+ asio::execution::outstanding_work)
+ == asio::execution::outstanding_work.untracked);
+
+ ASIO_CHECK(
+ asio::query(system_executor(),
+ asio::execution::outstanding_work.untracked)
+ == asio::execution::outstanding_work.untracked);
+
+ ASIO_CHECK(
+ asio::query(system_executor(),
+ asio::execution::relationship)
+ == asio::execution::relationship.fork);
+
+ ASIO_CHECK(
+ asio::query(system_executor(),
+ asio::execution::relationship.fork)
+ == asio::execution::relationship.fork);
+
+ ASIO_CHECK(
+ asio::query(system_executor(),
+ asio::execution::bulk_guarantee)
+ == asio::execution::bulk_guarantee.unsequenced);
+
+ ASIO_CHECK(
+ asio::query(system_executor(),
+ asio::execution::mapping)
+ == asio::execution::mapping.thread);
+
+ ASIO_CHECK(
+ asio::query(system_executor(),
+ asio::execution::allocator)
+ == std::allocator<void>());
+}
+
+void system_executor_execute_test()
+{
+ asio::detail::atomic_count count(0);
+
+ asio::execution::execute(system_executor(),
+ bindns::bind(increment, &count));
+
+ asio::execution::execute(
+ asio::require(system_executor(),
+ asio::execution::blocking.possibly),
+ bindns::bind(increment, &count));
+
+ asio::execution::execute(
+ asio::require(system_executor(),
+ asio::execution::blocking.always),
+ bindns::bind(increment, &count));
+
+ asio::execution::execute(
+ asio::require(system_executor(),
+ asio::execution::blocking.never),
+ bindns::bind(increment, &count));
+
+ asio::execution::execute(
+ asio::require(system_executor(),
+ asio::execution::blocking.never,
+ asio::execution::outstanding_work.untracked),
+ bindns::bind(increment, &count));
+
+ asio::execution::execute(
+ asio::require(system_executor(),
+ asio::execution::blocking.never,
+ asio::execution::outstanding_work.untracked,
+ asio::execution::relationship.fork),
+ bindns::bind(increment, &count));
+
+ asio::execution::execute(
+ asio::require(system_executor(),
+ asio::execution::blocking.never,
+ asio::execution::outstanding_work.untracked,
+ asio::execution::relationship.continuation),
+ bindns::bind(increment, &count));
+
+ asio::execution::execute(
+ asio::prefer(
+ asio::require(system_executor(),
+ asio::execution::blocking.never,
+ asio::execution::outstanding_work.untracked,
+ asio::execution::relationship.continuation),
+ asio::execution::allocator(std::allocator<void>())),
+ bindns::bind(increment, &count));
+
+ asio::execution::execute(
+ asio::prefer(
+ asio::require(system_executor(),
+ asio::execution::blocking.never,
+ asio::execution::outstanding_work.untracked,
+ asio::execution::relationship.continuation),
+ asio::execution::allocator),
+ bindns::bind(increment, &count));
+
+ asio::query(system_executor(), execution::context).join();
+
+ ASIO_CHECK(count == 9);
+}
+
+ASIO_TEST_SUITE
+(
+ "system_executor",
+ ASIO_TEST_CASE(system_executor_query_test)
+ ASIO_TEST_CASE(system_executor_execute_test)
+)