summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/asio/src/tests/unit/execution
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/asio/src/tests/unit/execution')
-rw-r--r--3rdparty/asio/src/tests/unit/execution/any_executor.cpp1202
-rw-r--r--3rdparty/asio/src/tests/unit/execution/blocking.cpp1921
-rw-r--r--3rdparty/asio/src/tests/unit/execution/blocking_adaptation.cpp1323
-rw-r--r--3rdparty/asio/src/tests/unit/execution/context_as.cpp147
-rw-r--r--3rdparty/asio/src/tests/unit/execution/executor.cpp106
-rw-r--r--3rdparty/asio/src/tests/unit/execution/invocable_archetype.cpp25
-rw-r--r--3rdparty/asio/src/tests/unit/execution/mapping.cpp1985
-rw-r--r--3rdparty/asio/src/tests/unit/execution/outstanding_work.cpp1252
-rw-r--r--3rdparty/asio/src/tests/unit/execution/prefer_only.cpp533
-rw-r--r--3rdparty/asio/src/tests/unit/execution/relationship.cpp1252
10 files changed, 9746 insertions, 0 deletions
diff --git a/3rdparty/asio/src/tests/unit/execution/any_executor.cpp b/3rdparty/asio/src/tests/unit/execution/any_executor.cpp
new file mode 100644
index 00000000000..3e2dabdc5a5
--- /dev/null
+++ b/3rdparty/asio/src/tests/unit/execution/any_executor.cpp
@@ -0,0 +1,1202 @@
+//
+// any_executor.cpp
+// ~~~~~~~~~~~~~~~~
+//
+// 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)
+//
+
+// 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/any_executor.hpp"
+
+#include <cstring>
+#include <functional>
+#include "asio/thread_pool.hpp"
+#include "../unit_test.hpp"
+
+using namespace asio;
+namespace bindns = std;
+
+static bool next_nothrow_new_fails = false;
+
+void* operator new(std::size_t n,
+ const std::nothrow_t&) noexcept
+{
+ if (next_nothrow_new_fails)
+ {
+ next_nothrow_new_fails = false;
+ return 0;
+ }
+ return ::operator new(n);
+}
+
+struct fat_executor
+{
+ fat_executor(int id)
+ : id_(id)
+ {
+ std::memset(data_, 0, sizeof(data_));
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ std::size_t query(execution::occupancy_t) const
+ {
+ return 1;
+ }
+
+ friend bool operator==(const fat_executor& a,
+ const fat_executor& b) noexcept
+ {
+ return a.id_ == b.id_;
+ }
+
+ friend bool operator!=(const fat_executor& a,
+ const fat_executor& b) noexcept
+ {
+ return a.id_ != b.id_;
+ }
+
+ int id_;
+ unsigned char data_[1024];
+};
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+template <typename F>
+struct execute_member<fat_executor, F>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+ typedef void result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+template <>
+struct query_member<fat_executor, execution::occupancy_t>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = false;
+ typedef std::size_t result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+template <>
+struct equality_comparable<fat_executor>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+void increment(int* count)
+{
+ ++(*count);
+}
+
+void any_executor_construction_test()
+{
+ typedef execution::any_executor<> ex_no_props_t;
+
+ typedef execution::any_executor<
+ execution::blocking_t
+ > ex_one_prop_t;
+
+ typedef execution::any_executor<
+ execution::blocking_t,
+ execution::occupancy_t
+ > ex_two_props_t;
+
+ thread_pool pool(1);
+ asio::nullptr_t null_ptr = asio::nullptr_t();
+
+ ex_two_props_t ex_two_props_1;
+
+ ASIO_CHECK(ex_two_props_1.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_1 == null_ptr);
+
+ ex_two_props_t ex_two_props_2(null_ptr);
+
+ ASIO_CHECK(ex_two_props_2.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_2 == null_ptr);
+ ASIO_CHECK(ex_two_props_2 == ex_two_props_1);
+
+ ex_two_props_t ex_two_props_3(pool.executor());
+
+ ASIO_CHECK(ex_two_props_3.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_3 != null_ptr);
+ ASIO_CHECK(ex_two_props_3 != ex_two_props_1);
+
+ ex_two_props_t ex_two_props_4(ex_two_props_1);
+
+ ASIO_CHECK(ex_two_props_4.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_4 == null_ptr);
+ ASIO_CHECK(ex_two_props_4 == ex_two_props_1);
+
+ ex_two_props_t ex_two_props_5(ex_two_props_3);
+
+ ASIO_CHECK(ex_two_props_5.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_5 != null_ptr);
+ ASIO_CHECK(ex_two_props_5 == ex_two_props_3);
+
+ ex_two_props_t ex_two_props_6 = fat_executor(1);
+
+ ASIO_CHECK(ex_two_props_6.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_6 != null_ptr);
+ ASIO_CHECK(ex_two_props_6 != ex_two_props_1);
+
+ ex_two_props_t ex_two_props_7 = fat_executor(1);
+
+ ASIO_CHECK(ex_two_props_7.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_7 != null_ptr);
+ ASIO_CHECK(ex_two_props_7 != ex_two_props_1);
+ ASIO_CHECK(ex_two_props_7 == ex_two_props_6);
+
+ ex_two_props_t ex_two_props_8 = fat_executor(2);
+
+ ASIO_CHECK(ex_two_props_8.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_8 != null_ptr);
+ ASIO_CHECK(ex_two_props_8 != ex_two_props_1);
+ ASIO_CHECK(ex_two_props_8 != ex_two_props_6);
+ ASIO_CHECK(ex_two_props_8 != ex_two_props_7);
+
+ ex_two_props_t ex_two_props_9(ex_two_props_6);
+
+ ASIO_CHECK(ex_two_props_9.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_9 != null_ptr);
+ ASIO_CHECK(ex_two_props_9 != ex_two_props_1);
+ ASIO_CHECK(ex_two_props_9 == ex_two_props_6);
+ ASIO_CHECK(ex_two_props_9 == ex_two_props_7);
+ ASIO_CHECK(ex_two_props_9 != ex_two_props_8);
+
+ ex_two_props_t ex_two_props_10(std::move(ex_two_props_1));
+
+ ASIO_CHECK(ex_two_props_10.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_10 == null_ptr);
+ ASIO_CHECK(ex_two_props_1.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_1 == null_ptr);
+
+ ex_two_props_t ex_two_props_11(std::move(ex_two_props_3));
+
+ ASIO_CHECK(ex_two_props_11.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_11 != null_ptr);
+ ASIO_CHECK(ex_two_props_3.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_3 == null_ptr);
+ ASIO_CHECK(ex_two_props_11 == ex_two_props_5);
+
+ ex_two_props_t ex_two_props_12(std::move(ex_two_props_7));
+
+ ASIO_CHECK(ex_two_props_12.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_12 != null_ptr);
+ ASIO_CHECK(ex_two_props_7.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_7 == null_ptr);
+ ASIO_CHECK(ex_two_props_12 == ex_two_props_6);
+ ASIO_CHECK(ex_two_props_12 != ex_two_props_8);
+
+ ex_one_prop_t ex_one_prop_1;
+
+ ASIO_CHECK(ex_one_prop_1.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_1 == null_ptr);
+
+ ex_one_prop_t ex_one_prop_2(null_ptr);
+
+ ASIO_CHECK(ex_one_prop_2.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_2 == null_ptr);
+ ASIO_CHECK(ex_one_prop_2 == ex_one_prop_1);
+
+ ex_one_prop_t ex_one_prop_3(pool.executor());
+
+ ASIO_CHECK(ex_one_prop_3.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_3 != null_ptr);
+ ASIO_CHECK(ex_one_prop_3 != ex_one_prop_1);
+
+ ex_one_prop_t ex_one_prop_4(ex_one_prop_1);
+
+ ASIO_CHECK(ex_one_prop_4.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_4 == null_ptr);
+ ASIO_CHECK(ex_one_prop_4 == ex_one_prop_1);
+
+ ex_one_prop_t ex_one_prop_5(ex_one_prop_3);
+
+ ASIO_CHECK(ex_one_prop_5.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_5 != null_ptr);
+ ASIO_CHECK(ex_one_prop_5 == ex_one_prop_3);
+
+ ex_one_prop_t ex_one_prop_6 = fat_executor(1);
+
+ ASIO_CHECK(ex_one_prop_6.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_6 != null_ptr);
+ ASIO_CHECK(ex_one_prop_6 != ex_one_prop_1);
+
+ ex_one_prop_t ex_one_prop_7 = fat_executor(1);
+
+ ASIO_CHECK(ex_one_prop_7.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_7 != null_ptr);
+ ASIO_CHECK(ex_one_prop_7 != ex_one_prop_1);
+ ASIO_CHECK(ex_one_prop_7 == ex_one_prop_6);
+
+ ex_one_prop_t ex_one_prop_8 = fat_executor(2);
+
+ ASIO_CHECK(ex_one_prop_8.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_8 != null_ptr);
+ ASIO_CHECK(ex_one_prop_8 != ex_one_prop_1);
+ ASIO_CHECK(ex_one_prop_8 != ex_one_prop_6);
+ ASIO_CHECK(ex_one_prop_8 != ex_one_prop_7);
+
+ ex_one_prop_t ex_one_prop_9(ex_one_prop_6);
+
+ ASIO_CHECK(ex_one_prop_9.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_9 != null_ptr);
+ ASIO_CHECK(ex_one_prop_9 != ex_one_prop_1);
+ ASIO_CHECK(ex_one_prop_9 == ex_one_prop_6);
+ ASIO_CHECK(ex_one_prop_9 == ex_one_prop_7);
+ ASIO_CHECK(ex_one_prop_9 != ex_one_prop_8);
+
+ ex_one_prop_t ex_one_prop_10(std::move(ex_one_prop_1));
+
+ ASIO_CHECK(ex_one_prop_10.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_10 == null_ptr);
+ ASIO_CHECK(ex_one_prop_1.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_1 == null_ptr);
+
+ ex_one_prop_t ex_one_prop_11(std::move(ex_one_prop_3));
+
+ ASIO_CHECK(ex_one_prop_11.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_11 != null_ptr);
+ ASIO_CHECK(ex_one_prop_3.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_3 == null_ptr);
+ ASIO_CHECK(ex_one_prop_11 == ex_one_prop_5);
+
+ ex_one_prop_t ex_one_prop_12(std::move(ex_one_prop_7));
+
+ ASIO_CHECK(ex_one_prop_12.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_12 != null_ptr);
+ ASIO_CHECK(ex_one_prop_7.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_7 == null_ptr);
+ ASIO_CHECK(ex_one_prop_12 == ex_one_prop_6);
+ ASIO_CHECK(ex_one_prop_12 != ex_one_prop_8);
+
+ ex_one_prop_t ex_one_prop_13(ex_two_props_1);
+
+ ASIO_CHECK(ex_one_prop_13.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_13 == null_ptr);
+
+ ex_one_prop_t ex_one_prop_14(ex_two_props_5);
+
+ ASIO_CHECK(ex_one_prop_14.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_14 != null_ptr);
+
+ ex_one_prop_t ex_one_prop_15(ex_two_props_9);
+
+ ASIO_CHECK(ex_one_prop_15.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_15 != null_ptr);
+
+ ex_no_props_t ex_no_props_1;
+
+ ASIO_CHECK(ex_no_props_1.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_1 == null_ptr);
+
+ ex_no_props_t ex_no_props_2(null_ptr);
+
+ ASIO_CHECK(ex_no_props_2.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_2 == null_ptr);
+ ASIO_CHECK(ex_no_props_2 == ex_no_props_1);
+
+ ex_no_props_t ex_no_props_3(pool.executor());
+
+ ASIO_CHECK(ex_no_props_3.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_3 != null_ptr);
+ ASIO_CHECK(ex_no_props_3 != ex_no_props_1);
+
+ ex_no_props_t ex_no_props_4(ex_no_props_1);
+
+ ASIO_CHECK(ex_no_props_4.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_4 == null_ptr);
+ ASIO_CHECK(ex_no_props_4 == ex_no_props_1);
+
+ ex_no_props_t ex_no_props_5(ex_no_props_3);
+
+ ASIO_CHECK(ex_no_props_5.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_5 != null_ptr);
+ ASIO_CHECK(ex_no_props_5 == ex_no_props_3);
+
+ ex_no_props_t ex_no_props_6 = fat_executor(1);
+
+ ASIO_CHECK(ex_no_props_6.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_6 != null_ptr);
+ ASIO_CHECK(ex_no_props_6 != ex_no_props_1);
+
+ ex_no_props_t ex_no_props_7 = fat_executor(1);
+
+ ASIO_CHECK(ex_no_props_7.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_7 != null_ptr);
+ ASIO_CHECK(ex_no_props_7 != ex_no_props_1);
+ ASIO_CHECK(ex_no_props_7 == ex_no_props_6);
+
+ ex_no_props_t ex_no_props_8 = fat_executor(2);
+
+ ASIO_CHECK(ex_no_props_8.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_8 != null_ptr);
+ ASIO_CHECK(ex_no_props_8 != ex_no_props_1);
+ ASIO_CHECK(ex_no_props_8 != ex_no_props_6);
+ ASIO_CHECK(ex_no_props_8 != ex_no_props_7);
+
+ ex_no_props_t ex_no_props_9(ex_no_props_6);
+
+ ASIO_CHECK(ex_no_props_9.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_9 != null_ptr);
+ ASIO_CHECK(ex_no_props_9 != ex_no_props_1);
+ ASIO_CHECK(ex_no_props_9 == ex_no_props_6);
+ ASIO_CHECK(ex_no_props_9 == ex_no_props_7);
+ ASIO_CHECK(ex_no_props_9 != ex_no_props_8);
+
+ ex_no_props_t ex_no_props_10(std::move(ex_no_props_1));
+
+ ASIO_CHECK(ex_no_props_10.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_10 == null_ptr);
+ ASIO_CHECK(ex_no_props_1.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_1 == null_ptr);
+
+ ex_no_props_t ex_no_props_11(std::move(ex_no_props_3));
+
+ ASIO_CHECK(ex_no_props_11.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_11 != null_ptr);
+ ASIO_CHECK(ex_no_props_3.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_3 == null_ptr);
+ ASIO_CHECK(ex_no_props_11 == ex_no_props_5);
+
+ ex_no_props_t ex_no_props_12(std::move(ex_no_props_7));
+
+ ASIO_CHECK(ex_no_props_12.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_12 != null_ptr);
+ ASIO_CHECK(ex_no_props_7.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_7 == null_ptr);
+ ASIO_CHECK(ex_no_props_12 == ex_no_props_6);
+ ASIO_CHECK(ex_no_props_12 != ex_no_props_8);
+
+ ex_no_props_t ex_no_props_13(ex_two_props_1);
+
+ ASIO_CHECK(ex_no_props_13.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_13 == null_ptr);
+
+ ex_no_props_t ex_no_props_14(ex_two_props_5);
+
+ ASIO_CHECK(ex_no_props_14.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_14 != null_ptr);
+
+ ex_no_props_t ex_no_props_15(ex_two_props_9);
+
+ ASIO_CHECK(ex_no_props_15.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_15 != null_ptr);
+
+ ex_no_props_t ex_no_props_16(ex_one_prop_1);
+
+ ASIO_CHECK(ex_no_props_16.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_16 == null_ptr);
+
+ ex_no_props_t ex_no_props_17(ex_one_prop_5);
+
+ ASIO_CHECK(ex_no_props_17.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_17 != null_ptr);
+
+ ex_no_props_t ex_no_props_18(ex_one_prop_9);
+
+ ASIO_CHECK(ex_no_props_18.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_18 != null_ptr);
+}
+
+void any_executor_nothrow_construction_test()
+{
+ typedef execution::any_executor<> ex_no_props_t;
+
+ typedef execution::any_executor<
+ execution::blocking_t
+ > ex_one_prop_t;
+
+ typedef execution::any_executor<
+ execution::blocking_t,
+ execution::occupancy_t
+ > ex_two_props_t;
+
+ thread_pool pool(1);
+ asio::nullptr_t null_ptr = asio::nullptr_t();
+
+ ex_two_props_t ex_two_props_1;
+
+ ASIO_CHECK(ex_two_props_1.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_1 == null_ptr);
+
+ ex_two_props_t ex_two_props_2(null_ptr);
+
+ ASIO_CHECK(ex_two_props_2.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_2 == null_ptr);
+ ASIO_CHECK(ex_two_props_2 == ex_two_props_1);
+
+ ex_two_props_t ex_two_props_3(std::nothrow, pool.executor());
+
+ ASIO_CHECK(ex_two_props_3.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_3 != null_ptr);
+ ASIO_CHECK(ex_two_props_3 != ex_two_props_1);
+
+ ex_two_props_t ex_two_props_4(std::nothrow, ex_two_props_1);
+
+ ASIO_CHECK(ex_two_props_4.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_4 == null_ptr);
+ ASIO_CHECK(ex_two_props_4 == ex_two_props_1);
+
+ ex_two_props_t ex_two_props_5(std::nothrow, ex_two_props_3);
+
+ ASIO_CHECK(ex_two_props_5.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_5 != null_ptr);
+ ASIO_CHECK(ex_two_props_5 == ex_two_props_3);
+
+ ex_two_props_t ex_two_props_6(std::nothrow, fat_executor(1));
+
+ ASIO_CHECK(ex_two_props_6.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_6 != null_ptr);
+ ASIO_CHECK(ex_two_props_6 != ex_two_props_1);
+
+ ex_two_props_t ex_two_props_7(std::nothrow, fat_executor(1));
+
+ ASIO_CHECK(ex_two_props_7.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_7 != null_ptr);
+ ASIO_CHECK(ex_two_props_7 != ex_two_props_1);
+ ASIO_CHECK(ex_two_props_7 == ex_two_props_6);
+
+ ex_two_props_t ex_two_props_8(std::nothrow, fat_executor(2));
+
+ ASIO_CHECK(ex_two_props_8.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_8 != null_ptr);
+ ASIO_CHECK(ex_two_props_8 != ex_two_props_1);
+ ASIO_CHECK(ex_two_props_8 != ex_two_props_6);
+ ASIO_CHECK(ex_two_props_8 != ex_two_props_7);
+
+ ex_two_props_t ex_two_props_9(std::nothrow, ex_two_props_6);
+
+ ASIO_CHECK(ex_two_props_9.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_9 != null_ptr);
+ ASIO_CHECK(ex_two_props_9 != ex_two_props_1);
+ ASIO_CHECK(ex_two_props_9 == ex_two_props_6);
+ ASIO_CHECK(ex_two_props_9 == ex_two_props_7);
+ ASIO_CHECK(ex_two_props_9 != ex_two_props_8);
+
+ ex_two_props_t ex_two_props_10(std::nothrow, std::move(ex_two_props_1));
+
+ ASIO_CHECK(ex_two_props_10.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_10 == null_ptr);
+ ASIO_CHECK(ex_two_props_1.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_1 == null_ptr);
+
+ ex_two_props_t ex_two_props_11(std::nothrow, std::move(ex_two_props_3));
+
+ ASIO_CHECK(ex_two_props_11.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_11 != null_ptr);
+ ASIO_CHECK(ex_two_props_3.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_3 == null_ptr);
+ ASIO_CHECK(ex_two_props_11 == ex_two_props_5);
+
+ ex_two_props_t ex_two_props_12(std::nothrow, std::move(ex_two_props_7));
+
+ ASIO_CHECK(ex_two_props_12.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_12 != null_ptr);
+ ASIO_CHECK(ex_two_props_7.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_7 == null_ptr);
+ ASIO_CHECK(ex_two_props_12 == ex_two_props_6);
+ ASIO_CHECK(ex_two_props_12 != ex_two_props_8);
+
+ next_nothrow_new_fails = true;
+ ex_two_props_t ex_two_props_13(std::nothrow, fat_executor(3));
+
+ ASIO_CHECK(ex_two_props_13.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_13 == null_ptr);
+ ASIO_CHECK(ex_two_props_13 == ex_two_props_1);
+
+ ex_one_prop_t ex_one_prop_1;
+
+ ASIO_CHECK(ex_one_prop_1.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_1 == null_ptr);
+
+ ex_one_prop_t ex_one_prop_2(null_ptr);
+
+ ASIO_CHECK(ex_one_prop_2.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_2 == null_ptr);
+ ASIO_CHECK(ex_one_prop_2 == ex_one_prop_1);
+
+ ex_one_prop_t ex_one_prop_3(std::nothrow, pool.executor());
+
+ ASIO_CHECK(ex_one_prop_3.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_3 != null_ptr);
+ ASIO_CHECK(ex_one_prop_3 != ex_one_prop_1);
+
+ ex_one_prop_t ex_one_prop_4(std::nothrow, ex_one_prop_1);
+
+ ASIO_CHECK(ex_one_prop_4.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_4 == null_ptr);
+ ASIO_CHECK(ex_one_prop_4 == ex_one_prop_1);
+
+ ex_one_prop_t ex_one_prop_5(std::nothrow, ex_one_prop_3);
+
+ ASIO_CHECK(ex_one_prop_5.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_5 != null_ptr);
+ ASIO_CHECK(ex_one_prop_5 == ex_one_prop_3);
+
+ ex_one_prop_t ex_one_prop_6 = fat_executor(1);
+
+ ASIO_CHECK(ex_one_prop_6.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_6 != null_ptr);
+ ASIO_CHECK(ex_one_prop_6 != ex_one_prop_1);
+
+ ex_one_prop_t ex_one_prop_7(std::nothrow, fat_executor(1));
+
+ ASIO_CHECK(ex_one_prop_7.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_7 != null_ptr);
+ ASIO_CHECK(ex_one_prop_7 != ex_one_prop_1);
+ ASIO_CHECK(ex_one_prop_7 == ex_one_prop_6);
+
+ ex_one_prop_t ex_one_prop_8(std::nothrow, fat_executor(2));
+
+ ASIO_CHECK(ex_one_prop_8.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_8 != null_ptr);
+ ASIO_CHECK(ex_one_prop_8 != ex_one_prop_1);
+ ASIO_CHECK(ex_one_prop_8 != ex_one_prop_6);
+ ASIO_CHECK(ex_one_prop_8 != ex_one_prop_7);
+
+ ex_one_prop_t ex_one_prop_9(std::nothrow, ex_one_prop_6);
+
+ ASIO_CHECK(ex_one_prop_9.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_9 != null_ptr);
+ ASIO_CHECK(ex_one_prop_9 != ex_one_prop_1);
+ ASIO_CHECK(ex_one_prop_9 == ex_one_prop_6);
+ ASIO_CHECK(ex_one_prop_9 == ex_one_prop_7);
+ ASIO_CHECK(ex_one_prop_9 != ex_one_prop_8);
+
+ ex_one_prop_t ex_one_prop_10(std::nothrow, std::move(ex_one_prop_1));
+
+ ASIO_CHECK(ex_one_prop_10.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_10 == null_ptr);
+ ASIO_CHECK(ex_one_prop_1.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_1 == null_ptr);
+
+ ex_one_prop_t ex_one_prop_11(std::nothrow, std::move(ex_one_prop_3));
+
+ ASIO_CHECK(ex_one_prop_11.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_11 != null_ptr);
+ ASIO_CHECK(ex_one_prop_3.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_3 == null_ptr);
+ ASIO_CHECK(ex_one_prop_11 == ex_one_prop_5);
+
+ ex_one_prop_t ex_one_prop_12(std::nothrow, std::move(ex_one_prop_7));
+
+ ASIO_CHECK(ex_one_prop_12.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_12 != null_ptr);
+ ASIO_CHECK(ex_one_prop_7.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_7 == null_ptr);
+ ASIO_CHECK(ex_one_prop_12 == ex_one_prop_6);
+ ASIO_CHECK(ex_one_prop_12 != ex_one_prop_8);
+
+ ex_one_prop_t ex_one_prop_13(std::nothrow, ex_two_props_1);
+
+ ASIO_CHECK(ex_one_prop_13.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_13 == null_ptr);
+
+ ex_one_prop_t ex_one_prop_14(std::nothrow, ex_two_props_5);
+
+ ASIO_CHECK(ex_one_prop_14.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_14 != null_ptr);
+
+ ex_one_prop_t ex_one_prop_15(std::nothrow, ex_two_props_9);
+
+ ASIO_CHECK(ex_one_prop_15.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_15 != null_ptr);
+
+ next_nothrow_new_fails = true;
+ ex_one_prop_t ex_one_prop_16(std::nothrow, fat_executor(3));
+
+ ASIO_CHECK(ex_one_prop_16.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_16 == null_ptr);
+ ASIO_CHECK(ex_one_prop_16 == ex_one_prop_1);
+
+ ex_no_props_t ex_no_props_1;
+
+ ASIO_CHECK(ex_no_props_1.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_1 == null_ptr);
+
+ ex_no_props_t ex_no_props_2(null_ptr);
+
+ ASIO_CHECK(ex_no_props_2.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_2 == null_ptr);
+ ASIO_CHECK(ex_no_props_2 == ex_no_props_1);
+
+ ex_no_props_t ex_no_props_3(std::nothrow, pool.executor());
+
+ ASIO_CHECK(ex_no_props_3.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_3 != null_ptr);
+ ASIO_CHECK(ex_no_props_3 != ex_no_props_1);
+
+ ex_no_props_t ex_no_props_4(std::nothrow, ex_no_props_1);
+
+ ASIO_CHECK(ex_no_props_4.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_4 == null_ptr);
+ ASIO_CHECK(ex_no_props_4 == ex_no_props_1);
+
+ ex_no_props_t ex_no_props_5(std::nothrow, ex_no_props_3);
+
+ ASIO_CHECK(ex_no_props_5.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_5 != null_ptr);
+ ASIO_CHECK(ex_no_props_5 == ex_no_props_3);
+
+ ex_no_props_t ex_no_props_6(std::nothrow, fat_executor(1));
+
+ ASIO_CHECK(ex_no_props_6.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_6 != null_ptr);
+ ASIO_CHECK(ex_no_props_6 != ex_no_props_1);
+
+ ex_no_props_t ex_no_props_7(std::nothrow, fat_executor(1));
+
+ ASIO_CHECK(ex_no_props_7.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_7 != null_ptr);
+ ASIO_CHECK(ex_no_props_7 != ex_no_props_1);
+ ASIO_CHECK(ex_no_props_7 == ex_no_props_6);
+
+ ex_no_props_t ex_no_props_8(std::nothrow, fat_executor(2));
+
+ ASIO_CHECK(ex_no_props_8.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_8 != null_ptr);
+ ASIO_CHECK(ex_no_props_8 != ex_no_props_1);
+ ASIO_CHECK(ex_no_props_8 != ex_no_props_6);
+ ASIO_CHECK(ex_no_props_8 != ex_no_props_7);
+
+ ex_no_props_t ex_no_props_9(std::nothrow, ex_no_props_6);
+
+ ASIO_CHECK(ex_no_props_9.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_9 != null_ptr);
+ ASIO_CHECK(ex_no_props_9 != ex_no_props_1);
+ ASIO_CHECK(ex_no_props_9 == ex_no_props_6);
+ ASIO_CHECK(ex_no_props_9 == ex_no_props_7);
+ ASIO_CHECK(ex_no_props_9 != ex_no_props_8);
+
+ ex_no_props_t ex_no_props_10(std::nothrow, std::move(ex_no_props_1));
+
+ ASIO_CHECK(ex_no_props_10.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_10 == null_ptr);
+ ASIO_CHECK(ex_no_props_1.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_1 == null_ptr);
+
+ ex_no_props_t ex_no_props_11(std::nothrow, std::move(ex_no_props_3));
+
+ ASIO_CHECK(ex_no_props_11.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_11 != null_ptr);
+ ASIO_CHECK(ex_no_props_3.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_3 == null_ptr);
+ ASIO_CHECK(ex_no_props_11 == ex_no_props_5);
+
+ ex_no_props_t ex_no_props_12(std::nothrow, std::move(ex_no_props_7));
+
+ ASIO_CHECK(ex_no_props_12.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_12 != null_ptr);
+ ASIO_CHECK(ex_no_props_7.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_7 == null_ptr);
+ ASIO_CHECK(ex_no_props_12 == ex_no_props_6);
+ ASIO_CHECK(ex_no_props_12 != ex_no_props_8);
+
+ ex_no_props_t ex_no_props_13(std::nothrow, ex_two_props_1);
+
+ ASIO_CHECK(ex_no_props_13.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_13 == null_ptr);
+
+ ex_no_props_t ex_no_props_14(std::nothrow, ex_two_props_5);
+
+ ASIO_CHECK(ex_no_props_14.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_14 != null_ptr);
+
+ ex_no_props_t ex_no_props_15(std::nothrow, ex_two_props_9);
+
+ ASIO_CHECK(ex_no_props_15.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_15 != null_ptr);
+
+ ex_no_props_t ex_no_props_16(std::nothrow, ex_one_prop_1);
+
+ ASIO_CHECK(ex_no_props_16.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_16 == null_ptr);
+
+ ex_no_props_t ex_no_props_17(std::nothrow, ex_one_prop_5);
+
+ ASIO_CHECK(ex_no_props_17.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_17 != null_ptr);
+
+ ex_no_props_t ex_no_props_18(std::nothrow, ex_one_prop_9);
+
+ ASIO_CHECK(ex_no_props_18.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_18 != null_ptr);
+
+ next_nothrow_new_fails = true;
+ ex_no_props_t ex_no_props_19(std::nothrow, fat_executor(3));
+
+ ASIO_CHECK(ex_no_props_19.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_19 == null_ptr);
+ ASIO_CHECK(ex_no_props_19 == ex_no_props_1);
+}
+
+void any_executor_assignment_test()
+{
+ typedef execution::any_executor<> ex_no_props_t;
+
+ typedef execution::any_executor<
+ execution::blocking_t
+ > ex_one_prop_t;
+
+ typedef execution::any_executor<
+ execution::blocking_t,
+ execution::occupancy_t
+ > ex_two_props_t;
+
+ thread_pool pool(1);
+ asio::nullptr_t null_ptr = asio::nullptr_t();
+
+ ex_two_props_t ex_two_props_1;
+
+ ex_two_props_t ex_two_props_2;
+ ex_two_props_2 = null_ptr;
+
+ ASIO_CHECK(ex_two_props_2.target<void>() == 0);
+
+ ex_two_props_t ex_two_props_3;
+ ex_two_props_3 = pool.executor();
+
+ ASIO_CHECK(ex_two_props_3.target<void>() != 0);
+
+ ex_two_props_t ex_two_props_4;
+ ex_two_props_4 = ex_two_props_1;
+
+ ASIO_CHECK(ex_two_props_4.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_4 == ex_two_props_1);
+
+ ex_two_props_4 = ex_two_props_3;
+
+ ASIO_CHECK(ex_two_props_4.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_4 == ex_two_props_3);
+
+ ex_two_props_t ex_two_props_5;
+ ex_two_props_5 = fat_executor(1);
+
+ ASIO_CHECK(ex_two_props_5.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_5 != null_ptr);
+ ASIO_CHECK(ex_two_props_5 != ex_two_props_1);
+
+ ex_two_props_t ex_two_props_6;
+ ex_two_props_6 = fat_executor(1);
+
+ ASIO_CHECK(ex_two_props_6.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_6 != null_ptr);
+ ASIO_CHECK(ex_two_props_6 != ex_two_props_1);
+ ASIO_CHECK(ex_two_props_6 == ex_two_props_5);
+
+ ex_two_props_6 = fat_executor(2);
+
+ ASIO_CHECK(ex_two_props_6.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_6 != null_ptr);
+ ASIO_CHECK(ex_two_props_6 != ex_two_props_1);
+ ASIO_CHECK(ex_two_props_6 != ex_two_props_5);
+
+ ex_two_props_t ex_two_props_7;
+ ex_two_props_7 = ex_two_props_5;
+
+ ASIO_CHECK(ex_two_props_7.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_7 != null_ptr);
+ ASIO_CHECK(ex_two_props_7 != ex_two_props_1);
+ ASIO_CHECK(ex_two_props_7 == ex_two_props_5);
+ ASIO_CHECK(ex_two_props_7 != ex_two_props_6);
+
+ ex_two_props_t ex_two_props_8;
+ ex_two_props_8 = std::move(ex_two_props_1);
+
+ ASIO_CHECK(ex_two_props_8.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_1.target<void>() == 0);
+
+ ex_two_props_8 = std::move(ex_two_props_3);
+
+ ASIO_CHECK(ex_two_props_8.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_3.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_8 == ex_two_props_4);
+
+ ex_two_props_8 = std::move(ex_two_props_5);
+
+ ASIO_CHECK(ex_two_props_8.target<void>() != 0);
+ ASIO_CHECK(ex_two_props_5.target<void>() == 0);
+ ASIO_CHECK(ex_two_props_8 == ex_two_props_7);
+
+ ex_one_prop_t ex_one_prop_1;
+
+ ex_one_prop_t ex_one_prop_2;
+ ex_one_prop_2 = null_ptr;
+
+ ASIO_CHECK(ex_one_prop_2.target<void>() == 0);
+
+ ex_one_prop_t ex_one_prop_3;
+ ex_one_prop_3 = pool.executor();
+
+ ASIO_CHECK(ex_one_prop_3.target<void>() != 0);
+
+ ex_one_prop_t ex_one_prop_4;
+ ex_one_prop_4 = ex_one_prop_1;
+
+ ASIO_CHECK(ex_one_prop_4.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_4 == ex_one_prop_1);
+
+ ex_one_prop_4 = ex_one_prop_3;
+
+ ASIO_CHECK(ex_one_prop_4.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_4 == ex_one_prop_3);
+
+ ex_one_prop_t ex_one_prop_5;
+ ex_one_prop_5 = fat_executor(1);
+
+ ASIO_CHECK(ex_one_prop_5.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_5 != null_ptr);
+ ASIO_CHECK(ex_one_prop_5 != ex_one_prop_1);
+
+ ex_one_prop_t ex_one_prop_6;
+ ex_one_prop_6 = fat_executor(1);
+
+ ASIO_CHECK(ex_one_prop_6.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_6 != null_ptr);
+ ASIO_CHECK(ex_one_prop_6 != ex_one_prop_1);
+ ASIO_CHECK(ex_one_prop_6 == ex_one_prop_5);
+
+ ex_one_prop_6 = fat_executor(2);
+
+ ASIO_CHECK(ex_one_prop_6.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_6 != null_ptr);
+ ASIO_CHECK(ex_one_prop_6 != ex_one_prop_1);
+ ASIO_CHECK(ex_one_prop_6 != ex_one_prop_5);
+
+ ex_one_prop_t ex_one_prop_7;
+ ex_one_prop_7 = ex_one_prop_5;
+
+ ASIO_CHECK(ex_one_prop_7.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_7 != null_ptr);
+ ASIO_CHECK(ex_one_prop_7 != ex_one_prop_1);
+ ASIO_CHECK(ex_one_prop_7 == ex_one_prop_5);
+ ASIO_CHECK(ex_one_prop_7 != ex_one_prop_6);
+
+ ex_one_prop_t ex_one_prop_8;
+ ex_one_prop_8 = std::move(ex_one_prop_1);
+
+ ASIO_CHECK(ex_one_prop_8.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_1.target<void>() == 0);
+
+ ex_one_prop_8 = std::move(ex_one_prop_3);
+
+ ASIO_CHECK(ex_one_prop_8.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_3.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_8 == ex_one_prop_4);
+
+ ex_one_prop_8 = std::move(ex_one_prop_5);
+
+ ASIO_CHECK(ex_one_prop_8.target<void>() != 0);
+ ASIO_CHECK(ex_one_prop_5.target<void>() == 0);
+ ASIO_CHECK(ex_one_prop_8 == ex_one_prop_7);
+
+ ex_one_prop_t ex_one_prop_9;
+ ex_one_prop_9 = ex_two_props_1;
+
+ ASIO_CHECK(ex_one_prop_9.target<void>() == 0);
+
+ ex_one_prop_9 = ex_two_props_4;
+
+ ASIO_CHECK(ex_one_prop_9.target<void>() != 0);
+
+ ex_one_prop_9 = ex_two_props_7;
+
+ ASIO_CHECK(ex_one_prop_9.target<void>() != 0);
+
+ ex_no_props_t ex_no_props_1;
+
+ ex_no_props_t ex_no_props_2;
+ ex_no_props_2 = null_ptr;
+
+ ASIO_CHECK(ex_no_props_2.target<void>() == 0);
+
+ ex_no_props_t ex_no_props_3;
+ ex_no_props_3 = pool.executor();
+
+ ASIO_CHECK(ex_no_props_3.target<void>() != 0);
+
+ ex_no_props_t ex_no_props_4;
+ ex_no_props_4 = ex_no_props_1;
+
+ ASIO_CHECK(ex_no_props_4.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_4 == ex_no_props_1);
+
+ ex_no_props_4 = ex_no_props_3;
+
+ ASIO_CHECK(ex_no_props_4.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_4 == ex_no_props_3);
+
+ ex_no_props_t ex_no_props_5;
+ ex_no_props_5 = fat_executor(1);
+
+ ASIO_CHECK(ex_no_props_5.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_5 != null_ptr);
+ ASIO_CHECK(ex_no_props_5 != ex_no_props_1);
+
+ ex_no_props_t ex_no_props_6;
+ ex_no_props_6 = fat_executor(1);
+
+ ASIO_CHECK(ex_no_props_6.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_6 != null_ptr);
+ ASIO_CHECK(ex_no_props_6 != ex_no_props_1);
+ ASIO_CHECK(ex_no_props_6 == ex_no_props_5);
+
+ ex_no_props_6 = fat_executor(2);
+
+ ASIO_CHECK(ex_no_props_6.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_6 != null_ptr);
+ ASIO_CHECK(ex_no_props_6 != ex_no_props_1);
+ ASIO_CHECK(ex_no_props_6 != ex_no_props_5);
+
+ ex_no_props_t ex_no_props_7;
+ ex_no_props_7 = ex_no_props_5;
+
+ ASIO_CHECK(ex_no_props_7.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_7 != null_ptr);
+ ASIO_CHECK(ex_no_props_7 != ex_no_props_1);
+ ASIO_CHECK(ex_no_props_7 == ex_no_props_5);
+ ASIO_CHECK(ex_no_props_7 != ex_no_props_6);
+
+ ex_no_props_t ex_no_props_8;
+ ex_no_props_8 = std::move(ex_no_props_1);
+
+ ASIO_CHECK(ex_no_props_8.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_1.target<void>() == 0);
+
+ ex_no_props_8 = std::move(ex_no_props_3);
+
+ ASIO_CHECK(ex_no_props_8.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_3.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_8 == ex_no_props_4);
+
+ ex_no_props_8 = std::move(ex_no_props_5);
+
+ ASIO_CHECK(ex_no_props_8.target<void>() != 0);
+ ASIO_CHECK(ex_no_props_5.target<void>() == 0);
+ ASIO_CHECK(ex_no_props_8 == ex_no_props_7);
+
+ ex_no_props_t ex_no_props_9;
+ ex_no_props_9 = ex_two_props_1;
+
+ ASIO_CHECK(ex_no_props_9.target<void>() == 0);
+
+ ex_no_props_9 = ex_two_props_4;
+
+ ASIO_CHECK(ex_no_props_9.target<void>() != 0);
+
+ ex_no_props_9 = ex_two_props_7;
+
+ ASIO_CHECK(ex_no_props_9.target<void>() != 0);
+
+ ex_no_props_9 = ex_one_prop_1;
+
+ ASIO_CHECK(ex_no_props_9.target<void>() == 0);
+
+ ex_no_props_9 = ex_one_prop_4;
+
+ ASIO_CHECK(ex_no_props_9.target<void>() != 0);
+
+ ex_no_props_9 = ex_one_prop_7;
+
+ ASIO_CHECK(ex_no_props_9.target<void>() != 0);
+}
+
+void any_executor_swap_test()
+{
+ typedef execution::any_executor<> ex_no_props_t;
+
+ typedef execution::any_executor<
+ execution::blocking_t
+ > ex_one_prop_t;
+
+ typedef execution::any_executor<
+ execution::blocking_t,
+ execution::occupancy_t
+ > ex_two_props_t;
+
+ thread_pool pool1(1);
+ thread_pool pool2(1);
+
+ ex_no_props_t ex_no_props_1(pool1.executor());
+ ex_no_props_t ex_no_props_2(pool2.executor());
+
+ ex_no_props_t ex_no_props_3(ex_no_props_1);
+ ex_no_props_t ex_no_props_4(ex_no_props_2);
+
+ ASIO_CHECK(ex_no_props_3 == ex_no_props_1);
+ ASIO_CHECK(ex_no_props_4 == ex_no_props_2);
+
+ ex_no_props_3.swap(ex_no_props_4);
+
+ ASIO_CHECK(ex_no_props_3 == ex_no_props_2);
+ ASIO_CHECK(ex_no_props_4 == ex_no_props_1);
+
+ execution::swap(ex_no_props_3, ex_no_props_4);
+
+ ASIO_CHECK(ex_no_props_3 == ex_no_props_1);
+ ASIO_CHECK(ex_no_props_4 == ex_no_props_2);
+
+ ex_one_prop_t ex_one_prop_1(pool1.executor());
+ ex_one_prop_t ex_one_prop_2(pool2.executor());
+
+ ex_one_prop_t ex_one_prop_3(ex_one_prop_1);
+ ex_one_prop_t ex_one_prop_4(ex_one_prop_2);
+
+ ASIO_CHECK(ex_one_prop_3 == ex_one_prop_1);
+ ASIO_CHECK(ex_one_prop_4 == ex_one_prop_2);
+
+ ex_one_prop_3.swap(ex_one_prop_4);
+
+ ASIO_CHECK(ex_one_prop_3 == ex_one_prop_2);
+ ASIO_CHECK(ex_one_prop_4 == ex_one_prop_1);
+
+ execution::swap(ex_one_prop_3, ex_one_prop_4);
+
+ ASIO_CHECK(ex_one_prop_3 == ex_one_prop_1);
+ ASIO_CHECK(ex_one_prop_4 == ex_one_prop_2);
+
+ ex_two_props_t ex_two_props_1(pool1.executor());
+ ex_two_props_t ex_two_props_2(pool2.executor());
+
+ ex_two_props_t ex_two_props_3(ex_two_props_1);
+ ex_two_props_t ex_two_props_4(ex_two_props_2);
+
+ ASIO_CHECK(ex_two_props_3 == ex_two_props_1);
+ ASIO_CHECK(ex_two_props_4 == ex_two_props_2);
+
+ ex_two_props_3.swap(ex_two_props_4);
+
+ ASIO_CHECK(ex_two_props_3 == ex_two_props_2);
+ ASIO_CHECK(ex_two_props_4 == ex_two_props_1);
+
+ execution::swap(ex_two_props_3, ex_two_props_4);
+
+ ASIO_CHECK(ex_two_props_3 == ex_two_props_1);
+ ASIO_CHECK(ex_two_props_4 == ex_two_props_2);
+}
+
+void any_executor_query_test()
+{
+ thread_pool pool(1);
+ execution::any_executor<
+ execution::blocking_t,
+ execution::outstanding_work_t,
+ execution::relationship_t,
+ execution::mapping_t::thread_t,
+ execution::occupancy_t>
+ ex(pool.executor());
+
+ ASIO_CHECK(
+ asio::query(ex, asio::execution::blocking)
+ == asio::execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex, asio::execution::blocking.possibly)
+ == asio::execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex, asio::execution::outstanding_work)
+ == asio::execution::outstanding_work.untracked);
+
+ ASIO_CHECK(
+ asio::query(ex, asio::execution::outstanding_work.untracked)
+ == asio::execution::outstanding_work.untracked);
+
+ ASIO_CHECK(
+ asio::query(ex, asio::execution::relationship)
+ == asio::execution::relationship.fork);
+
+ ASIO_CHECK(
+ asio::query(ex, asio::execution::relationship.fork)
+ == asio::execution::relationship.fork);
+
+ ASIO_CHECK(
+ asio::query(ex, asio::execution::mapping)
+ == asio::execution::mapping.thread);
+
+ ASIO_CHECK(
+ asio::query(ex, asio::execution::occupancy)
+ == 1);
+}
+
+void any_executor_execute_test()
+{
+ int count = 0;
+ thread_pool pool(1);
+ execution::any_executor<
+ execution::blocking_t::possibly_t,
+ execution::blocking_t::never_t,
+ execution::outstanding_work_t::untracked_t,
+ execution::outstanding_work_t::tracked_t,
+ execution::relationship_t::continuation_t>
+ ex(pool.executor());
+
+ ex.execute(bindns::bind(increment, &count));
+
+ asio::require(ex, asio::execution::blocking.possibly).execute(
+ bindns::bind(increment, &count));
+
+ asio::require(ex, asio::execution::blocking.never).execute(
+ bindns::bind(increment, &count));
+
+ asio::require(ex,
+ asio::execution::blocking.never,
+ asio::execution::outstanding_work.tracked
+ ).execute(bindns::bind(increment, &count));
+
+ asio::require(ex,
+ asio::execution::blocking.never,
+ asio::execution::outstanding_work.untracked
+ ).execute(bindns::bind(increment, &count));
+
+ asio::require(ex,
+ asio::execution::blocking.never,
+ asio::execution::outstanding_work.untracked,
+ asio::execution::relationship.continuation
+ ).execute(bindns::bind(increment, &count));
+
+ pool.wait();
+
+ ASIO_CHECK(count == 6);
+}
+
+ASIO_TEST_SUITE
+(
+ "any_executor",
+ ASIO_TEST_CASE(any_executor_construction_test)
+ ASIO_TEST_CASE(any_executor_nothrow_construction_test)
+ ASIO_TEST_CASE(any_executor_assignment_test)
+ ASIO_TEST_CASE(any_executor_swap_test)
+ ASIO_TEST_CASE(any_executor_query_test)
+ ASIO_TEST_CASE(any_executor_execute_test)
+)
diff --git a/3rdparty/asio/src/tests/unit/execution/blocking.cpp b/3rdparty/asio/src/tests/unit/execution/blocking.cpp
new file mode 100644
index 00000000000..ce2ba2f8ea5
--- /dev/null
+++ b/3rdparty/asio/src/tests/unit/execution/blocking.cpp
@@ -0,0 +1,1921 @@
+//
+// blocking.cpp
+// ~~~~~~~~~~~~
+//
+// 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)
+//
+
+// 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/blocking.hpp"
+
+#include "asio/prefer.hpp"
+#include "asio/query.hpp"
+#include "asio/require.hpp"
+#include "../unit_test.hpp"
+
+namespace exec = asio::execution;
+
+typedef exec::blocking_t s;
+typedef exec::blocking_t::possibly_t n1;
+typedef exec::blocking_t::always_t n2;
+typedef exec::blocking_t::never_t n3;
+
+struct ex_nq_nr
+{
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_nq_nr&, const ex_nq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_nq_nr&, const ex_nq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <>
+struct is_executor<ex_nq_nr> : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+template <typename ResultType, typename ParamType, typename Result>
+struct ex_cq_nr
+{
+ static constexpr ResultType query(ParamType) noexcept
+ {
+ return Result();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_cq_nr&, const ex_cq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_cq_nr&, const ex_cq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename ResultType, typename ParamType, typename Result>
+struct is_executor<ex_cq_nr<ResultType, ParamType, Result> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Param>
+struct query_static_constexpr_member<
+ ex_cq_nr<ResultType, ParamType, Result>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, ParamType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef Result result_type; // Must return raw result type.
+
+ static constexpr result_type value()
+ {
+ return Result();
+ }
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename ResultType, typename ParamType, typename Result>
+struct ex_mq_nr
+{
+ ResultType query(ParamType) const noexcept
+ {
+ return Result();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_mq_nr&, const ex_mq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_mq_nr&, const ex_mq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename ResultType, typename ParamType, typename Result>
+struct is_executor<ex_mq_nr<ResultType, ParamType, Result> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Param>
+struct query_member<
+ ex_mq_nr<ResultType, ParamType, Result>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, ParamType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ResultType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename ResultType, typename ParamType, typename Result>
+struct ex_fq_nr
+{
+ friend ResultType query(const ex_fq_nr&, ParamType) noexcept
+ {
+ return Result();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_fq_nr&, const ex_fq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_fq_nr&, const ex_fq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename ResultType, typename ParamType, typename Result>
+struct is_executor<ex_fq_nr<ResultType, ParamType, Result> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Param>
+struct query_free<
+ ex_fq_nr<ResultType, ParamType, Result>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, ParamType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ResultType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename CurrentType, typename OtherType>
+struct ex_mq_mr
+{
+ CurrentType query(CurrentType) const noexcept
+ {
+ return CurrentType();
+ }
+
+ CurrentType query(OtherType) const noexcept
+ {
+ return CurrentType();
+ }
+
+ ex_mq_mr<CurrentType, OtherType> require(
+ CurrentType) const noexcept
+ {
+ return ex_mq_mr<CurrentType, OtherType>();
+ }
+
+ ex_mq_mr<OtherType, CurrentType> require(
+ OtherType) const noexcept
+ {
+ return ex_mq_mr<OtherType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return false;
+ }
+};
+
+template <typename CurrentType>
+struct ex_mq_mr<CurrentType, CurrentType>
+{
+ CurrentType query(CurrentType) const noexcept
+ {
+ return CurrentType();
+ }
+
+ ex_mq_mr<CurrentType, CurrentType> require(
+ CurrentType) const noexcept
+ {
+ return ex_mq_mr<CurrentType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename CurrentType, typename OtherType>
+struct is_executor<ex_mq_mr<CurrentType, OtherType> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct query_member<
+ ex_mq_mr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ || asio::is_convertible<Param, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef CurrentType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_member<
+ ex_mq_mr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_mq_mr<CurrentType, OtherType> result_type;
+};
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_member<
+ ex_mq_mr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, OtherType>::value
+ && !asio::is_same<CurrentType, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_mq_mr<OtherType, CurrentType> result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename CurrentType, typename OtherType>
+struct ex_fq_fr
+{
+ friend CurrentType query(const ex_fq_fr&, CurrentType) noexcept
+ {
+ return CurrentType();
+ }
+
+ friend CurrentType query(const ex_fq_fr&, OtherType) noexcept
+ {
+ return CurrentType();
+ }
+
+ friend ex_fq_fr<CurrentType, OtherType> require(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, OtherType>();
+ }
+
+ friend ex_fq_fr<OtherType, CurrentType> require(
+ const ex_fq_fr&, OtherType) noexcept
+ {
+ return ex_fq_fr<OtherType, CurrentType>();
+ }
+
+ friend ex_fq_fr<CurrentType, OtherType> prefer(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, OtherType>();
+ }
+
+ friend ex_fq_fr<OtherType, CurrentType> prefer(
+ const ex_fq_fr&, OtherType) noexcept
+ {
+ return ex_fq_fr<OtherType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return false;
+ }
+};
+
+template <typename CurrentType>
+struct ex_fq_fr<CurrentType, CurrentType>
+{
+ friend CurrentType query(const ex_fq_fr&, CurrentType) noexcept
+ {
+ return CurrentType();
+ }
+
+ friend ex_fq_fr<CurrentType, CurrentType> require(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, CurrentType>();
+ }
+
+ friend ex_fq_fr<CurrentType, CurrentType> prefer(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename CurrentType, typename OtherType>
+struct is_executor<ex_fq_fr<CurrentType, OtherType> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct query_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ || asio::is_convertible<Param, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef CurrentType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_REQUIRE_FREE_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<CurrentType, OtherType> result_type;
+};
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, OtherType>::value
+ && !asio::is_same<CurrentType, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<OtherType, CurrentType> result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_REQUIRE_FREE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct prefer_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<CurrentType, OtherType> result_type;
+};
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct prefer_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, OtherType>::value
+ && !asio::is_same<CurrentType, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<OtherType, CurrentType> result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename Executor, typename Param, bool ExpectedResult>
+void test_can_query()
+{
+ constexpr bool b1 =
+ asio::can_query<Executor, Param>::value;
+ ASIO_CHECK(b1 == ExpectedResult);
+
+ constexpr bool b2 =
+ asio::can_query<const Executor, Param>::value;
+ ASIO_CHECK(b2 == ExpectedResult);
+
+ constexpr bool b3 =
+ asio::can_query<Executor&, Param>::value;
+ ASIO_CHECK(b3 == ExpectedResult);
+
+ constexpr bool b4 =
+ asio::can_query<const Executor&, Param>::value;
+ ASIO_CHECK(b4 == ExpectedResult);
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_query()
+{
+ exec::blocking_t result1 = asio::query(Executor(), Param());
+ ASIO_CHECK(result1 == ExpectedResult());
+
+ Executor ex1 = {};
+ exec::blocking_t result2 = asio::query(ex1, Param());
+ ASIO_CHECK(result2 == ExpectedResult());
+
+ const Executor ex2 = {};
+ exec::blocking_t result3 = asio::query(ex2, Param());
+ ASIO_CHECK(result3 == ExpectedResult());
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_constexpr_query()
+{
+ constexpr Executor ex1 = {};
+ constexpr exec::blocking_t result1 = asio::query(ex1, Param());
+ ASIO_CHECK(result1 == ExpectedResult());
+}
+
+template <typename Executor, typename Param, bool ExpectedResult>
+void test_can_require()
+{
+ constexpr bool b1 =
+ asio::can_require<Executor, Param>::value;
+ ASIO_CHECK(b1 == ExpectedResult);
+
+ constexpr bool b2 =
+ asio::can_require<const Executor, Param>::value;
+ ASIO_CHECK(b2 == ExpectedResult);
+
+ constexpr bool b3 =
+ asio::can_require<Executor&, Param>::value;
+ ASIO_CHECK(b3 == ExpectedResult);
+
+ constexpr bool b4 =
+ asio::can_require<const Executor&, Param>::value;
+ ASIO_CHECK(b4 == ExpectedResult);
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_require()
+{
+ ASIO_CHECK(
+ asio::query(
+ asio::require(Executor(), Param()),
+ Param()) == ExpectedResult());
+
+ Executor ex1 = {};
+ ASIO_CHECK(
+ asio::query(
+ asio::require(ex1, Param()),
+ Param()) == ExpectedResult());
+
+ const Executor ex2 = {};
+ ASIO_CHECK(
+ asio::query(
+ asio::require(ex2, Param()),
+ Param()) == ExpectedResult());
+}
+
+template <typename Executor, typename Param, bool ExpectedResult>
+void test_can_prefer()
+{
+ constexpr bool b1 =
+ asio::can_prefer<Executor, Param>::value;
+ ASIO_CHECK(b1 == ExpectedResult);
+
+ constexpr bool b2 =
+ asio::can_prefer<const Executor, Param>::value;
+ ASIO_CHECK(b2 == ExpectedResult);
+
+ constexpr bool b3 =
+ asio::can_prefer<Executor&, Param>::value;
+ ASIO_CHECK(b3 == ExpectedResult);
+
+ constexpr bool b4 =
+ asio::can_prefer<const Executor&, Param>::value;
+ ASIO_CHECK(b4 == ExpectedResult);
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_prefer()
+{
+ ASIO_CHECK(
+ s(asio::query(
+ asio::prefer(Executor(), Param()),
+ s())) == s(ExpectedResult()));
+
+ Executor ex1 = {};
+ ASIO_CHECK(
+ s(asio::query(
+ asio::prefer(ex1, Param()),
+ s())) == s(ExpectedResult()));
+
+ const Executor ex2 = {};
+ ASIO_CHECK(
+ s(asio::query(
+ asio::prefer(ex2, Param()),
+ s())) == s(ExpectedResult()));
+}
+
+void test_vars()
+{
+ ASIO_CHECK(s() == exec::blocking);
+ ASIO_CHECK(s() != exec::blocking.possibly);
+ ASIO_CHECK(s() != exec::blocking.always);
+ ASIO_CHECK(s() != exec::blocking.never);
+ ASIO_CHECK(n1() == exec::blocking.possibly);
+ ASIO_CHECK(n1() != exec::blocking.always);
+ ASIO_CHECK(n1() != exec::blocking.never);
+ ASIO_CHECK(n2() == exec::blocking.always);
+ ASIO_CHECK(n2() != exec::blocking.possibly);
+ ASIO_CHECK(n2() != exec::blocking.never);
+ ASIO_CHECK(n3() == exec::blocking.never);
+ ASIO_CHECK(n3() != exec::blocking.possibly);
+ ASIO_CHECK(n3() != exec::blocking.always);
+}
+
+ASIO_TEST_SUITE
+(
+ "blocking",
+
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, s, true>)
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n1, true>)
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n2, false>)
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n3, false>)
+
+ ASIO_TEST_CASE3(test_query<ex_nq_nr, s, n1>)
+ ASIO_TEST_CASE3(test_query<ex_nq_nr, n1, n1>)
+
+ ASIO_TEST_CASE3(test_constexpr_query<ex_nq_nr, s, n1>)
+ ASIO_TEST_CASE3(test_constexpr_query<ex_nq_nr, n1, n1>)
+
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, s, false>)
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n1, true>)
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n2, false>)
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n3, false>)
+
+ ASIO_TEST_CASE3(test_require<ex_nq_nr, n1, n1>)
+
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, s, false>)
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n1, true>)
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n2, false>)
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n3, true>)
+
+ ASIO_TEST_CASE3(test_prefer<ex_nq_nr, n1, n1>)
+ ASIO_TEST_CASE3(test_prefer<ex_nq_nr, n3, n1>)
+
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n3, s, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n3, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n3, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n3, s, n3>, n3, true>)
+
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n3, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n3, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n3, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n3, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n3, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n3, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n3, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n3, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n3, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n3, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n3, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n3, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n3, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n3, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n3, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n3, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n3, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n3, s, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n3, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n3, s, n3>, n3, true>)
+
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<n2, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n3, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n3, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n3, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n3, s, n3>, n3, true>)
+
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n3, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n3, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n3, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n3, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n3, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n1, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n2, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n3, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n3, s, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n3, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n3, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n3, s, n3>, n3, true>)
+
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n3, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n3, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n3, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n3, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n3, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n3, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n3, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n3, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n3, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n3, s, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n3, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n3, s, n3>, n3, false>)
+
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n3, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n3, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n3, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n3, s, n3>, n3, true>)
+
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n3, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n3, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n3, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n3, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n3, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n1, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n2, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n3, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n3, s, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n3, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n3, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n3, s, n3>, n3, true>)
+
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n3, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n3, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n3, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n3, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n3, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n3, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n3, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n3, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n3, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n3, s, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n3, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n3, s, n3>, n3, false>)
+
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n3, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n3, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n3, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n3, s, n3>, n3, true>)
+
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n3, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n3, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n3, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n3, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n3, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n1, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n2, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n3, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n3>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n3>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n3>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n3>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n3>, n3, true>)
+
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n1>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n2>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n3>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n3>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n1>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n2>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n3>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n3>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n3, n1>, s, n3>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n3, n1>, n3, n3>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n3, n2>, s, n3>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n3, n2>, n3, n3>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n3, n3>, s, n3>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n3, n3>, n3, n3>)
+
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n3>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n3>, n3, true>)
+
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n3>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n3>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n3, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n3, n1>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n3, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n3, n2>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n3, n3>, n3, n3>)
+
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n2>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n3>, n3, true>)
+
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n1>, n3, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n2>, n3, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n3>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n1>, n3, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n2>, n1, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n2>, n3, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n3>, n1, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n3, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n3, n1>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n3, n2>, n1, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n3, n2>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n3, n3>, n1, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n3, n3>, n3, n3>)
+
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n3>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n3>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n3>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n3>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n3>, n3, true>)
+
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n1>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n2>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n3>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n3>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n1>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n2>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n3>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n3>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n3, n1>, s, n3>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n3, n1>, n3, n3>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n3, n2>, s, n3>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n3, n2>, n3, n3>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n3, n3>, s, n3>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n3, n3>, n3, n3>)
+
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n3>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n3>, n3, true>)
+
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n3>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n3>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n3, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n3, n1>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n3, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n3, n2>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n3, n3>, n3, n3>)
+
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n2>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n3>, n3, true>)
+
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n1>, n3, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n2>, n3, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n3>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n1>, n3, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n2>, n1, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n2>, n3, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n3>, n1, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n3, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n3, n1>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n3, n2>, n1, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n3, n2>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n3, n3>, n1, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n3, n3>, n3, n3>)
+
+ ASIO_TEST_CASE(test_vars)
+)
diff --git a/3rdparty/asio/src/tests/unit/execution/blocking_adaptation.cpp b/3rdparty/asio/src/tests/unit/execution/blocking_adaptation.cpp
new file mode 100644
index 00000000000..b6e77dd31a9
--- /dev/null
+++ b/3rdparty/asio/src/tests/unit/execution/blocking_adaptation.cpp
@@ -0,0 +1,1323 @@
+//
+// blocking_adaptation.cpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// 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)
+//
+
+// 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/blocking_adaptation.hpp"
+
+#include "asio/prefer.hpp"
+#include "asio/query.hpp"
+#include "asio/require.hpp"
+#include "../unit_test.hpp"
+
+namespace exec = asio::execution;
+
+typedef exec::blocking_adaptation_t s;
+typedef exec::blocking_adaptation_t::disallowed_t n1;
+typedef exec::blocking_adaptation_t::allowed_t n2;
+
+struct ex_nq_nr
+{
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_nq_nr&, const ex_nq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_nq_nr&, const ex_nq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+template <>
+struct equality_comparable<ex_nq_nr>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+template <typename Function>
+struct execute_member<ex_nq_nr, Function>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = false;
+
+ typedef void result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename ResultType, typename ParamType, typename Result>
+struct ex_cq_nr
+{
+ static constexpr ResultType query(ParamType) noexcept
+ {
+ return Result();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_cq_nr&, const ex_cq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_cq_nr&, const ex_cq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+template <typename ResultType, typename ParamType, typename Result>
+struct equality_comparable<ex_cq_nr<ResultType, ParamType, Result> >
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Function>
+struct execute_member<ex_cq_nr<ResultType, ParamType, Result>, Function>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = false;
+
+ typedef void result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Param>
+struct query_static_constexpr_member<
+ ex_cq_nr<ResultType, ParamType, Result>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, ParamType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef Result result_type; // Must return raw result type.
+
+ static constexpr result_type value()
+ {
+ return Result();
+ }
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename ResultType, typename ParamType, typename Result>
+struct ex_mq_nr
+{
+ ResultType query(ParamType) const noexcept
+ {
+ return Result();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_mq_nr&, const ex_mq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_mq_nr&, const ex_mq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+template <typename ResultType, typename ParamType, typename Result>
+struct equality_comparable<ex_mq_nr<ResultType, ParamType, Result> >
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Function>
+struct execute_member<ex_mq_nr<ResultType, ParamType, Result>, Function>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = false;
+
+ typedef void result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Param>
+struct query_member<
+ ex_mq_nr<ResultType, ParamType, Result>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, ParamType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ResultType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename ResultType, typename ParamType, typename Result>
+struct ex_fq_nr
+{
+ friend ResultType query(const ex_fq_nr&, ParamType) noexcept
+ {
+ return Result();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_fq_nr&, const ex_fq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_fq_nr&, const ex_fq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+template <typename ResultType, typename ParamType, typename Result>
+struct equality_comparable<ex_fq_nr<ResultType, ParamType, Result> >
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Function>
+struct execute_member<ex_fq_nr<ResultType, ParamType, Result>, Function>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = false;
+
+ typedef void result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Param>
+struct query_free<
+ ex_fq_nr<ResultType, ParamType, Result>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, ParamType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ResultType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename CurrentType, typename OtherType>
+struct ex_mq_mr
+{
+ CurrentType query(CurrentType) const noexcept
+ {
+ return CurrentType();
+ }
+
+ CurrentType query(OtherType) const noexcept
+ {
+ return CurrentType();
+ }
+
+ ex_mq_mr<CurrentType, OtherType> require(
+ CurrentType) const noexcept
+ {
+ return ex_mq_mr<CurrentType, OtherType>();
+ }
+
+ ex_mq_mr<OtherType, CurrentType> require(
+ OtherType) const noexcept
+ {
+ return ex_mq_mr<OtherType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return false;
+ }
+};
+
+template <typename CurrentType>
+struct ex_mq_mr<CurrentType, CurrentType>
+{
+ CurrentType query(CurrentType) const noexcept
+ {
+ return CurrentType();
+ }
+
+ ex_mq_mr<CurrentType, CurrentType> require(
+ CurrentType) const noexcept
+ {
+ return ex_mq_mr<CurrentType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return false;
+ }
+};
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+template <typename CurrentType, typename OtherType>
+struct equality_comparable<ex_mq_mr<CurrentType, OtherType> >
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Function>
+struct execute_member<ex_mq_mr<CurrentType, OtherType>, Function>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = false;
+
+ typedef void result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct query_member<
+ ex_mq_mr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ || asio::is_convertible<Param, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef CurrentType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_member<
+ ex_mq_mr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_mq_mr<CurrentType, OtherType> result_type;
+};
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_member<
+ ex_mq_mr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, OtherType>::value
+ && !asio::is_same<CurrentType, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_mq_mr<OtherType, CurrentType> result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename CurrentType, typename OtherType>
+struct ex_fq_fr
+{
+ friend CurrentType query(const ex_fq_fr&, CurrentType) noexcept
+ {
+ return CurrentType();
+ }
+
+ friend CurrentType query(const ex_fq_fr&, OtherType) noexcept
+ {
+ return CurrentType();
+ }
+
+ friend ex_fq_fr<CurrentType, OtherType> require(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, OtherType>();
+ }
+
+ friend ex_fq_fr<OtherType, CurrentType> require(
+ const ex_fq_fr&, OtherType) noexcept
+ {
+ return ex_fq_fr<OtherType, CurrentType>();
+ }
+
+ friend ex_fq_fr<CurrentType, OtherType> prefer(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, OtherType>();
+ }
+
+ friend ex_fq_fr<OtherType, CurrentType> prefer(
+ const ex_fq_fr&, OtherType) noexcept
+ {
+ return ex_fq_fr<OtherType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return false;
+ }
+};
+
+template <typename CurrentType>
+struct ex_fq_fr<CurrentType, CurrentType>
+{
+ friend CurrentType query(const ex_fq_fr&, CurrentType) noexcept
+ {
+ return CurrentType();
+ }
+
+ friend ex_fq_fr<CurrentType, CurrentType> require(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, CurrentType>();
+ }
+
+ friend ex_fq_fr<CurrentType, CurrentType> prefer(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return false;
+ }
+};
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+template <typename CurrentType, typename OtherType>
+struct equality_comparable<ex_fq_fr<CurrentType, OtherType> >
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Function>
+struct execute_member<ex_fq_fr<CurrentType, OtherType>, Function>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = false;
+
+ typedef void result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct query_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ || asio::is_convertible<Param, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef CurrentType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_REQUIRE_FREE_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<CurrentType, OtherType> result_type;
+};
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, OtherType>::value
+ && !asio::is_same<CurrentType, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<OtherType, CurrentType> result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_REQUIRE_FREE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct prefer_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<CurrentType, OtherType> result_type;
+};
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct prefer_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, OtherType>::value
+ && !asio::is_same<CurrentType, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<OtherType, CurrentType> result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename Executor, typename Param, bool ExpectedResult>
+void test_can_query()
+{
+ constexpr bool b1 =
+ asio::can_query<Executor, Param>::value;
+ ASIO_CHECK(b1 == ExpectedResult);
+
+ constexpr bool b2 =
+ asio::can_query<const Executor, Param>::value;
+ ASIO_CHECK(b2 == ExpectedResult);
+
+ constexpr bool b3 =
+ asio::can_query<Executor&, Param>::value;
+ ASIO_CHECK(b3 == ExpectedResult);
+
+ constexpr bool b4 =
+ asio::can_query<const Executor&, Param>::value;
+ ASIO_CHECK(b4 == ExpectedResult);
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_query()
+{
+ exec::blocking_adaptation_t result1 = asio::query(Executor(), Param());
+ ASIO_CHECK(result1 == ExpectedResult());
+
+ Executor ex1 = {};
+ exec::blocking_adaptation_t result2 = asio::query(ex1, Param());
+ ASIO_CHECK(result2 == ExpectedResult());
+
+ const Executor ex2 = {};
+ exec::blocking_adaptation_t result3 = asio::query(ex2, Param());
+ ASIO_CHECK(result3 == ExpectedResult());
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_constexpr_query()
+{
+ constexpr Executor ex1 = {};
+ constexpr exec::blocking_adaptation_t result1 = asio::query(ex1, Param());
+ ASIO_CHECK(result1 == ExpectedResult());
+}
+
+template <typename Executor, typename Param, bool ExpectedResult>
+void test_can_require()
+{
+ constexpr bool b1 =
+ asio::can_require<Executor, Param>::value;
+ ASIO_CHECK(b1 == ExpectedResult);
+
+ constexpr bool b2 =
+ asio::can_require<const Executor, Param>::value;
+ ASIO_CHECK(b2 == ExpectedResult);
+
+ constexpr bool b3 =
+ asio::can_require<Executor&, Param>::value;
+ ASIO_CHECK(b3 == ExpectedResult);
+
+ constexpr bool b4 =
+ asio::can_require<const Executor&, Param>::value;
+ ASIO_CHECK(b4 == ExpectedResult);
+}
+
+void do_nothing()
+{
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_require()
+{
+ ASIO_CHECK(
+ asio::query(
+ asio::require(Executor(), Param()),
+ Param()) == ExpectedResult());
+
+ Executor ex1 = {};
+
+ ASIO_CHECK(
+ asio::query(
+ asio::require(ex1, Param()),
+ Param()) == ExpectedResult());
+
+ ASIO_CHECK((
+ asio::execution::is_executor<
+ typename asio::decay<
+ typename asio::require_result<Executor&, Param>::type
+ >::type
+ >::value));
+
+ const Executor ex2 = {};
+
+ ASIO_CHECK(
+ asio::query(
+ asio::require(ex2, Param()),
+ Param()) == ExpectedResult());
+
+ ASIO_CHECK((
+ asio::execution::is_executor<
+ typename asio::decay<
+ typename asio::require_result<const Executor&, Param>::type
+ >::type
+ >::value));
+}
+
+template <typename Executor, typename Param, bool ExpectedResult>
+void test_can_prefer()
+{
+ constexpr bool b1 =
+ asio::can_prefer<Executor, Param>::value;
+ ASIO_CHECK(b1 == ExpectedResult);
+
+ constexpr bool b2 =
+ asio::can_prefer<const Executor, Param>::value;
+ ASIO_CHECK(b2 == ExpectedResult);
+
+ constexpr bool b3 =
+ asio::can_prefer<Executor&, Param>::value;
+ ASIO_CHECK(b3 == ExpectedResult);
+
+ constexpr bool b4 =
+ asio::can_prefer<const Executor&, Param>::value;
+ ASIO_CHECK(b4 == ExpectedResult);
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_prefer()
+{
+ ASIO_CHECK(
+ s(asio::query(
+ asio::prefer(Executor(), Param()),
+ s())) == s(ExpectedResult()));
+
+ Executor ex1 = {};
+ ASIO_CHECK(
+ s(asio::query(
+ asio::prefer(ex1, Param()),
+ s())) == s(ExpectedResult()));
+
+ const Executor ex2 = {};
+ ASIO_CHECK(
+ s(asio::query(
+ asio::prefer(ex2, Param()),
+ s())) == s(ExpectedResult()));
+}
+
+void test_vars()
+{
+ ASIO_CHECK(s() == exec::blocking_adaptation);
+ ASIO_CHECK(s() != exec::blocking_adaptation.disallowed);
+ ASIO_CHECK(s() != exec::blocking_adaptation.allowed);
+ ASIO_CHECK(n1() == exec::blocking_adaptation.disallowed);
+ ASIO_CHECK(n1() != exec::blocking_adaptation.allowed);
+ ASIO_CHECK(n2() == exec::blocking_adaptation.allowed);
+ ASIO_CHECK(n2() != exec::blocking_adaptation.disallowed);
+}
+
+ASIO_TEST_SUITE
+(
+ "blocking_adaptation",
+
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, s, true>)
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n1, true>)
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n2, false>)
+
+ ASIO_TEST_CASE3(test_query<ex_nq_nr, s, n1>)
+ ASIO_TEST_CASE3(test_query<ex_nq_nr, n1, n1>)
+
+ ASIO_TEST_CASE3(test_constexpr_query<ex_nq_nr, s, n1>)
+ ASIO_TEST_CASE3(test_constexpr_query<ex_nq_nr, n1, n1>)
+
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, s, false>)
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n1, true>)
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n2, true>)
+
+ ASIO_TEST_CASE3(test_require<ex_nq_nr, n1, n1>)
+ ASIO_TEST_CASE3(test_require<ex_nq_nr, n2, n2>)
+
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, s, false>)
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n1, true>)
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n2, false>)
+
+ ASIO_TEST_CASE3(test_prefer<ex_nq_nr, n1, n1>)
+
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n1>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n1, n1>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n1, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n2, n1>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<n1, s, n1>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n2, false>)
+
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n2, s, n2>, n1, n2>)
+
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_require<ex_mq_nr<s, s, n1>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_mq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_mq_nr<s, n1, n1>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_mq_nr<s, n1, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_mq_nr<s, n2, n1>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_mq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_mq_nr<n1, s, n1>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_mq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n2, false>)
+
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n2, s, n2>, n1, n2>)
+
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_require<ex_fq_nr<s, s, n1>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_fq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_fq_nr<s, n1, n1>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_fq_nr<s, n1, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_fq_nr<s, n2, n1>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_fq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_fq_nr<n1, s, n1>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_fq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n2, false>)
+
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n2, s, n2>, n1, n2>)
+
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n1>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n2>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n1>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n2>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n2, false>)
+
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n2>, n1, n2>)
+
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n1>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n2>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n1>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n2>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n2, false>)
+
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n2>, n1, n2>)
+
+ ASIO_TEST_CASE(test_vars)
+)
diff --git a/3rdparty/asio/src/tests/unit/execution/context_as.cpp b/3rdparty/asio/src/tests/unit/execution/context_as.cpp
new file mode 100644
index 00000000000..13311ba262b
--- /dev/null
+++ b/3rdparty/asio/src/tests/unit/execution/context_as.cpp
@@ -0,0 +1,147 @@
+//
+// context_as.cpp
+// ~~~~~~~~~~~~~~
+//
+// 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)
+//
+
+// 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/context_as.hpp"
+
+#include <functional>
+#include "asio/execution/any_executor.hpp"
+#include "asio/io_context.hpp"
+#include "asio/static_thread_pool.hpp"
+#include "../unit_test.hpp"
+
+using namespace asio;
+namespace bindns = std;
+
+void context_as_executor_query_test()
+{
+ static_thread_pool pool(1);
+
+ ASIO_CHECK(
+ &asio::query(pool.executor(),
+ execution::context_as_t<static_thread_pool&>())
+ == &pool);
+
+ execution::any_executor<
+ execution::context_as_t<static_thread_pool&>
+ > ex1 = pool.executor();
+
+ ASIO_CHECK(
+ &asio::query(ex1,
+ execution::context_as_t<static_thread_pool&>())
+ == &pool);
+
+ ASIO_CHECK(
+ &asio::query(ex1, execution::context)
+ == &pool);
+
+ ASIO_CHECK(
+ &asio::query(pool.executor(),
+ execution::context_as_t<const static_thread_pool&>())
+ == &pool);
+
+ execution::any_executor<
+ execution::context_as_t<const static_thread_pool&>
+ > ex2 = pool.executor();
+
+ ASIO_CHECK(
+ &asio::query(ex2,
+ execution::context_as_t<const static_thread_pool&>())
+ == &pool);
+
+ ASIO_CHECK(
+ &asio::query(ex2, execution::context)
+ == &pool);
+
+ io_context io_ctx;
+
+ ASIO_CHECK(
+ &asio::query(io_ctx.get_executor(),
+ execution::context_as_t<io_context&>())
+ == &io_ctx);
+
+ execution::any_executor<
+ execution::context_as_t<io_context&>
+ > ex3 = io_ctx.get_executor();
+
+ ASIO_CHECK(
+ &asio::query(ex3,
+ execution::context_as_t<io_context&>())
+ == &io_ctx);
+
+ ASIO_CHECK(
+ &asio::query(ex3, execution::context)
+ == &io_ctx);
+
+ ASIO_CHECK(
+ &asio::query(io_ctx.get_executor(),
+ execution::context_as_t<const io_context&>())
+ == &io_ctx);
+
+ execution::any_executor<
+ execution::context_as_t<const io_context&>
+ > ex4 = io_ctx.get_executor();
+
+ ASIO_CHECK(
+ &asio::query(ex4,
+ execution::context_as_t<const io_context&>())
+ == &io_ctx);
+
+ ASIO_CHECK(
+ &asio::query(ex4, execution::context)
+ == &io_ctx);
+
+ ASIO_CHECK(
+ &asio::query(io_ctx.get_executor(),
+ execution::context_as_t<execution_context&>())
+ == &io_ctx);
+
+ execution::any_executor<
+ execution::context_as_t<execution_context&>
+ > ex5 = io_ctx.get_executor();
+
+ ASIO_CHECK(
+ &asio::query(ex5,
+ execution::context_as_t<execution_context&>())
+ == &io_ctx);
+
+ ASIO_CHECK(
+ &asio::query(ex5, execution::context)
+ == &io_ctx);
+
+ ASIO_CHECK(
+ &asio::query(io_ctx.get_executor(),
+ execution::context_as_t<const execution_context&>())
+ == &io_ctx);
+
+ execution::any_executor<
+ execution::context_as_t<const execution_context&>
+ > ex6 = io_ctx.get_executor();
+
+ ASIO_CHECK(
+ &asio::query(ex6,
+ execution::context_as_t<const execution_context&>())
+ == &io_ctx);
+
+ ASIO_CHECK(
+ &asio::query(ex6, execution::context)
+ == &io_ctx);
+}
+
+ASIO_TEST_SUITE
+(
+ "context_as",
+ ASIO_TEST_CASE(context_as_executor_query_test)
+)
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..8b02622bdca
--- /dev/null
+++ b/3rdparty/asio/src/tests/unit/execution/executor.cpp
@@ -0,0 +1,106 @@
+//
+// executor.cpp
+// ~~~~~~~~~~~~
+//
+// 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)
+//
+
+// 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&) noexcept
+ {
+ }
+
+ executor(executor&&) noexcept
+ {
+ }
+
+ template <typename F>
+ void execute(F&& f) const noexcept
+ {
+ (void)f;
+ }
+
+ bool operator==(const executor&) const noexcept
+ {
+ return true;
+ }
+
+ bool operator!=(const executor&) const noexcept
+ {
+ return false;
+ }
+};
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+template <typename F>
+struct execute_member<executor, F>
+{
+ static constexpr bool is_valid = true;
+ 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>
+{
+ static constexpr bool is_valid = true;
+ 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));
+}
+
+ASIO_TEST_SUITE
+(
+ "executor",
+ ASIO_TEST_CASE(is_executor_test)
+)
diff --git a/3rdparty/asio/src/tests/unit/execution/invocable_archetype.cpp b/3rdparty/asio/src/tests/unit/execution/invocable_archetype.cpp
new file mode 100644
index 00000000000..5dbfb94d9f4
--- /dev/null
+++ b/3rdparty/asio/src/tests/unit/execution/invocable_archetype.cpp
@@ -0,0 +1,25 @@
+//
+// invocable_archetype.cpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// 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)
+//
+
+// 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/invocable_archetype.hpp"
+
+#include "../unit_test.hpp"
+
+ASIO_TEST_SUITE
+(
+ "invocable_archetype",
+ ASIO_TEST_CASE(null_test)
+)
diff --git a/3rdparty/asio/src/tests/unit/execution/mapping.cpp b/3rdparty/asio/src/tests/unit/execution/mapping.cpp
new file mode 100644
index 00000000000..399aae3ea90
--- /dev/null
+++ b/3rdparty/asio/src/tests/unit/execution/mapping.cpp
@@ -0,0 +1,1985 @@
+//
+// mapping.cpp
+// ~~~~~~~~~~~
+//
+// 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)
+//
+
+// 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/mapping.hpp"
+
+#include "asio/prefer.hpp"
+#include "asio/query.hpp"
+#include "asio/require.hpp"
+#include "../unit_test.hpp"
+
+namespace exec = asio::execution;
+
+typedef exec::mapping_t s;
+typedef exec::mapping_t::thread_t n1;
+typedef exec::mapping_t::new_thread_t n2;
+typedef exec::mapping_t::other_t n3;
+
+struct ex_nq_nr
+{
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_nq_nr&, const ex_nq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_nq_nr&, const ex_nq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <>
+struct is_executor<ex_nq_nr> : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+template <typename ResultType, typename ParamType, typename Result>
+struct ex_cq_nr
+{
+ static constexpr ResultType query(ParamType) noexcept
+ {
+ return Result();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_cq_nr&, const ex_cq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_cq_nr&, const ex_cq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename ResultType, typename ParamType, typename Result>
+struct is_executor<ex_cq_nr<ResultType, ParamType, Result> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Param>
+struct query_static_constexpr_member<
+ ex_cq_nr<ResultType, ParamType, Result>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, ParamType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef Result result_type; // Must return raw result type.
+
+ static constexpr result_type value()
+ {
+ return Result();
+ }
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename ResultType, typename ParamType, typename Result>
+struct ex_mq_nr
+{
+ ResultType query(ParamType) const noexcept
+ {
+ return Result();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_mq_nr&, const ex_mq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_mq_nr&, const ex_mq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename ResultType, typename ParamType, typename Result>
+struct is_executor<ex_mq_nr<ResultType, ParamType, Result> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Param>
+struct query_member<
+ ex_mq_nr<ResultType, ParamType, Result>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, ParamType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ResultType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename ResultType, typename ParamType, typename Result>
+struct ex_fq_nr
+{
+ friend ResultType query(const ex_fq_nr&, ParamType) noexcept
+ {
+ return Result();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_fq_nr&, const ex_fq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_fq_nr&, const ex_fq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename ResultType, typename ParamType, typename Result>
+struct is_executor<ex_fq_nr<ResultType, ParamType, Result> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Param>
+struct query_free<
+ ex_fq_nr<ResultType, ParamType, Result>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, ParamType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ResultType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename CurrentType, typename OtherType>
+struct ex_mq_mr
+{
+ CurrentType query(CurrentType) const noexcept
+ {
+ return CurrentType();
+ }
+
+ CurrentType query(OtherType) const noexcept
+ {
+ return CurrentType();
+ }
+
+ ex_mq_mr<CurrentType, OtherType> require(
+ CurrentType) const noexcept
+ {
+ return ex_mq_mr<CurrentType, OtherType>();
+ }
+
+ ex_mq_mr<OtherType, CurrentType> require(
+ OtherType) const noexcept
+ {
+ return ex_mq_mr<OtherType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return false;
+ }
+};
+
+template <typename CurrentType>
+struct ex_mq_mr<CurrentType, CurrentType>
+{
+ CurrentType query(CurrentType) const noexcept
+ {
+ return CurrentType();
+ }
+
+ ex_mq_mr<CurrentType, CurrentType> require(
+ CurrentType) const noexcept
+ {
+ return ex_mq_mr<CurrentType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename CurrentType, typename OtherType>
+struct is_executor<ex_mq_mr<CurrentType, OtherType> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct query_member<
+ ex_mq_mr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ || asio::is_convertible<Param, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef CurrentType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_member<
+ ex_mq_mr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_mq_mr<CurrentType, OtherType> result_type;
+};
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_member<
+ ex_mq_mr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, OtherType>::value
+ && !asio::is_same<CurrentType, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_mq_mr<OtherType, CurrentType> result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename CurrentType, typename OtherType>
+struct ex_fq_fr
+{
+ friend CurrentType query(const ex_fq_fr&, CurrentType) noexcept
+ {
+ return CurrentType();
+ }
+
+ friend CurrentType query(const ex_fq_fr&, OtherType) noexcept
+ {
+ return CurrentType();
+ }
+
+ friend ex_fq_fr<CurrentType, OtherType> require(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, OtherType>();
+ }
+
+ friend ex_fq_fr<OtherType, CurrentType> require(
+ const ex_fq_fr&, OtherType) noexcept
+ {
+ return ex_fq_fr<OtherType, CurrentType>();
+ }
+
+ friend ex_fq_fr<CurrentType, OtherType> prefer(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, OtherType>();
+ }
+
+ friend ex_fq_fr<OtherType, CurrentType> prefer(
+ const ex_fq_fr&, OtherType) noexcept
+ {
+ return ex_fq_fr<OtherType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return false;
+ }
+};
+
+template <typename CurrentType>
+struct ex_fq_fr<CurrentType, CurrentType>
+{
+ friend CurrentType query(const ex_fq_fr&, CurrentType) noexcept
+ {
+ return CurrentType();
+ }
+
+ friend ex_fq_fr<CurrentType, CurrentType> require(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, CurrentType>();
+ }
+
+ friend ex_fq_fr<CurrentType, CurrentType> prefer(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename CurrentType, typename OtherType>
+struct is_executor<ex_fq_fr<CurrentType, OtherType> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct query_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ || asio::is_convertible<Param, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef CurrentType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_REQUIRE_FREE_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<CurrentType, OtherType> result_type;
+};
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, OtherType>::value
+ && !asio::is_same<CurrentType, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<OtherType, CurrentType> result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_REQUIRE_FREE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct prefer_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<CurrentType, OtherType> result_type;
+};
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct prefer_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, OtherType>::value
+ && !asio::is_same<CurrentType, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<OtherType, CurrentType> result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename Executor, typename Param, bool ExpectedResult>
+void test_can_query()
+{
+ constexpr bool b1 =
+ asio::can_query<Executor, Param>::value;
+ ASIO_CHECK(b1 == ExpectedResult);
+
+ constexpr bool b2 =
+ asio::can_query<const Executor, Param>::value;
+ ASIO_CHECK(b2 == ExpectedResult);
+
+ constexpr bool b3 =
+ asio::can_query<Executor&, Param>::value;
+ ASIO_CHECK(b3 == ExpectedResult);
+
+ constexpr bool b4 =
+ asio::can_query<const Executor&, Param>::value;
+ ASIO_CHECK(b4 == ExpectedResult);
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_query()
+{
+ exec::mapping_t result1 = asio::query(Executor(), Param());
+ ASIO_CHECK(result1 == ExpectedResult());
+
+ Executor ex1 = {};
+ exec::mapping_t result2 = asio::query(ex1, Param());
+ ASIO_CHECK(result2 == ExpectedResult());
+
+ const Executor ex2 = {};
+ exec::mapping_t result3 = asio::query(ex2, Param());
+ ASIO_CHECK(result3 == ExpectedResult());
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_constexpr_query()
+{
+ constexpr Executor ex1 = {};
+ constexpr exec::mapping_t result1 = asio::query(ex1, Param());
+ ASIO_CHECK(result1 == ExpectedResult());
+}
+
+template <typename Executor, typename Param, bool ExpectedResult>
+void test_can_require()
+{
+ constexpr bool b1 =
+ asio::can_require<Executor, Param>::value;
+ ASIO_CHECK(b1 == ExpectedResult);
+
+ constexpr bool b2 =
+ asio::can_require<const Executor, Param>::value;
+ ASIO_CHECK(b2 == ExpectedResult);
+
+ constexpr bool b3 =
+ asio::can_require<Executor&, Param>::value;
+ ASIO_CHECK(b3 == ExpectedResult);
+
+ constexpr bool b4 =
+ asio::can_require<const Executor&, Param>::value;
+ ASIO_CHECK(b4 == ExpectedResult);
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_require()
+{
+ ASIO_CHECK(
+ asio::query(
+ asio::require(Executor(), Param()),
+ Param()) == ExpectedResult());
+
+ Executor ex1 = {};
+ ASIO_CHECK(
+ asio::query(
+ asio::require(ex1, Param()),
+ Param()) == ExpectedResult());
+
+ const Executor ex2 = {};
+ ASIO_CHECK(
+ asio::query(
+ asio::require(ex2, Param()),
+ Param()) == ExpectedResult());
+}
+
+template <typename Executor, typename Param, bool ExpectedResult>
+void test_can_prefer()
+{
+ constexpr bool b1 =
+ asio::can_prefer<Executor, Param>::value;
+ ASIO_CHECK(b1 == ExpectedResult);
+
+ constexpr bool b2 =
+ asio::can_prefer<const Executor, Param>::value;
+ ASIO_CHECK(b2 == ExpectedResult);
+
+ constexpr bool b3 =
+ asio::can_prefer<Executor&, Param>::value;
+ ASIO_CHECK(b3 == ExpectedResult);
+
+ constexpr bool b4 =
+ asio::can_prefer<const Executor&, Param>::value;
+ ASIO_CHECK(b4 == ExpectedResult);
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_prefer()
+{
+ ASIO_CHECK(
+ s(asio::query(
+ asio::prefer(Executor(), Param()),
+ s())) == s(ExpectedResult()));
+
+ Executor ex1 = {};
+ ASIO_CHECK(
+ s(asio::query(
+ asio::prefer(ex1, Param()),
+ s())) == s(ExpectedResult()));
+
+ const Executor ex2 = {};
+ ASIO_CHECK(
+ s(asio::query(
+ asio::prefer(ex2, Param()),
+ s())) == s(ExpectedResult()));
+}
+
+void test_vars()
+{
+ ASIO_CHECK(s() == exec::mapping);
+ ASIO_CHECK(s() != exec::mapping.thread);
+ ASIO_CHECK(s() != exec::mapping.new_thread);
+ ASIO_CHECK(s() != exec::mapping.other);
+ ASIO_CHECK(n1() == exec::mapping.thread);
+ ASIO_CHECK(n1() != exec::mapping.new_thread);
+ ASIO_CHECK(n1() != exec::mapping.other);
+ ASIO_CHECK(n2() == exec::mapping.new_thread);
+ ASIO_CHECK(n2() != exec::mapping.thread);
+ ASIO_CHECK(n2() != exec::mapping.other);
+ ASIO_CHECK(n3() == exec::mapping.other);
+ ASIO_CHECK(n3() != exec::mapping.thread);
+ ASIO_CHECK(n3() != exec::mapping.new_thread);
+}
+
+ASIO_TEST_SUITE
+(
+ "mapping",
+
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, s, true>)
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n1, true>)
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n2, false>)
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n3, false>)
+
+ ASIO_TEST_CASE3(test_query<ex_nq_nr, s, n1>)
+ ASIO_TEST_CASE3(test_query<ex_nq_nr, n1, n1>)
+
+ ASIO_TEST_CASE3(test_constexpr_query<ex_nq_nr, s, n1>)
+ ASIO_TEST_CASE3(test_constexpr_query<ex_nq_nr, n1, n1>)
+
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, s, false>)
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n1, true>)
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n2, false>)
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n3, false>)
+
+ ASIO_TEST_CASE3(test_require<ex_nq_nr, n1, n1>)
+
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, s, false>)
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n1, true>)
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n2, true>)
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n3, true>)
+
+ ASIO_TEST_CASE3(test_prefer<ex_nq_nr, n1, n1>)
+ ASIO_TEST_CASE3(test_prefer<ex_nq_nr, n2, n1>)
+ ASIO_TEST_CASE3(test_prefer<ex_nq_nr, n3, n1>)
+
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n3, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n3, s, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n3, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n3, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n3, s, n3>, n3, true>)
+
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n3, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n3, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n3, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n3, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n3, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n3, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n3, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n3, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n3, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n3, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n3, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n3, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n3, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n3, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n3, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n3, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n3, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n3, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n3, s, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n3, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n3, s, n3>, n3, true>)
+
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<n2, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n3, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n3, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n3, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n3, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n3, s, n3>, n3, true>)
+
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n3, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n3, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n3, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n3, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n3, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n3, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n3, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n3, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n1, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n2, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n2, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n3, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n3, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n3, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n3, s, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n3, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n3, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n3, s, n3>, n3, true>)
+
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n3, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n3, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n3, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n3, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n3, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n3, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n3, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n3, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n3, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n3, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n3, s, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n3, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n3, s, n3>, n3, false>)
+
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n3, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n3, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n3, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n3, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n3, s, n3>, n3, true>)
+
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n3, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n3, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n3, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n3, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n3, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n3, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n3, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n3, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n1, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n2, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n2, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n3, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n3, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n3, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n3, s, n3>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n3, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n3, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n3, s, n3>, n3, true>)
+
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n3, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n3, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n3, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n3, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n3, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n3, s, n3>, s, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n3, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n3, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n3, n3>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n3, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n3, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n3, s, n3>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n3, s, n3>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n3, s, n3>, n3, false>)
+
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n3, n3>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n3, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n3, s, n3>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n3, s, n3>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n3, s, n3>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n3, s, n3>, n3, true>)
+
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n3, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n3, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n3, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n3, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n3, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n3, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n3, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n3, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n3, n3>, n3, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n1, s, n1>, n3, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n2, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n2, s, n2>, n3, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n3, s, n3>, n1, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n3, s, n3>, n2, n3>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n3, s, n3>, n3, n3>)
+
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n3>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n3>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n3>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n3>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n3, n3>, n3, true>)
+
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n1>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n2>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n3>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n3>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n1>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n2>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n3>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n3>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n3, n1>, s, n3>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n3, n1>, n3, n3>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n3, n2>, s, n3>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n3, n2>, n3, n3>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n3, n3>, s, n3>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n3, n3>, n3, n3>)
+
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n3>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n3, n3>, n3, true>)
+
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n3>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n3>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n3, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n3, n1>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n3, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n3, n2>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n3, n3>, n3, n3>)
+
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n3>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n3>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n3>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n3, n3>, n3, true>)
+
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n1>, n2, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n1>, n3, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n2>, n3, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n3>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n3>, n2, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n1>, n3, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n2>, n1, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n2>, n3, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n3>, n1, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n3>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n3, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n3, n1>, n2, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n3, n1>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n3, n2>, n1, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n3, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n3, n2>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n3, n3>, n1, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n3, n3>, n2, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n3, n3>, n3, n3>)
+
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n3>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n3>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n3>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n3>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n3, n3>, n3, true>)
+
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n1>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n2>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n3>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n3>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n1>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n2>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n3>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n3>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n3, n1>, s, n3>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n3, n1>, n3, n3>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n3, n2>, s, n3>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n3, n2>, n3, n3>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n3, n3>, s, n3>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n3, n3>, n3, n3>)
+
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n3, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n3>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n3>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n3>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n3, n3>, n3, true>)
+
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n3>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n3>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n3, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n3, n1>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n3, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n3, n2>, n3, n3>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n3, n3>, n3, n3>)
+
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n3>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n3>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n3>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n1>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n2>, n3, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n3>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n3>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n3>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n3, n3>, n3, true>)
+
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n1>, n2, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n1>, n3, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n2>, n3, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n3>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n3>, n2, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n1>, n3, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n2>, n1, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n2>, n3, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n3>, n1, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n3>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n3>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n3, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n3, n1>, n2, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n3, n1>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n3, n2>, n1, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n3, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n3, n2>, n3, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n3, n3>, n1, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n3, n3>, n2, n3>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n3, n3>, n3, n3>)
+
+ ASIO_TEST_CASE(test_vars)
+)
diff --git a/3rdparty/asio/src/tests/unit/execution/outstanding_work.cpp b/3rdparty/asio/src/tests/unit/execution/outstanding_work.cpp
new file mode 100644
index 00000000000..cddd0b52c23
--- /dev/null
+++ b/3rdparty/asio/src/tests/unit/execution/outstanding_work.cpp
@@ -0,0 +1,1252 @@
+//
+// outstanding_work.cpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// 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)
+//
+
+// 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/outstanding_work.hpp"
+
+#include "asio/prefer.hpp"
+#include "asio/query.hpp"
+#include "asio/require.hpp"
+#include "../unit_test.hpp"
+
+namespace exec = asio::execution;
+
+typedef exec::outstanding_work_t s;
+typedef exec::outstanding_work_t::untracked_t n1;
+typedef exec::outstanding_work_t::tracked_t n2;
+
+struct ex_nq_nr
+{
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_nq_nr&, const ex_nq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_nq_nr&, const ex_nq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <>
+struct is_executor<ex_nq_nr> : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+template <typename ResultType, typename ParamType, typename Result>
+struct ex_cq_nr
+{
+ static constexpr ResultType query(ParamType) noexcept
+ {
+ return Result();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_cq_nr&, const ex_cq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_cq_nr&, const ex_cq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename ResultType, typename ParamType, typename Result>
+struct is_executor<ex_cq_nr<ResultType, ParamType, Result> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Param>
+struct query_static_constexpr_member<
+ ex_cq_nr<ResultType, ParamType, Result>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, ParamType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef Result result_type; // Must return raw result type.
+
+ static constexpr result_type value()
+ {
+ return Result();
+ }
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename ResultType, typename ParamType, typename Result>
+struct ex_mq_nr
+{
+ ResultType query(ParamType) const noexcept
+ {
+ return Result();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_mq_nr&, const ex_mq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_mq_nr&, const ex_mq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename ResultType, typename ParamType, typename Result>
+struct is_executor<ex_mq_nr<ResultType, ParamType, Result> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Param>
+struct query_member<
+ ex_mq_nr<ResultType, ParamType, Result>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, ParamType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ResultType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename ResultType, typename ParamType, typename Result>
+struct ex_fq_nr
+{
+ friend ResultType query(const ex_fq_nr&, ParamType) noexcept
+ {
+ return Result();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_fq_nr&, const ex_fq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_fq_nr&, const ex_fq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename ResultType, typename ParamType, typename Result>
+struct is_executor<ex_fq_nr<ResultType, ParamType, Result> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Param>
+struct query_free<
+ ex_fq_nr<ResultType, ParamType, Result>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, ParamType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ResultType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename CurrentType, typename OtherType>
+struct ex_mq_mr
+{
+ CurrentType query(CurrentType) const noexcept
+ {
+ return CurrentType();
+ }
+
+ CurrentType query(OtherType) const noexcept
+ {
+ return CurrentType();
+ }
+
+ ex_mq_mr<CurrentType, OtherType> require(
+ CurrentType) const noexcept
+ {
+ return ex_mq_mr<CurrentType, OtherType>();
+ }
+
+ ex_mq_mr<OtherType, CurrentType> require(
+ OtherType) const noexcept
+ {
+ return ex_mq_mr<OtherType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return false;
+ }
+};
+
+template <typename CurrentType>
+struct ex_mq_mr<CurrentType, CurrentType>
+{
+ CurrentType query(CurrentType) const noexcept
+ {
+ return CurrentType();
+ }
+
+ ex_mq_mr<CurrentType, CurrentType> require(
+ CurrentType) const noexcept
+ {
+ return ex_mq_mr<CurrentType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename CurrentType, typename OtherType>
+struct is_executor<ex_mq_mr<CurrentType, OtherType> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct query_member<
+ ex_mq_mr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ || asio::is_convertible<Param, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef CurrentType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_member<
+ ex_mq_mr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_mq_mr<CurrentType, OtherType> result_type;
+};
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_member<
+ ex_mq_mr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, OtherType>::value
+ && !asio::is_same<CurrentType, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_mq_mr<OtherType, CurrentType> result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename CurrentType, typename OtherType>
+struct ex_fq_fr
+{
+ friend CurrentType query(const ex_fq_fr&, CurrentType) noexcept
+ {
+ return CurrentType();
+ }
+
+ friend CurrentType query(const ex_fq_fr&, OtherType) noexcept
+ {
+ return CurrentType();
+ }
+
+ friend ex_fq_fr<CurrentType, OtherType> require(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, OtherType>();
+ }
+
+ friend ex_fq_fr<OtherType, CurrentType> require(
+ const ex_fq_fr&, OtherType) noexcept
+ {
+ return ex_fq_fr<OtherType, CurrentType>();
+ }
+
+ friend ex_fq_fr<CurrentType, OtherType> prefer(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, OtherType>();
+ }
+
+ friend ex_fq_fr<OtherType, CurrentType> prefer(
+ const ex_fq_fr&, OtherType) noexcept
+ {
+ return ex_fq_fr<OtherType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return false;
+ }
+};
+
+template <typename CurrentType>
+struct ex_fq_fr<CurrentType, CurrentType>
+{
+ friend CurrentType query(const ex_fq_fr&, CurrentType) noexcept
+ {
+ return CurrentType();
+ }
+
+ friend ex_fq_fr<CurrentType, CurrentType> require(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, CurrentType>();
+ }
+
+ friend ex_fq_fr<CurrentType, CurrentType> prefer(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename CurrentType, typename OtherType>
+struct is_executor<ex_fq_fr<CurrentType, OtherType> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct query_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ || asio::is_convertible<Param, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef CurrentType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_REQUIRE_FREE_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<CurrentType, OtherType> result_type;
+};
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, OtherType>::value
+ && !asio::is_same<CurrentType, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<OtherType, CurrentType> result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_REQUIRE_FREE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct prefer_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<CurrentType, OtherType> result_type;
+};
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct prefer_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, OtherType>::value
+ && !asio::is_same<CurrentType, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<OtherType, CurrentType> result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename Executor, typename Param, bool ExpectedResult>
+void test_can_query()
+{
+ constexpr bool b1 =
+ asio::can_query<Executor, Param>::value;
+ ASIO_CHECK(b1 == ExpectedResult);
+
+ constexpr bool b2 =
+ asio::can_query<const Executor, Param>::value;
+ ASIO_CHECK(b2 == ExpectedResult);
+
+ constexpr bool b3 =
+ asio::can_query<Executor&, Param>::value;
+ ASIO_CHECK(b3 == ExpectedResult);
+
+ constexpr bool b4 =
+ asio::can_query<const Executor&, Param>::value;
+ ASIO_CHECK(b4 == ExpectedResult);
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_query()
+{
+ exec::outstanding_work_t result1 = asio::query(Executor(), Param());
+ ASIO_CHECK(result1 == ExpectedResult());
+
+ Executor ex1 = {};
+ exec::outstanding_work_t result2 = asio::query(ex1, Param());
+ ASIO_CHECK(result2 == ExpectedResult());
+
+ const Executor ex2 = {};
+ exec::outstanding_work_t result3 = asio::query(ex2, Param());
+ ASIO_CHECK(result3 == ExpectedResult());
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_constexpr_query()
+{
+ constexpr Executor ex1 = {};
+ constexpr exec::outstanding_work_t result1 = asio::query(ex1, Param());
+ ASIO_CHECK(result1 == ExpectedResult());
+}
+
+template <typename Executor, typename Param, bool ExpectedResult>
+void test_can_require()
+{
+ constexpr bool b1 =
+ asio::can_require<Executor, Param>::value;
+ ASIO_CHECK(b1 == ExpectedResult);
+
+ constexpr bool b2 =
+ asio::can_require<const Executor, Param>::value;
+ ASIO_CHECK(b2 == ExpectedResult);
+
+ constexpr bool b3 =
+ asio::can_require<Executor&, Param>::value;
+ ASIO_CHECK(b3 == ExpectedResult);
+
+ constexpr bool b4 =
+ asio::can_require<const Executor&, Param>::value;
+ ASIO_CHECK(b4 == ExpectedResult);
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_require()
+{
+ ASIO_CHECK(
+ asio::query(
+ asio::require(Executor(), Param()),
+ Param()) == ExpectedResult());
+
+ Executor ex1 = {};
+ ASIO_CHECK(
+ asio::query(
+ asio::require(ex1, Param()),
+ Param()) == ExpectedResult());
+
+ const Executor ex2 = {};
+ ASIO_CHECK(
+ asio::query(
+ asio::require(ex2, Param()),
+ Param()) == ExpectedResult());
+}
+
+template <typename Executor, typename Param, bool ExpectedResult>
+void test_can_prefer()
+{
+ constexpr bool b1 =
+ asio::can_prefer<Executor, Param>::value;
+ ASIO_CHECK(b1 == ExpectedResult);
+
+ constexpr bool b2 =
+ asio::can_prefer<const Executor, Param>::value;
+ ASIO_CHECK(b2 == ExpectedResult);
+
+ constexpr bool b3 =
+ asio::can_prefer<Executor&, Param>::value;
+ ASIO_CHECK(b3 == ExpectedResult);
+
+ constexpr bool b4 =
+ asio::can_prefer<const Executor&, Param>::value;
+ ASIO_CHECK(b4 == ExpectedResult);
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_prefer()
+{
+ ASIO_CHECK(
+ s(asio::query(
+ asio::prefer(Executor(), Param()),
+ s())) == s(ExpectedResult()));
+
+ Executor ex1 = {};
+ ASIO_CHECK(
+ s(asio::query(
+ asio::prefer(ex1, Param()),
+ s())) == s(ExpectedResult()));
+
+ const Executor ex2 = {};
+ ASIO_CHECK(
+ s(asio::query(
+ asio::prefer(ex2, Param()),
+ s())) == s(ExpectedResult()));
+}
+
+void test_vars()
+{
+ ASIO_CHECK(s() == exec::outstanding_work);
+ ASIO_CHECK(s() != exec::outstanding_work.untracked);
+ ASIO_CHECK(s() != exec::outstanding_work.tracked);
+ ASIO_CHECK(n1() == exec::outstanding_work.untracked);
+ ASIO_CHECK(n1() != exec::outstanding_work.tracked);
+ ASIO_CHECK(n2() == exec::outstanding_work.tracked);
+ ASIO_CHECK(n2() != exec::outstanding_work.untracked);
+}
+
+ASIO_TEST_SUITE
+(
+ "outstanding_work",
+
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, s, true>)
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n1, true>)
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n2, false>)
+
+ ASIO_TEST_CASE3(test_query<ex_nq_nr, s, n1>)
+ ASIO_TEST_CASE3(test_query<ex_nq_nr, n1, n1>)
+
+ ASIO_TEST_CASE3(test_constexpr_query<ex_nq_nr, s, n1>)
+ ASIO_TEST_CASE3(test_constexpr_query<ex_nq_nr, n1, n1>)
+
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, s, false>)
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n1, true>)
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n2, false>)
+
+ ASIO_TEST_CASE3(test_require<ex_nq_nr, n1, n1>)
+
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, s, false>)
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n1, true>)
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n2, true>)
+
+ ASIO_TEST_CASE3(test_prefer<ex_nq_nr, n1, n1>)
+ ASIO_TEST_CASE3(test_prefer<ex_nq_nr, n2, n1>)
+
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n2, false>)
+
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n2, false>)
+
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n1>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n2>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n1>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n2>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n1>, n2, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n2>, n1, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n1>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n2>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n1>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n2>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n1>, n2, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n2>, n1, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE(test_vars)
+)
diff --git a/3rdparty/asio/src/tests/unit/execution/prefer_only.cpp b/3rdparty/asio/src/tests/unit/execution/prefer_only.cpp
new file mode 100644
index 00000000000..60500002475
--- /dev/null
+++ b/3rdparty/asio/src/tests/unit/execution/prefer_only.cpp
@@ -0,0 +1,533 @@
+//
+// prefer_only.cpp
+// ~~~~~~~~~~~~~~~
+//
+// 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)
+//
+
+// 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/prefer_only.hpp"
+
+#include <functional>
+#include "asio/execution/any_executor.hpp"
+#include "../unit_test.hpp"
+
+using namespace asio;
+namespace bindns = std;
+
+static int possibly_blocking_count = 0;
+static int never_blocking_count = 0;
+
+struct possibly_blocking_executor
+{
+ template <typename F>
+ void execute(const F&) const
+ {
+ ++possibly_blocking_count;
+ }
+
+ friend bool operator==(const possibly_blocking_executor&,
+ const possibly_blocking_executor&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const possibly_blocking_executor&,
+ const possibly_blocking_executor&) noexcept
+ {
+ return false;
+ }
+};
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+template <typename F>
+struct execute_member<possibly_blocking_executor, F>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+ typedef void result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+template <>
+struct equality_comparable<possibly_blocking_executor>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+struct never_blocking_executor
+{
+ static constexpr execution::blocking_t::never_t
+ query(execution::blocking_t) noexcept
+ {
+ return execution::blocking_t::never_t();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ ++never_blocking_count;
+ }
+
+ friend bool operator==(const never_blocking_executor&,
+ const never_blocking_executor&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const never_blocking_executor&,
+ const never_blocking_executor&) noexcept
+ {
+ return false;
+ }
+};
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+template <typename F>
+struct execute_member<never_blocking_executor, F>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+ typedef void result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+template <>
+struct equality_comparable<never_blocking_executor>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
+
+template <typename Param>
+struct query_static_constexpr_member<
+ never_blocking_executor, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, execution::blocking_t>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef execution::blocking_t::never_t result_type;
+
+ static constexpr result_type value()
+ {
+ return result_type();
+ }
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+struct either_blocking_executor
+{
+ execution::blocking_t blocking_;
+
+ explicit either_blocking_executor(execution::blocking_t b)
+ : blocking_(b)
+ {
+ }
+
+ execution::blocking_t query(execution::blocking_t) const noexcept
+ {
+ return blocking_;
+ }
+
+ either_blocking_executor require(execution::blocking_t::possibly_t) const
+ {
+ return either_blocking_executor(execution::blocking.possibly);
+ }
+
+ either_blocking_executor require(execution::blocking_t::never_t) const
+ {
+ return either_blocking_executor(execution::blocking.never);
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ if (blocking_ == execution::blocking.never)
+ ++never_blocking_count;
+ else
+ ++possibly_blocking_count;
+ }
+
+ friend bool operator==(const either_blocking_executor& a,
+ const either_blocking_executor& b) noexcept
+ {
+ return a.blocking_ == b.blocking_;
+ }
+
+ friend bool operator!=(const either_blocking_executor& a,
+ const either_blocking_executor& b) noexcept
+ {
+ return a.blocking_ != b.blocking_;
+ }
+};
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+template <typename F>
+struct execute_member<either_blocking_executor, F>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+ typedef void result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+template <>
+struct equality_comparable<either_blocking_executor>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+template <typename Param>
+struct query_member<
+ either_blocking_executor, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, execution::blocking_t>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef execution::blocking_t result_type;
+};
+
+#if !defined(ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+template <typename Param>
+struct require_member<
+ either_blocking_executor, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, execution::blocking_t>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = false;
+
+ typedef either_blocking_executor result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+void prefer_only_executor_query_test()
+{
+ typedef execution::any_executor<
+ execution::blocking_t,
+ execution::prefer_only<execution::blocking_t::possibly_t>,
+ execution::prefer_only<execution::blocking_t::never_t>
+ > executor_type;
+
+ executor_type ex1 = possibly_blocking_executor();
+
+ ASIO_CHECK(
+ asio::query(ex1, execution::blocking)
+ == execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex1, execution::blocking.possibly)
+ == execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex1, execution::blocking.never)
+ == execution::blocking.possibly);
+
+ executor_type ex2 = asio::prefer(ex1, execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex2, execution::blocking)
+ == execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex2, execution::blocking.possibly)
+ == execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex2, execution::blocking.never)
+ == execution::blocking.possibly);
+
+ executor_type ex3 = asio::prefer(ex1, execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex3, execution::blocking)
+ == execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex3, execution::blocking.possibly)
+ == execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex3, execution::blocking.never)
+ == execution::blocking.possibly);
+
+ executor_type ex4 = never_blocking_executor();
+
+ ASIO_CHECK(
+ asio::query(ex4, execution::blocking)
+ == execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex4, execution::blocking.possibly)
+ == execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex4, execution::blocking.never)
+ == execution::blocking.never);
+
+ executor_type ex5 = asio::prefer(ex4, execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex5, execution::blocking)
+ == execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex5, execution::blocking.possibly)
+ == execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex5, execution::blocking.never)
+ == execution::blocking.never);
+
+ executor_type ex6 = asio::prefer(ex4, execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex6, execution::blocking)
+ == execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex6, execution::blocking.possibly)
+ == execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex6, execution::blocking.never)
+ == execution::blocking.never);
+
+ executor_type ex7 = either_blocking_executor(execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex7, execution::blocking)
+ == execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex7, execution::blocking.possibly)
+ == execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex7, execution::blocking.never)
+ == execution::blocking.possibly);
+
+ executor_type ex8 = asio::prefer(ex7, execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex8, execution::blocking)
+ == execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex8, execution::blocking.possibly)
+ == execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex8, execution::blocking.never)
+ == execution::blocking.possibly);
+
+ executor_type ex9 = asio::prefer(ex7, execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex9, execution::blocking)
+ == execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex9, execution::blocking.possibly)
+ == execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex9, execution::blocking.never)
+ == execution::blocking.never);
+
+ executor_type ex10 = either_blocking_executor(execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex10, execution::blocking)
+ == execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex10, execution::blocking.possibly)
+ == execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex10, execution::blocking.never)
+ == execution::blocking.never);
+
+ executor_type ex11 = asio::prefer(ex7, execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex11, execution::blocking)
+ == execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex11, execution::blocking.possibly)
+ == execution::blocking.possibly);
+
+ ASIO_CHECK(
+ asio::query(ex11, execution::blocking.never)
+ == execution::blocking.possibly);
+
+ executor_type ex12 = asio::prefer(ex7, execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex12, execution::blocking)
+ == execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex12, execution::blocking.possibly)
+ == execution::blocking.never);
+
+ ASIO_CHECK(
+ asio::query(ex12, execution::blocking.never)
+ == execution::blocking.never);
+}
+
+void do_nothing()
+{
+}
+
+void prefer_only_executor_execute_test()
+{
+ typedef execution::any_executor<
+ execution::blocking_t,
+ execution::prefer_only<execution::blocking_t::possibly_t>,
+ execution::prefer_only<execution::blocking_t::never_t>
+ > executor_type;
+
+ executor_type ex1 = possibly_blocking_executor();
+
+ ex1.execute(&do_nothing);
+ ASIO_CHECK(possibly_blocking_count == 1);
+ ASIO_CHECK(never_blocking_count == 0);
+
+ executor_type ex2 = asio::prefer(ex1, execution::blocking.possibly);
+
+ ex2.execute(&do_nothing);
+ ASIO_CHECK(possibly_blocking_count == 2);
+ ASIO_CHECK(never_blocking_count == 0);
+
+ executor_type ex3 = asio::prefer(ex1, execution::blocking.never);
+
+ ex3.execute(&do_nothing);
+ ASIO_CHECK(possibly_blocking_count == 3);
+ ASIO_CHECK(never_blocking_count == 0);
+
+ executor_type ex4 = never_blocking_executor();
+
+ ex4.execute(&do_nothing);
+ ASIO_CHECK(possibly_blocking_count == 3);
+ ASIO_CHECK(never_blocking_count == 1);
+
+ executor_type ex5 = asio::prefer(ex4, execution::blocking.possibly);
+
+ ex5.execute(&do_nothing);
+ ASIO_CHECK(possibly_blocking_count == 3);
+ ASIO_CHECK(never_blocking_count == 2);
+
+ executor_type ex6 = asio::prefer(ex4, execution::blocking.never);
+
+ ex6.execute(&do_nothing);
+ ASIO_CHECK(possibly_blocking_count == 3);
+ ASIO_CHECK(never_blocking_count == 3);
+
+ executor_type ex7 = either_blocking_executor(execution::blocking.possibly);
+
+ ex7.execute(&do_nothing);
+ ASIO_CHECK(possibly_blocking_count == 4);
+ ASIO_CHECK(never_blocking_count == 3);
+
+ executor_type ex8 = asio::prefer(ex7, execution::blocking.possibly);
+
+ ex8.execute(&do_nothing);
+ ASIO_CHECK(possibly_blocking_count == 5);
+ ASIO_CHECK(never_blocking_count == 3);
+
+ executor_type ex9 = asio::prefer(ex7, execution::blocking.never);
+
+ ex9.execute(&do_nothing);
+ ASIO_CHECK(possibly_blocking_count == 5);
+ ASIO_CHECK(never_blocking_count == 4);
+
+ executor_type ex10 = either_blocking_executor(execution::blocking.never);
+
+ ex10.execute(&do_nothing);
+ ASIO_CHECK(possibly_blocking_count == 5);
+ ASIO_CHECK(never_blocking_count == 5);
+
+ executor_type ex11 = asio::prefer(ex7, execution::blocking.possibly);
+
+ ex11.execute(&do_nothing);
+ ASIO_CHECK(possibly_blocking_count == 6);
+ ASIO_CHECK(never_blocking_count == 5);
+
+ executor_type ex12 = asio::prefer(ex7, execution::blocking.never);
+
+ ex12.execute(&do_nothing);
+ ASIO_CHECK(possibly_blocking_count == 6);
+ ASIO_CHECK(never_blocking_count == 6);
+}
+
+ASIO_TEST_SUITE
+(
+ "prefer_only",
+ ASIO_TEST_CASE(prefer_only_executor_query_test)
+ ASIO_TEST_CASE(prefer_only_executor_execute_test)
+)
diff --git a/3rdparty/asio/src/tests/unit/execution/relationship.cpp b/3rdparty/asio/src/tests/unit/execution/relationship.cpp
new file mode 100644
index 00000000000..a91144e8125
--- /dev/null
+++ b/3rdparty/asio/src/tests/unit/execution/relationship.cpp
@@ -0,0 +1,1252 @@
+//
+// relationship.cpp
+// ~~~~~~~~~~~~~~~~
+//
+// 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)
+//
+
+// 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/relationship.hpp"
+
+#include "asio/prefer.hpp"
+#include "asio/query.hpp"
+#include "asio/require.hpp"
+#include "../unit_test.hpp"
+
+namespace exec = asio::execution;
+
+typedef exec::relationship_t s;
+typedef exec::relationship_t::fork_t n1;
+typedef exec::relationship_t::continuation_t n2;
+
+struct ex_nq_nr
+{
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_nq_nr&, const ex_nq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_nq_nr&, const ex_nq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <>
+struct is_executor<ex_nq_nr> : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+template <typename ResultType, typename ParamType, typename Result>
+struct ex_cq_nr
+{
+ static constexpr ResultType query(ParamType) noexcept
+ {
+ return Result();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_cq_nr&, const ex_cq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_cq_nr&, const ex_cq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename ResultType, typename ParamType, typename Result>
+struct is_executor<ex_cq_nr<ResultType, ParamType, Result> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Param>
+struct query_static_constexpr_member<
+ ex_cq_nr<ResultType, ParamType, Result>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, ParamType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef Result result_type; // Must return raw result type.
+
+ static constexpr result_type value()
+ {
+ return Result();
+ }
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename ResultType, typename ParamType, typename Result>
+struct ex_mq_nr
+{
+ ResultType query(ParamType) const noexcept
+ {
+ return Result();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_mq_nr&, const ex_mq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_mq_nr&, const ex_mq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename ResultType, typename ParamType, typename Result>
+struct is_executor<ex_mq_nr<ResultType, ParamType, Result> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Param>
+struct query_member<
+ ex_mq_nr<ResultType, ParamType, Result>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, ParamType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ResultType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename ResultType, typename ParamType, typename Result>
+struct ex_fq_nr
+{
+ friend ResultType query(const ex_fq_nr&, ParamType) noexcept
+ {
+ return Result();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_fq_nr&, const ex_fq_nr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_fq_nr&, const ex_fq_nr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename ResultType, typename ParamType, typename Result>
+struct is_executor<ex_fq_nr<ResultType, ParamType, Result> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+template <typename ResultType, typename ParamType,
+ typename Result, typename Param>
+struct query_free<
+ ex_fq_nr<ResultType, ParamType, Result>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, ParamType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ResultType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename CurrentType, typename OtherType>
+struct ex_mq_mr
+{
+ CurrentType query(CurrentType) const noexcept
+ {
+ return CurrentType();
+ }
+
+ CurrentType query(OtherType) const noexcept
+ {
+ return CurrentType();
+ }
+
+ ex_mq_mr<CurrentType, OtherType> require(
+ CurrentType) const noexcept
+ {
+ return ex_mq_mr<CurrentType, OtherType>();
+ }
+
+ ex_mq_mr<OtherType, CurrentType> require(
+ OtherType) const noexcept
+ {
+ return ex_mq_mr<OtherType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return false;
+ }
+};
+
+template <typename CurrentType>
+struct ex_mq_mr<CurrentType, CurrentType>
+{
+ CurrentType query(CurrentType) const noexcept
+ {
+ return CurrentType();
+ }
+
+ ex_mq_mr<CurrentType, CurrentType> require(
+ CurrentType) const noexcept
+ {
+ return ex_mq_mr<CurrentType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_mq_mr&, const ex_mq_mr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename CurrentType, typename OtherType>
+struct is_executor<ex_mq_mr<CurrentType, OtherType> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct query_member<
+ ex_mq_mr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ || asio::is_convertible<Param, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef CurrentType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_member<
+ ex_mq_mr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_mq_mr<CurrentType, OtherType> result_type;
+};
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_member<
+ ex_mq_mr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, OtherType>::value
+ && !asio::is_same<CurrentType, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_mq_mr<OtherType, CurrentType> result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename CurrentType, typename OtherType>
+struct ex_fq_fr
+{
+ friend CurrentType query(const ex_fq_fr&, CurrentType) noexcept
+ {
+ return CurrentType();
+ }
+
+ friend CurrentType query(const ex_fq_fr&, OtherType) noexcept
+ {
+ return CurrentType();
+ }
+
+ friend ex_fq_fr<CurrentType, OtherType> require(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, OtherType>();
+ }
+
+ friend ex_fq_fr<OtherType, CurrentType> require(
+ const ex_fq_fr&, OtherType) noexcept
+ {
+ return ex_fq_fr<OtherType, CurrentType>();
+ }
+
+ friend ex_fq_fr<CurrentType, OtherType> prefer(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, OtherType>();
+ }
+
+ friend ex_fq_fr<OtherType, CurrentType> prefer(
+ const ex_fq_fr&, OtherType) noexcept
+ {
+ return ex_fq_fr<OtherType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return false;
+ }
+};
+
+template <typename CurrentType>
+struct ex_fq_fr<CurrentType, CurrentType>
+{
+ friend CurrentType query(const ex_fq_fr&, CurrentType) noexcept
+ {
+ return CurrentType();
+ }
+
+ friend ex_fq_fr<CurrentType, CurrentType> require(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, CurrentType>();
+ }
+
+ friend ex_fq_fr<CurrentType, CurrentType> prefer(
+ const ex_fq_fr&, CurrentType) noexcept
+ {
+ return ex_fq_fr<CurrentType, CurrentType>();
+ }
+
+ template <typename F>
+ void execute(const F&) const
+ {
+ }
+
+ friend bool operator==(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return true;
+ }
+
+ friend bool operator!=(const ex_fq_fr&, const ex_fq_fr&) noexcept
+ {
+ return false;
+ }
+};
+
+#if !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace execution {
+
+template <typename CurrentType, typename OtherType>
+struct is_executor<ex_fq_fr<CurrentType, OtherType> >
+ : asio::true_type
+{
+};
+
+} // namespace execution
+} // namespace asio
+
+#endif // !defined(ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
+
+namespace asio {
+namespace traits {
+
+#if !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct query_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ || asio::is_convertible<Param, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef CurrentType result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_REQUIRE_FREE_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<CurrentType, OtherType> result_type;
+};
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct require_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, OtherType>::value
+ && !asio::is_same<CurrentType, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<OtherType, CurrentType> result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_REQUIRE_FREE_TRAIT)
+
+#if !defined(ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct prefer_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, CurrentType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<CurrentType, OtherType> result_type;
+};
+
+template <typename CurrentType, typename OtherType, typename Param>
+struct prefer_free<
+ ex_fq_fr<CurrentType, OtherType>, Param,
+ typename asio::enable_if<
+ asio::is_convertible<Param, OtherType>::value
+ && !asio::is_same<CurrentType, OtherType>::value
+ >::type>
+{
+ static constexpr bool is_valid = true;
+ static constexpr bool is_noexcept = true;
+
+ typedef ex_fq_fr<OtherType, CurrentType> result_type;
+};
+
+#endif // !defined(ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
+
+} // namespace traits
+} // namespace asio
+
+template <typename Executor, typename Param, bool ExpectedResult>
+void test_can_query()
+{
+ constexpr bool b1 =
+ asio::can_query<Executor, Param>::value;
+ ASIO_CHECK(b1 == ExpectedResult);
+
+ constexpr bool b2 =
+ asio::can_query<const Executor, Param>::value;
+ ASIO_CHECK(b2 == ExpectedResult);
+
+ constexpr bool b3 =
+ asio::can_query<Executor&, Param>::value;
+ ASIO_CHECK(b3 == ExpectedResult);
+
+ constexpr bool b4 =
+ asio::can_query<const Executor&, Param>::value;
+ ASIO_CHECK(b4 == ExpectedResult);
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_query()
+{
+ exec::relationship_t result1 = asio::query(Executor(), Param());
+ ASIO_CHECK(result1 == ExpectedResult());
+
+ Executor ex1 = {};
+ exec::relationship_t result2 = asio::query(ex1, Param());
+ ASIO_CHECK(result2 == ExpectedResult());
+
+ const Executor ex2 = {};
+ exec::relationship_t result3 = asio::query(ex2, Param());
+ ASIO_CHECK(result3 == ExpectedResult());
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_constexpr_query()
+{
+ constexpr Executor ex1 = {};
+ constexpr exec::relationship_t result1 = asio::query(ex1, Param());
+ ASIO_CHECK(result1 == ExpectedResult());
+}
+
+template <typename Executor, typename Param, bool ExpectedResult>
+void test_can_require()
+{
+ constexpr bool b1 =
+ asio::can_require<Executor, Param>::value;
+ ASIO_CHECK(b1 == ExpectedResult);
+
+ constexpr bool b2 =
+ asio::can_require<const Executor, Param>::value;
+ ASIO_CHECK(b2 == ExpectedResult);
+
+ constexpr bool b3 =
+ asio::can_require<Executor&, Param>::value;
+ ASIO_CHECK(b3 == ExpectedResult);
+
+ constexpr bool b4 =
+ asio::can_require<const Executor&, Param>::value;
+ ASIO_CHECK(b4 == ExpectedResult);
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_require()
+{
+ ASIO_CHECK(
+ asio::query(
+ asio::require(Executor(), Param()),
+ Param()) == ExpectedResult());
+
+ Executor ex1 = {};
+ ASIO_CHECK(
+ asio::query(
+ asio::require(ex1, Param()),
+ Param()) == ExpectedResult());
+
+ const Executor ex2 = {};
+ ASIO_CHECK(
+ asio::query(
+ asio::require(ex2, Param()),
+ Param()) == ExpectedResult());
+}
+
+template <typename Executor, typename Param, bool ExpectedResult>
+void test_can_prefer()
+{
+ constexpr bool b1 =
+ asio::can_prefer<Executor, Param>::value;
+ ASIO_CHECK(b1 == ExpectedResult);
+
+ constexpr bool b2 =
+ asio::can_prefer<const Executor, Param>::value;
+ ASIO_CHECK(b2 == ExpectedResult);
+
+ constexpr bool b3 =
+ asio::can_prefer<Executor&, Param>::value;
+ ASIO_CHECK(b3 == ExpectedResult);
+
+ constexpr bool b4 =
+ asio::can_prefer<const Executor&, Param>::value;
+ ASIO_CHECK(b4 == ExpectedResult);
+}
+
+template <typename Executor, typename Param, typename ExpectedResult>
+void test_prefer()
+{
+ ASIO_CHECK(
+ s(asio::query(
+ asio::prefer(Executor(), Param()),
+ s())) == s(ExpectedResult()));
+
+ Executor ex1 = {};
+ ASIO_CHECK(
+ s(asio::query(
+ asio::prefer(ex1, Param()),
+ s())) == s(ExpectedResult()));
+
+ const Executor ex2 = {};
+ ASIO_CHECK(
+ s(asio::query(
+ asio::prefer(ex2, Param()),
+ s())) == s(ExpectedResult()));
+}
+
+void test_vars()
+{
+ ASIO_CHECK(s() == exec::relationship);
+ ASIO_CHECK(s() != exec::relationship.fork);
+ ASIO_CHECK(s() != exec::relationship.continuation);
+ ASIO_CHECK(n1() == exec::relationship.fork);
+ ASIO_CHECK(n1() != exec::relationship.continuation);
+ ASIO_CHECK(n2() == exec::relationship.continuation);
+ ASIO_CHECK(n2() != exec::relationship.fork);
+}
+
+ASIO_TEST_SUITE
+(
+ "relationship",
+
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, s, true>)
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n1, true>)
+ ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n2, false>)
+
+ ASIO_TEST_CASE3(test_query<ex_nq_nr, s, n1>)
+ ASIO_TEST_CASE3(test_query<ex_nq_nr, n1, n1>)
+
+ ASIO_TEST_CASE3(test_constexpr_query<ex_nq_nr, s, n1>)
+ ASIO_TEST_CASE3(test_constexpr_query<ex_nq_nr, n1, n1>)
+
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, s, false>)
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n1, true>)
+ ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n2, false>)
+
+ ASIO_TEST_CASE3(test_require<ex_nq_nr, n1, n1>)
+
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, s, false>)
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n1, true>)
+ ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n2, true>)
+
+ ASIO_TEST_CASE3(test_prefer<ex_nq_nr, n1, n1>)
+ ASIO_TEST_CASE3(test_prefer<ex_nq_nr, n2, n1>)
+
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_require<ex_cq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n2, false>)
+
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, s, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, s, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, s, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n2, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n1, false>)
+ ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n2, false>)
+
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n2, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, s, false>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n1, true>)
+ ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n2, true>)
+
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n2>, n2, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n1, s, n1>, n1, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n1, s, n1>, n2, n1>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n2, s, n2>, n1, n2>)
+ ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n2, s, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n1>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n2>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n1>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n2>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n1>, n2, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n2>, n1, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, s, true>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n1>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n2>, s, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n1>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n2>, s, n2>)
+ ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n2, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n1, false>)
+ ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n2, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, s, false>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n1, true>)
+ ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n2, true>)
+
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n1>, n2, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n2>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n2>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n1>, n1, n1>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n1>, n2, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n2>, n1, n2>)
+ ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n2>, n2, n2>)
+
+ ASIO_TEST_CASE(test_vars)
+)