]> git.proxmox.com Git - ceph.git/blobdiff - 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
index 2f286f438a869ece195abec6b24cd8a72ee0a088..a8f4f7061e21d6d806caed92bcfc8c7ec1bf046e 100644 (file)
 // Test that header file is self-contained.
 #include <boost/asio/system_executor.hpp>
 
+#include <boost/asio/dispatch.hpp>
+#include <boost/asio/post.hpp>
 #include "unit_test.hpp"
 
+#if defined(BOOST_ASIO_HAS_BOOST_BIND)
+# include <boost/bind/bind.hpp>
+#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
+# include <functional>
+#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
+
+using namespace boost::asio;
+
+#if defined(BOOST_ASIO_HAS_BOOST_BIND)
+namespace bindns = boost;
+#else // defined(BOOST_ASIO_HAS_BOOST_BIND)
+namespace bindns = std;
+#endif
+
+void increment(boost::asio::detail::atomic_count* count)
+{
+  ++(*count);
+}
+
+void system_executor_query_test()
+{
+  BOOST_ASIO_CHECK(
+      &boost::asio::query(system_executor(),
+        boost::asio::execution::context)
+      != static_cast<const system_context*>(0));
+
+  BOOST_ASIO_CHECK(
+      boost::asio::query(system_executor(),
+        boost::asio::execution::blocking)
+      == boost::asio::execution::blocking.possibly);
+
+  BOOST_ASIO_CHECK(
+      boost::asio::query(system_executor(),
+        boost::asio::execution::blocking.possibly)
+      == boost::asio::execution::blocking.possibly);
+
+  BOOST_ASIO_CHECK(
+      boost::asio::query(system_executor(),
+        boost::asio::execution::outstanding_work)
+      == boost::asio::execution::outstanding_work.untracked);
+
+  BOOST_ASIO_CHECK(
+      boost::asio::query(system_executor(),
+        boost::asio::execution::outstanding_work.untracked)
+      == boost::asio::execution::outstanding_work.untracked);
+
+  BOOST_ASIO_CHECK(
+      boost::asio::query(system_executor(),
+        boost::asio::execution::relationship)
+      == boost::asio::execution::relationship.fork);
+
+  BOOST_ASIO_CHECK(
+      boost::asio::query(system_executor(),
+        boost::asio::execution::relationship.fork)
+      == boost::asio::execution::relationship.fork);
+
+  BOOST_ASIO_CHECK(
+      boost::asio::query(system_executor(),
+        boost::asio::execution::bulk_guarantee)
+      == boost::asio::execution::bulk_guarantee.unsequenced);
+
+  BOOST_ASIO_CHECK(
+      boost::asio::query(system_executor(),
+        boost::asio::execution::mapping)
+      == boost::asio::execution::mapping.thread);
+
+  BOOST_ASIO_CHECK(
+      boost::asio::query(system_executor(),
+        boost::asio::execution::allocator)
+      == std::allocator<void>());
+}
+
+void system_executor_execute_test()
+{
+  boost::asio::detail::atomic_count count(0);
+
+  boost::asio::execution::execute(system_executor(),
+      bindns::bind(increment, &count));
+
+  boost::asio::execution::execute(
+      boost::asio::require(system_executor(),
+        boost::asio::execution::blocking.possibly),
+      bindns::bind(increment, &count));
+
+  boost::asio::execution::execute(
+      boost::asio::require(system_executor(),
+        boost::asio::execution::blocking.always),
+      bindns::bind(increment, &count));
+
+  boost::asio::execution::execute(
+      boost::asio::require(system_executor(),
+        boost::asio::execution::blocking.never),
+      bindns::bind(increment, &count));
+
+  boost::asio::execution::execute(
+      boost::asio::require(system_executor(),
+        boost::asio::execution::blocking.never,
+        boost::asio::execution::outstanding_work.untracked),
+      bindns::bind(increment, &count));
+
+  boost::asio::execution::execute(
+      boost::asio::require(system_executor(),
+        boost::asio::execution::blocking.never,
+        boost::asio::execution::outstanding_work.untracked,
+        boost::asio::execution::relationship.fork),
+      bindns::bind(increment, &count));
+
+  boost::asio::execution::execute(
+      boost::asio::require(system_executor(),
+        boost::asio::execution::blocking.never,
+        boost::asio::execution::outstanding_work.untracked,
+        boost::asio::execution::relationship.continuation),
+      bindns::bind(increment, &count));
+
+  boost::asio::execution::execute(
+      boost::asio::prefer(
+        boost::asio::require(system_executor(),
+          boost::asio::execution::blocking.never,
+          boost::asio::execution::outstanding_work.untracked,
+          boost::asio::execution::relationship.continuation),
+        boost::asio::execution::allocator(std::allocator<void>())),
+      bindns::bind(increment, &count));
+
+  boost::asio::execution::execute(
+      boost::asio::prefer(
+        boost::asio::require(system_executor(),
+          boost::asio::execution::blocking.never,
+          boost::asio::execution::outstanding_work.untracked,
+          boost::asio::execution::relationship.continuation),
+        boost::asio::execution::allocator),
+      bindns::bind(increment, &count));
+
+  boost::asio::query(system_executor(), execution::context).join();
+
+  BOOST_ASIO_CHECK(count == 9);
+}
+
 BOOST_ASIO_TEST_SUITE
 (
   "system_executor",
-  BOOST_ASIO_TEST_CASE(null_test)
+  BOOST_ASIO_TEST_CASE(system_executor_query_test)
+  BOOST_ASIO_TEST_CASE(system_executor_execute_test)
 )