summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/asio/src/tests/unit/execution/executor.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/asio/src/tests/unit/execution/executor.cpp')
-rw-r--r--3rdparty/asio/src/tests/unit/execution/executor.cpp184
1 files changed, 184 insertions, 0 deletions
diff --git a/3rdparty/asio/src/tests/unit/execution/executor.cpp b/3rdparty/asio/src/tests/unit/execution/executor.cpp
new file mode 100644
index 00000000000..497c5835684
--- /dev/null
+++ b/3rdparty/asio/src/tests/unit/execution/executor.cpp
@@ -0,0 +1,184 @@
+//
+// 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)
+
+// Test that header file is self-contained.
+#include "asio/execution/executor.hpp"
+
+#include "../unit_test.hpp"
+
+struct not_an_executor
+{
+};
+
+struct executor
+{
+ executor()
+ {
+ }
+
+ executor(const executor&) ASIO_NOEXCEPT
+ {
+ }
+
+#if defined(ASIO_HAS_MOVE)
+ executor(executor&&) ASIO_NOEXCEPT
+ {
+ }
+#endif // defined(ASIO_HAS_MOVE)
+
+ template <typename F>
+ void execute(ASIO_MOVE_ARG(F) f) const ASIO_NOEXCEPT
+ {
+ (void)f;
+ }
+
+ bool operator==(const executor&) const ASIO_NOEXCEPT
+ {
+ return true;
+ }
+
+ bool operator!=(const executor&) const ASIO_NOEXCEPT
+ {
+ return false;
+ }
+};
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+template <typename F>
+struct execute_member<executor, F>
+{
+ 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_EQUALITY_COMPARABLE_TRAIT)
+
+template <>
+struct equality_comparable<executor>
+{
+ ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
+ ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+void is_executor_test()
+{
+ ASIO_CHECK((
+ !asio::execution::is_executor<
+ void
+ >::value));
+
+ ASIO_CHECK((
+ !asio::execution::is_executor<
+ not_an_executor
+ >::value));
+
+ ASIO_CHECK((
+ asio::execution::is_executor<
+ executor
+ >::value));
+}
+
+void is_executor_of_test()
+{
+ ASIO_CHECK((
+ !asio::execution::is_executor_of<
+ void,
+ void(*)()
+ >::value));
+
+ ASIO_CHECK((
+ !asio::execution::is_executor_of<
+ not_an_executor,
+ void(*)()
+ >::value));
+
+ ASIO_CHECK((
+ asio::execution::is_executor_of<
+ executor,
+ void(*)()
+ >::value));
+}
+
+struct executor_with_other_shape_type
+{
+ typedef double shape_type;
+};
+
+void executor_shape_test()
+{
+ ASIO_CHECK((
+ asio::is_same<
+ asio::execution::executor_shape<executor>::type,
+ std::size_t
+ >::value));
+
+ ASIO_CHECK((
+ asio::is_same<
+ asio::execution::executor_shape<
+ executor_with_other_shape_type
+ >::type,
+ double
+ >::value));
+}
+
+struct executor_with_other_index_type
+{
+ typedef unsigned char index_type;
+};
+
+void executor_index_test()
+{
+ ASIO_CHECK((
+ asio::is_same<
+ asio::execution::executor_index<executor>::type,
+ std::size_t
+ >::value));
+
+ ASIO_CHECK((
+ asio::is_same<
+ asio::execution::executor_index<
+ executor_with_other_shape_type
+ >::type,
+ double
+ >::value));
+
+ ASIO_CHECK((
+ asio::is_same<
+ asio::execution::executor_index<
+ executor_with_other_index_type
+ >::type,
+ unsigned char
+ >::value));
+}
+
+ASIO_TEST_SUITE
+(
+ "executor",
+ ASIO_TEST_CASE(is_executor_test)
+ ASIO_TEST_CASE(is_executor_of_test)
+ ASIO_TEST_CASE(executor_shape_test)
+ ASIO_TEST_CASE(executor_index_test)
+)