diff options
Diffstat (limited to '3rdparty/asio/src/tests/unit/thread_pool.cpp')
-rw-r--r-- | 3rdparty/asio/src/tests/unit/thread_pool.cpp | 315 |
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) ) |