summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/asio/src/tests/unit/thread_pool.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/asio/src/tests/unit/thread_pool.cpp')
-rw-r--r--3rdparty/asio/src/tests/unit/thread_pool.cpp315
1 files changed, 36 insertions, 279 deletions
diff --git a/3rdparty/asio/src/tests/unit/thread_pool.cpp b/3rdparty/asio/src/tests/unit/thread_pool.cpp
index aec68023367..f65d7963c26 100644
--- a/3rdparty/asio/src/tests/unit/thread_pool.cpp
+++ b/3rdparty/asio/src/tests/unit/thread_pool.cpp
@@ -2,7 +2,7 @@
// thread_pool.cpp
// ~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2024 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)
@@ -16,23 +16,13 @@
// Test that header file is self-contained.
#include "asio/thread_pool.hpp"
+#include <functional>
#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(int* count)
{
@@ -207,11 +197,6 @@ void thread_pool_executor_query_test()
ASIO_CHECK(
asio::query(pool.executor(),
- asio::execution::bulk_guarantee)
- == asio::execution::bulk_guarantee.parallel);
-
- ASIO_CHECK(
- asio::query(pool.executor(),
asio::execution::mapping)
== asio::execution::mapping.thread);
@@ -231,287 +216,61 @@ void thread_pool_executor_execute_test()
int count = 0;
thread_pool pool(1);
- asio::execution::execute(pool.executor(),
- bindns::bind(increment, &count));
-
- asio::execution::execute(
- asio::require(pool.executor(),
- asio::execution::blocking.possibly),
- bindns::bind(increment, &count));
-
- asio::execution::execute(
- asio::require(pool.executor(),
- asio::execution::blocking.always),
- bindns::bind(increment, &count));
-
- asio::execution::execute(
- asio::require(pool.executor(),
- asio::execution::blocking.never),
- bindns::bind(increment, &count));
-
- asio::execution::execute(
- asio::require(pool.executor(),
- asio::execution::blocking.never,
- asio::execution::outstanding_work.tracked),
- bindns::bind(increment, &count));
-
- asio::execution::execute(
- asio::require(pool.executor(),
- asio::execution::blocking.never,
- asio::execution::outstanding_work.untracked),
- bindns::bind(increment, &count));
-
- asio::execution::execute(
- asio::require(pool.executor(),
- asio::execution::blocking.never,
- asio::execution::outstanding_work.untracked,
- asio::execution::relationship.fork),
- bindns::bind(increment, &count));
-
- asio::execution::execute(
- asio::require(pool.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(pool.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(pool.executor(),
- asio::execution::blocking.never,
- asio::execution::outstanding_work.untracked,
- asio::execution::relationship.continuation),
- asio::execution::allocator),
- bindns::bind(increment, &count));
-
- pool.wait();
-
- ASIO_CHECK(count == 10);
-}
-
-struct receiver
-{
- int* count_;
-
- receiver(int* count)
- : count_(count)
- {
- }
-
- receiver(const receiver& other) ASIO_NOEXCEPT
- : count_(other.count_)
- {
- }
-
-#if defined(ASIO_HAS_MOVE)
- receiver(receiver&& other) ASIO_NOEXCEPT
- : count_(other.count_)
- {
- other.count_ = 0;
- }
-#endif // defined(ASIO_HAS_MOVE)
-
- void set_value() ASIO_NOEXCEPT
- {
- ++(*count_);
- }
-
- template <typename E>
- void set_error(ASIO_MOVE_ARG(E) e) ASIO_NOEXCEPT
- {
- (void)e;
- }
-
- void set_done() ASIO_NOEXCEPT
- {
- }
-};
-
-namespace asio {
-namespace traits {
-
-#if !defined(ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
-
-template <>
-struct set_value_member<receiver, void()>
-{
- ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
- ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
- typedef void result_type;
-};
-
-#endif // !defined(ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
-
-#if !defined(ASIO_HAS_DEDUCED_SET_ERROR_MEMBER_TRAIT)
-
-template <typename E>
-struct set_error_member<receiver, E>
-{
- ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
- ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
- typedef void result_type;
-};
-
-#endif // !defined(ASIO_HAS_DEDUCED_SET_ERROR_MEMBER_TRAIT)
-
-#if !defined(ASIO_HAS_DEDUCED_SET_DONE_MEMBER_TRAIT)
-
-template <>
-struct set_done_member<receiver>
-{
- ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
- ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
- typedef void result_type;
-};
-
-#endif // !defined(ASIO_HAS_DEDUCED_SET_DONE_MEMBER_TRAIT)
-
-} // namespace traits
-} // namespace asio
-
-void thread_pool_scheduler_test()
-{
- int count = 0;
- receiver r(&count);
- thread_pool pool(1);
-
- asio::execution::submit(
- asio::execution::schedule(pool.scheduler()), r);
-
- asio::execution::submit(
- asio::require(
- asio::execution::schedule(pool.executor()),
- asio::execution::blocking.possibly), r);
-
- asio::execution::submit(
- asio::require(
- asio::execution::schedule(pool.executor()),
- asio::execution::blocking.always), r);
-
- asio::execution::submit(
- asio::require(
- asio::execution::schedule(pool.executor()),
- asio::execution::blocking.never), r);
-
- asio::execution::submit(
- asio::require(
- asio::execution::schedule(pool.executor()),
- asio::execution::blocking.never,
- asio::execution::outstanding_work.tracked), r);
-
- asio::execution::submit(
- asio::require(
- asio::execution::schedule(pool.executor()),
- asio::execution::blocking.never,
- asio::execution::outstanding_work.untracked), r);
-
- asio::execution::submit(
- asio::require(
- asio::execution::schedule(pool.executor()),
- asio::execution::blocking.never,
- asio::execution::outstanding_work.untracked,
- asio::execution::relationship.fork), r);
-
- asio::execution::submit(
- asio::require(
- asio::execution::schedule(pool.executor()),
- asio::execution::blocking.never,
- asio::execution::outstanding_work.untracked,
- asio::execution::relationship.continuation), r);
-
- asio::execution::submit(
- asio::prefer(
- asio::require(
- asio::execution::schedule(pool.executor()),
- asio::execution::blocking.never,
- asio::execution::outstanding_work.untracked,
- asio::execution::relationship.continuation),
- asio::execution::allocator(std::allocator<void>())), r);
-
- asio::execution::submit(
- asio::prefer(
- asio::require(
- asio::execution::schedule(pool.executor()),
- asio::execution::blocking.never,
- asio::execution::outstanding_work.untracked,
- asio::execution::relationship.continuation),
- asio::execution::allocator), r);
-
- pool.wait();
-
- ASIO_CHECK(count == 10);
-}
-
-void thread_pool_executor_bulk_execute_test()
-{
- int count = 0;
- thread_pool pool(1);
-
- pool.executor().bulk_execute(
- bindns::bind(increment, &count), 2);
+ pool.executor().execute(bindns::bind(increment, &count));
asio::require(pool.executor(),
- asio::execution::blocking.possibly).bulk_execute(
- bindns::bind(increment, &count), 2);
+ asio::execution::blocking.possibly
+ ).execute(bindns::bind(increment, &count));
asio::require(pool.executor(),
- asio::execution::blocking.always).bulk_execute(
- bindns::bind(increment, &count), 2);
+ asio::execution::blocking.always
+ ).execute(bindns::bind(increment, &count));
asio::require(pool.executor(),
- asio::execution::blocking.never).bulk_execute(
- bindns::bind(increment, &count), 2);
+ asio::execution::blocking.never
+ ).execute(bindns::bind(increment, &count));
asio::require(pool.executor(),
- asio::execution::blocking.never,
- asio::execution::outstanding_work.tracked).bulk_execute(
- bindns::bind(increment, &count), 2);
+ asio::execution::blocking.never,
+ asio::execution::outstanding_work.tracked
+ ).execute(bindns::bind(increment, &count));
asio::require(pool.executor(),
- asio::execution::blocking.never,
- asio::execution::outstanding_work.untracked).bulk_execute(
- bindns::bind(increment, &count), 2);
+ asio::execution::blocking.never,
+ asio::execution::outstanding_work.untracked
+ ).execute(bindns::bind(increment, &count));
asio::require(pool.executor(),
- asio::execution::blocking.never,
- asio::execution::outstanding_work.untracked,
- asio::execution::relationship.fork).bulk_execute(
- bindns::bind(increment, &count), 2);
+ asio::execution::blocking.never,
+ asio::execution::outstanding_work.untracked,
+ asio::execution::relationship.fork
+ ).execute(bindns::bind(increment, &count));
asio::require(pool.executor(),
- asio::execution::blocking.never,
- asio::execution::outstanding_work.untracked,
- asio::execution::relationship.continuation).bulk_execute(
- bindns::bind(increment, &count), 2);
-
- asio::prefer(
- asio::require(pool.executor(),
asio::execution::blocking.never,
asio::execution::outstanding_work.untracked,
- asio::execution::relationship.continuation),
- asio::execution::allocator(std::allocator<void>())).bulk_execute(
- bindns::bind(increment, &count), 2);
+ asio::execution::relationship.continuation
+ ).execute(bindns::bind(increment, &count));
asio::prefer(
- asio::require(pool.executor(),
- asio::execution::blocking.never,
- asio::execution::outstanding_work.untracked,
- asio::execution::relationship.continuation),
- asio::execution::allocator).bulk_execute(
- bindns::bind(increment, &count), 2);
+ asio::require(pool.executor(),
+ asio::execution::blocking.never,
+ asio::execution::outstanding_work.untracked,
+ asio::execution::relationship.continuation),
+ asio::execution::allocator(std::allocator<void>())
+ ).execute(bindns::bind(increment, &count));
+
+ asio::prefer(
+ asio::require(pool.executor(),
+ asio::execution::blocking.never,
+ asio::execution::outstanding_work.untracked,
+ asio::execution::relationship.continuation),
+ asio::execution::allocator
+ ).execute(bindns::bind(increment, &count));
pool.wait();
- ASIO_CHECK(count == 20);
+ ASIO_CHECK(count == 10);
}
ASIO_TEST_SUITE
@@ -521,6 +280,4 @@ ASIO_TEST_SUITE
ASIO_TEST_CASE(thread_pool_service_test)
ASIO_TEST_CASE(thread_pool_executor_query_test)
ASIO_TEST_CASE(thread_pool_executor_execute_test)
- ASIO_TEST_CASE(thread_pool_executor_bulk_execute_test)
- ASIO_TEST_CASE(thread_pool_scheduler_test)
)