• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // outstanding_work.cpp
3 // ~~~~~~~~~~~~~~~~~~~~
4 //
5 // Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6 //
7 // Distributed under the Boost Software License, Version 1.0. (See accompanying
8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 //
10 
11 // Disable autolinking for unit tests.
12 #if !defined(BOOST_ALL_NO_LIB)
13 #define BOOST_ALL_NO_LIB 1
14 #endif // !defined(BOOST_ALL_NO_LIB)
15 
16 // Test that header file is self-contained.
17 #include <boost/asio/execution/outstanding_work.hpp>
18 
19 #include <boost/asio/prefer.hpp>
20 #include <boost/asio/query.hpp>
21 #include <boost/asio/require.hpp>
22 #include "../unit_test.hpp"
23 
24 namespace exec = boost::asio::execution;
25 
26 typedef exec::outstanding_work_t s;
27 typedef exec::outstanding_work_t::untracked_t n1;
28 typedef exec::outstanding_work_t::tracked_t n2;
29 
30 struct ex_nq_nr
31 {
32   template <typename F>
executeex_nq_nr33   void execute(const F&) const
34   {
35   }
36 
operator ==(const ex_nq_nr &,const ex_nq_nr &)37   friend bool operator==(const ex_nq_nr&, const ex_nq_nr&) BOOST_ASIO_NOEXCEPT
38   {
39     return true;
40   }
41 
operator !=(const ex_nq_nr &,const ex_nq_nr &)42   friend bool operator!=(const ex_nq_nr&, const ex_nq_nr&) BOOST_ASIO_NOEXCEPT
43   {
44     return false;
45   }
46 };
47 
48 #if !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
49 
50 namespace boost {
51 namespace asio {
52 namespace execution {
53 
54 template <>
55 struct is_executor<ex_nq_nr> : boost::asio::true_type
56 {
57 };
58 
59 } // namespace execution
60 } // namespace asio
61 } // namespace boost
62 
63 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
64 
65 template <typename ResultType, typename ParamType, typename Result>
66 struct ex_cq_nr
67 {
queryex_cq_nr68   static BOOST_ASIO_CONSTEXPR ResultType query(ParamType) BOOST_ASIO_NOEXCEPT
69   {
70     return Result();
71   }
72 
73   template <typename F>
executeex_cq_nr74   void execute(const F&) const
75   {
76   }
77 
operator ==(const ex_cq_nr &,const ex_cq_nr &)78   friend bool operator==(const ex_cq_nr&, const ex_cq_nr&) BOOST_ASIO_NOEXCEPT
79   {
80     return true;
81   }
82 
operator !=(const ex_cq_nr &,const ex_cq_nr &)83   friend bool operator!=(const ex_cq_nr&, const ex_cq_nr&) BOOST_ASIO_NOEXCEPT
84   {
85     return false;
86   }
87 };
88 
89 #if !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
90 
91 namespace boost {
92 namespace asio {
93 namespace execution {
94 
95 template <typename ResultType, typename ParamType, typename Result>
96 struct is_executor<ex_cq_nr<ResultType, ParamType, Result> >
97   : boost::asio::true_type
98 {
99 };
100 
101 } // namespace execution
102 } // namespace asio
103 } // namespace boost
104 
105 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
106 
107 namespace boost {
108 namespace asio {
109 namespace traits {
110 
111 #if !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
112 
113 template <typename ResultType, typename ParamType,
114   typename Result, typename Param>
115 struct query_static_constexpr_member<
116   ex_cq_nr<ResultType, ParamType, Result>, Param,
117   typename boost::asio::enable_if<
118     boost::asio::is_convertible<Param, ParamType>::value
119   >::type>
120 {
121   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
122   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
123 
124   typedef Result result_type; // Must return raw result type.
125 
valueboost::asio::traits::query_static_constexpr_member126   static BOOST_ASIO_CONSTEXPR result_type value()
127   {
128     return Result();
129   }
130 };
131 
132 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
133 
134 } // namespace traits
135 } // namespace asio
136 } // namespace boost
137 
138 template <typename ResultType, typename ParamType, typename Result>
139 struct ex_mq_nr
140 {
queryex_mq_nr141   ResultType query(ParamType) const BOOST_ASIO_NOEXCEPT
142   {
143     return Result();
144   }
145 
146   template <typename F>
executeex_mq_nr147   void execute(const F&) const
148   {
149   }
150 
operator ==(const ex_mq_nr &,const ex_mq_nr &)151   friend bool operator==(const ex_mq_nr&, const ex_mq_nr&) BOOST_ASIO_NOEXCEPT
152   {
153     return true;
154   }
155 
operator !=(const ex_mq_nr &,const ex_mq_nr &)156   friend bool operator!=(const ex_mq_nr&, const ex_mq_nr&) BOOST_ASIO_NOEXCEPT
157   {
158     return false;
159   }
160 };
161 
162 #if !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
163 
164 namespace boost {
165 namespace asio {
166 namespace execution {
167 
168 template <typename ResultType, typename ParamType, typename Result>
169 struct is_executor<ex_mq_nr<ResultType, ParamType, Result> >
170   : boost::asio::true_type
171 {
172 };
173 
174 } // namespace execution
175 } // namespace asio
176 } // namespace boost
177 
178 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
179 
180 namespace boost {
181 namespace asio {
182 namespace traits {
183 
184 #if !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
185 
186 template <typename ResultType, typename ParamType,
187   typename Result, typename Param>
188 struct query_member<
189   ex_mq_nr<ResultType, ParamType, Result>, Param,
190   typename boost::asio::enable_if<
191     boost::asio::is_convertible<Param, ParamType>::value
192   >::type>
193 {
194   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
195   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
196 
197   typedef ResultType result_type;
198 };
199 
200 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
201 
202 } // namespace traits
203 } // namespace asio
204 } // namespace boost
205 
206 template <typename ResultType, typename ParamType, typename Result>
207 struct ex_fq_nr
208 {
query(const ex_fq_nr &,ParamType)209   friend ResultType query(const ex_fq_nr&, ParamType) BOOST_ASIO_NOEXCEPT
210   {
211     return Result();
212   }
213 
214   template <typename F>
executeex_fq_nr215   void execute(const F&) const
216   {
217   }
218 
operator ==(const ex_fq_nr &,const ex_fq_nr &)219   friend bool operator==(const ex_fq_nr&, const ex_fq_nr&) BOOST_ASIO_NOEXCEPT
220   {
221     return true;
222   }
223 
operator !=(const ex_fq_nr &,const ex_fq_nr &)224   friend bool operator!=(const ex_fq_nr&, const ex_fq_nr&) BOOST_ASIO_NOEXCEPT
225   {
226     return false;
227   }
228 };
229 
230 #if !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
231 
232 namespace boost {
233 namespace asio {
234 namespace execution {
235 
236 template <typename ResultType, typename ParamType, typename Result>
237 struct is_executor<ex_fq_nr<ResultType, ParamType, Result> >
238   : boost::asio::true_type
239 {
240 };
241 
242 } // namespace execution
243 } // namespace asio
244 } // namespace boost
245 
246 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
247 
248 namespace boost {
249 namespace asio {
250 namespace traits {
251 
252 #if !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
253 
254 template <typename ResultType, typename ParamType,
255   typename Result, typename Param>
256 struct query_free<
257   ex_fq_nr<ResultType, ParamType, Result>, Param,
258   typename boost::asio::enable_if<
259     boost::asio::is_convertible<Param, ParamType>::value
260   >::type>
261 {
262   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
263   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
264 
265   typedef ResultType result_type;
266 };
267 
268 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
269 
270 } // namespace traits
271 } // namespace asio
272 } // namespace boost
273 
274 template <typename CurrentType, typename OtherType>
275 struct ex_mq_mr
276 {
queryex_mq_mr277   CurrentType query(CurrentType) const BOOST_ASIO_NOEXCEPT
278   {
279     return CurrentType();
280   }
281 
queryex_mq_mr282   CurrentType query(OtherType) const BOOST_ASIO_NOEXCEPT
283   {
284     return CurrentType();
285   }
286 
requireex_mq_mr287   ex_mq_mr<CurrentType, OtherType> require(
288       CurrentType) const BOOST_ASIO_NOEXCEPT
289   {
290     return ex_mq_mr<CurrentType, OtherType>();
291   }
292 
requireex_mq_mr293   ex_mq_mr<OtherType, CurrentType> require(
294       OtherType) const BOOST_ASIO_NOEXCEPT
295   {
296     return ex_mq_mr<OtherType, CurrentType>();
297   }
298 
299   template <typename F>
executeex_mq_mr300   void execute(const F&) const
301   {
302   }
303 
operator ==(const ex_mq_mr &,const ex_mq_mr &)304   friend bool operator==(const ex_mq_mr&, const ex_mq_mr&) BOOST_ASIO_NOEXCEPT
305   {
306     return true;
307   }
308 
operator !=(const ex_mq_mr &,const ex_mq_mr &)309   friend bool operator!=(const ex_mq_mr&, const ex_mq_mr&) BOOST_ASIO_NOEXCEPT
310   {
311     return false;
312   }
313 };
314 
315 template <typename CurrentType>
316 struct ex_mq_mr<CurrentType, CurrentType>
317 {
queryex_mq_mr318   CurrentType query(CurrentType) const BOOST_ASIO_NOEXCEPT
319   {
320     return CurrentType();
321   }
322 
requireex_mq_mr323   ex_mq_mr<CurrentType, CurrentType> require(
324       CurrentType) const BOOST_ASIO_NOEXCEPT
325   {
326     return ex_mq_mr<CurrentType, CurrentType>();
327   }
328 
329   template <typename F>
executeex_mq_mr330   void execute(const F&) const
331   {
332   }
333 
operator ==(const ex_mq_mr &,const ex_mq_mr &)334   friend bool operator==(const ex_mq_mr&, const ex_mq_mr&) BOOST_ASIO_NOEXCEPT
335   {
336     return true;
337   }
338 
operator !=(const ex_mq_mr &,const ex_mq_mr &)339   friend bool operator!=(const ex_mq_mr&, const ex_mq_mr&) BOOST_ASIO_NOEXCEPT
340   {
341     return false;
342   }
343 };
344 
345 #if !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
346 
347 namespace boost {
348 namespace asio {
349 namespace execution {
350 
351 template <typename CurrentType, typename OtherType>
352 struct is_executor<ex_mq_mr<CurrentType, OtherType> >
353   : boost::asio::true_type
354 {
355 };
356 
357 } // namespace execution
358 } // namespace asio
359 } // namespace boost
360 
361 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
362 
363 namespace boost {
364 namespace asio {
365 namespace traits {
366 
367 #if !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
368 
369 template <typename CurrentType, typename OtherType, typename Param>
370 struct query_member<
371   ex_mq_mr<CurrentType, OtherType>, Param,
372   typename boost::asio::enable_if<
373     boost::asio::is_convertible<Param, CurrentType>::value
374       || boost::asio::is_convertible<Param, OtherType>::value
375   >::type>
376 {
377   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
378   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
379 
380   typedef CurrentType result_type;
381 };
382 
383 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
384 
385 #if !defined(BOOST_ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
386 
387 template <typename CurrentType, typename OtherType, typename Param>
388 struct require_member<
389   ex_mq_mr<CurrentType, OtherType>, Param,
390   typename boost::asio::enable_if<
391     boost::asio::is_convertible<Param, CurrentType>::value
392   >::type>
393 {
394   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
395   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
396 
397   typedef ex_mq_mr<CurrentType, OtherType> result_type;
398 };
399 
400 template <typename CurrentType, typename OtherType, typename Param>
401 struct require_member<
402   ex_mq_mr<CurrentType, OtherType>, Param,
403   typename boost::asio::enable_if<
404     boost::asio::is_convertible<Param, OtherType>::value
405       && !boost::asio::is_same<CurrentType, OtherType>::value
406   >::type>
407 {
408   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
409   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
410 
411   typedef ex_mq_mr<OtherType, CurrentType> result_type;
412 };
413 
414 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
415 
416 } // namespace traits
417 } // namespace asio
418 } // namespace boost
419 
420 template <typename CurrentType, typename OtherType>
421 struct ex_fq_fr
422 {
query(const ex_fq_fr &,CurrentType)423   friend CurrentType query(const ex_fq_fr&, CurrentType) BOOST_ASIO_NOEXCEPT
424   {
425     return CurrentType();
426   }
427 
query(const ex_fq_fr &,OtherType)428   friend CurrentType query(const ex_fq_fr&, OtherType) BOOST_ASIO_NOEXCEPT
429   {
430     return CurrentType();
431   }
432 
require(const ex_fq_fr &,CurrentType)433   friend ex_fq_fr<CurrentType, OtherType> require(
434       const ex_fq_fr&, CurrentType) BOOST_ASIO_NOEXCEPT
435   {
436     return ex_fq_fr<CurrentType, OtherType>();
437   }
438 
require(const ex_fq_fr &,OtherType)439   friend ex_fq_fr<OtherType, CurrentType> require(
440       const ex_fq_fr&, OtherType) BOOST_ASIO_NOEXCEPT
441   {
442     return ex_fq_fr<OtherType, CurrentType>();
443   }
444 
prefer(const ex_fq_fr &,CurrentType)445   friend ex_fq_fr<CurrentType, OtherType> prefer(
446       const ex_fq_fr&, CurrentType) BOOST_ASIO_NOEXCEPT
447   {
448     return ex_fq_fr<CurrentType, OtherType>();
449   }
450 
prefer(const ex_fq_fr &,OtherType)451   friend ex_fq_fr<OtherType, CurrentType> prefer(
452       const ex_fq_fr&, OtherType) BOOST_ASIO_NOEXCEPT
453   {
454     return ex_fq_fr<OtherType, CurrentType>();
455   }
456 
457   template <typename F>
executeex_fq_fr458   void execute(const F&) const
459   {
460   }
461 
operator ==(const ex_fq_fr &,const ex_fq_fr &)462   friend bool operator==(const ex_fq_fr&, const ex_fq_fr&) BOOST_ASIO_NOEXCEPT
463   {
464     return true;
465   }
466 
operator !=(const ex_fq_fr &,const ex_fq_fr &)467   friend bool operator!=(const ex_fq_fr&, const ex_fq_fr&) BOOST_ASIO_NOEXCEPT
468   {
469     return false;
470   }
471 };
472 
473 template <typename CurrentType>
474 struct ex_fq_fr<CurrentType, CurrentType>
475 {
query(const ex_fq_fr &,CurrentType)476   friend CurrentType query(const ex_fq_fr&, CurrentType) BOOST_ASIO_NOEXCEPT
477   {
478     return CurrentType();
479   }
480 
require(const ex_fq_fr &,CurrentType)481   friend ex_fq_fr<CurrentType, CurrentType> require(
482       const ex_fq_fr&, CurrentType) BOOST_ASIO_NOEXCEPT
483   {
484     return ex_fq_fr<CurrentType, CurrentType>();
485   }
486 
prefer(const ex_fq_fr &,CurrentType)487   friend ex_fq_fr<CurrentType, CurrentType> prefer(
488       const ex_fq_fr&, CurrentType) BOOST_ASIO_NOEXCEPT
489   {
490     return ex_fq_fr<CurrentType, CurrentType>();
491   }
492 
493   template <typename F>
executeex_fq_fr494   void execute(const F&) const
495   {
496   }
497 
operator ==(const ex_fq_fr &,const ex_fq_fr &)498   friend bool operator==(const ex_fq_fr&, const ex_fq_fr&) BOOST_ASIO_NOEXCEPT
499   {
500     return true;
501   }
502 
operator !=(const ex_fq_fr &,const ex_fq_fr &)503   friend bool operator!=(const ex_fq_fr&, const ex_fq_fr&) BOOST_ASIO_NOEXCEPT
504   {
505     return false;
506   }
507 };
508 
509 #if !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
510 
511 namespace boost {
512 namespace asio {
513 namespace execution {
514 
515 template <typename CurrentType, typename OtherType>
516 struct is_executor<ex_fq_fr<CurrentType, OtherType> >
517   : boost::asio::true_type
518 {
519 };
520 
521 } // namespace execution
522 } // namespace asio
523 } // namespace boost
524 
525 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT)
526 
527 namespace boost {
528 namespace asio {
529 namespace traits {
530 
531 #if !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
532 
533 template <typename CurrentType, typename OtherType, typename Param>
534 struct query_free<
535   ex_fq_fr<CurrentType, OtherType>, Param,
536   typename boost::asio::enable_if<
537     boost::asio::is_convertible<Param, CurrentType>::value
538       || boost::asio::is_convertible<Param, OtherType>::value
539   >::type>
540 {
541   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
542   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
543 
544   typedef CurrentType result_type;
545 };
546 
547 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
548 
549 #if !defined(BOOST_ASIO_HAS_DEDUCED_REQUIRE_FREE_TRAIT)
550 
551 template <typename CurrentType, typename OtherType, typename Param>
552 struct require_free<
553   ex_fq_fr<CurrentType, OtherType>, Param,
554   typename boost::asio::enable_if<
555     boost::asio::is_convertible<Param, CurrentType>::value
556   >::type>
557 {
558   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
559   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
560 
561   typedef ex_fq_fr<CurrentType, OtherType> result_type;
562 };
563 
564 template <typename CurrentType, typename OtherType, typename Param>
565 struct require_free<
566   ex_fq_fr<CurrentType, OtherType>, Param,
567   typename boost::asio::enable_if<
568     boost::asio::is_convertible<Param, OtherType>::value
569       && !boost::asio::is_same<CurrentType, OtherType>::value
570   >::type>
571 {
572   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
573   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
574 
575   typedef ex_fq_fr<OtherType, CurrentType> result_type;
576 };
577 
578 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_REQUIRE_FREE_TRAIT)
579 
580 #if !defined(BOOST_ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
581 
582 template <typename CurrentType, typename OtherType, typename Param>
583 struct prefer_free<
584   ex_fq_fr<CurrentType, OtherType>, Param,
585   typename boost::asio::enable_if<
586     boost::asio::is_convertible<Param, CurrentType>::value
587   >::type>
588 {
589   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
590   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
591 
592   typedef ex_fq_fr<CurrentType, OtherType> result_type;
593 };
594 
595 template <typename CurrentType, typename OtherType, typename Param>
596 struct prefer_free<
597   ex_fq_fr<CurrentType, OtherType>, Param,
598   typename boost::asio::enable_if<
599     boost::asio::is_convertible<Param, OtherType>::value
600       && !boost::asio::is_same<CurrentType, OtherType>::value
601   >::type>
602 {
603   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
604   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
605 
606   typedef ex_fq_fr<OtherType, CurrentType> result_type;
607 };
608 
609 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
610 
611 } // namespace traits
612 } // namespace asio
613 } // namespace boost
614 
615 template <typename Executor, typename Param, bool ExpectedResult>
test_can_query()616 void test_can_query()
617 {
618   BOOST_ASIO_CONSTEXPR bool b1 =
619     boost::asio::can_query<Executor, Param>::value;
620   BOOST_ASIO_CHECK(b1 == ExpectedResult);
621 
622   BOOST_ASIO_CONSTEXPR bool b2 =
623     boost::asio::can_query<const Executor, Param>::value;
624   BOOST_ASIO_CHECK(b2 == ExpectedResult);
625 
626   BOOST_ASIO_CONSTEXPR bool b3 =
627     boost::asio::can_query<Executor&, Param>::value;
628   BOOST_ASIO_CHECK(b3 == ExpectedResult);
629 
630   BOOST_ASIO_CONSTEXPR bool b4 =
631     boost::asio::can_query<const Executor&, Param>::value;
632   BOOST_ASIO_CHECK(b4 == ExpectedResult);
633 }
634 
635 template <typename Executor, typename Param, typename ExpectedResult>
test_query()636 void test_query()
637 {
638   exec::outstanding_work_t result1 = boost::asio::query(Executor(), Param());
639   BOOST_ASIO_CHECK(result1 == ExpectedResult());
640 
641   Executor ex1 = {};
642   exec::outstanding_work_t result2 = boost::asio::query(ex1, Param());
643   BOOST_ASIO_CHECK(result2 == ExpectedResult());
644 
645   const Executor ex2 = {};
646   exec::outstanding_work_t result3 = boost::asio::query(ex2, Param());
647   BOOST_ASIO_CHECK(result3 == ExpectedResult());
648 }
649 
650 template <typename Executor, typename Param, typename ExpectedResult>
test_constexpr_query()651 void test_constexpr_query()
652 {
653 #if defined(BOOST_ASIO_HAS_CONSTEXPR)
654   constexpr Executor ex1 = {};
655   constexpr exec::outstanding_work_t result1 = boost::asio::query(ex1, Param());
656   BOOST_ASIO_CHECK(result1 == ExpectedResult());
657 #endif // defined(BOOST_ASIO_HAS_CONSTEXPR)
658 }
659 
660 template <typename Executor, typename Param, bool ExpectedResult>
test_can_require()661 void test_can_require()
662 {
663   BOOST_ASIO_CONSTEXPR bool b1 =
664     boost::asio::can_require<Executor, Param>::value;
665   BOOST_ASIO_CHECK(b1 == ExpectedResult);
666 
667   BOOST_ASIO_CONSTEXPR bool b2 =
668     boost::asio::can_require<const Executor, Param>::value;
669   BOOST_ASIO_CHECK(b2 == ExpectedResult);
670 
671   BOOST_ASIO_CONSTEXPR bool b3 =
672     boost::asio::can_require<Executor&, Param>::value;
673   BOOST_ASIO_CHECK(b3 == ExpectedResult);
674 
675   BOOST_ASIO_CONSTEXPR bool b4 =
676     boost::asio::can_require<const Executor&, Param>::value;
677   BOOST_ASIO_CHECK(b4 == ExpectedResult);
678 }
679 
680 template <typename Executor, typename Param, typename ExpectedResult>
test_require()681 void test_require()
682 {
683   BOOST_ASIO_CHECK(
684       boost::asio::query(
685         boost::asio::require(Executor(), Param()),
686         Param()) == ExpectedResult());
687 
688   Executor ex1 = {};
689   BOOST_ASIO_CHECK(
690       boost::asio::query(
691         boost::asio::require(ex1, Param()),
692         Param()) == ExpectedResult());
693 
694   const Executor ex2 = {};
695   BOOST_ASIO_CHECK(
696       boost::asio::query(
697         boost::asio::require(ex2, Param()),
698         Param()) == ExpectedResult());
699 }
700 
701 template <typename Executor, typename Param, bool ExpectedResult>
test_can_prefer()702 void test_can_prefer()
703 {
704   BOOST_ASIO_CONSTEXPR bool b1 =
705     boost::asio::can_prefer<Executor, Param>::value;
706   BOOST_ASIO_CHECK(b1 == ExpectedResult);
707 
708   BOOST_ASIO_CONSTEXPR bool b2 =
709     boost::asio::can_prefer<const Executor, Param>::value;
710   BOOST_ASIO_CHECK(b2 == ExpectedResult);
711 
712   BOOST_ASIO_CONSTEXPR bool b3 =
713     boost::asio::can_prefer<Executor&, Param>::value;
714   BOOST_ASIO_CHECK(b3 == ExpectedResult);
715 
716   BOOST_ASIO_CONSTEXPR bool b4 =
717     boost::asio::can_prefer<const Executor&, Param>::value;
718   BOOST_ASIO_CHECK(b4 == ExpectedResult);
719 }
720 
721 template <typename Executor, typename Param, typename ExpectedResult>
test_prefer()722 void test_prefer()
723 {
724   BOOST_ASIO_CHECK(
725       s(boost::asio::query(
726         boost::asio::prefer(Executor(), Param()),
727           s())) == s(ExpectedResult()));
728 
729   Executor ex1 = {};
730   BOOST_ASIO_CHECK(
731       s(boost::asio::query(
732         boost::asio::prefer(ex1, Param()),
733           s())) == s(ExpectedResult()));
734 
735   const Executor ex2 = {};
736   BOOST_ASIO_CHECK(
737       s(boost::asio::query(
738         boost::asio::prefer(ex2, Param()),
739           s())) == s(ExpectedResult()));
740 }
741 
test_vars()742 void test_vars()
743 {
744   BOOST_ASIO_CHECK(s() == exec::outstanding_work);
745   BOOST_ASIO_CHECK(n1() == exec::outstanding_work.untracked);
746   BOOST_ASIO_CHECK(n2() == exec::outstanding_work.tracked);
747 }
748 
749 BOOST_ASIO_TEST_SUITE
750 (
751   "outstanding_work",
752 
753   BOOST_ASIO_TEST_CASE3(test_can_query<ex_nq_nr, s, true>)
754   BOOST_ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n1, true>)
755   BOOST_ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n2, false>)
756 
757   BOOST_ASIO_TEST_CASE3(test_query<ex_nq_nr, s, n1>)
758   BOOST_ASIO_TEST_CASE3(test_query<ex_nq_nr, n1, n1>)
759 
760   BOOST_ASIO_TEST_CASE3(test_constexpr_query<ex_nq_nr, s, n1>)
761   BOOST_ASIO_TEST_CASE3(test_constexpr_query<ex_nq_nr, n1, n1>)
762 
763   BOOST_ASIO_TEST_CASE3(test_can_require<ex_nq_nr, s, false>)
764   BOOST_ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n1, true>)
765   BOOST_ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n2, false>)
766 
767   BOOST_ASIO_TEST_CASE3(test_require<ex_nq_nr, n1, n1>)
768 
769   BOOST_ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, s, false>)
770   BOOST_ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n1, true>)
771   BOOST_ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n2, true>)
772 
773   BOOST_ASIO_TEST_CASE3(test_prefer<ex_nq_nr, n1, n1>)
774   BOOST_ASIO_TEST_CASE3(test_prefer<ex_nq_nr, n2, n1>)
775 
776   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, s, true>)
777   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n1, true>)
778   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n2, true>)
779   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, s, true>)
780   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n1, true>)
781   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n2, true>)
782   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, s, true>)
783   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n1, true>)
784   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n2, false>)
785   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, s, true>)
786   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n1, true>)
787   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n2, false>)
788   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, s, true>)
789   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n1, false>)
790   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n2, true>)
791   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, s, true>)
792   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n1, false>)
793   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n2, true>)
794   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, s, true>)
795   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n1, true>)
796   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n2, true>)
797   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, s, true>)
798   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n1, true>)
799   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n2, true>)
800 
801   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, s, n1>)
802   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n1, n1>)
803   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n2, n1>)
804   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, s, n2>)
805   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n1, n2>)
806   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n2, n2>)
807   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n1>, s, n1>)
808   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n1>, n1, n1>)
809   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n2>, s, n2>)
810   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n2>, n1, n2>)
811   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n1>, s, n1>)
812   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n1>, n2, n1>)
813   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n2>, s, n2>)
814   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n2>, n2, n2>)
815   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, s, n1>)
816   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n1, n1>)
817   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n2, n1>)
818   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, s, n2>)
819   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n1, n2>)
820   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n2, n2>)
821 
822   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, s, n1>)
823   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n1, n1>)
824   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n2, n1>)
825   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, s, n2>)
826   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n1, n2>)
827   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n2, n2>)
828   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n1>, s, n1>)
829   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n1>, n1, n1>)
830   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n2>, s, n2>)
831   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n2>, n1, n2>)
832   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n1>, s, n1>)
833   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n1>, n2, n1>)
834   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n2>, s, n2>)
835   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n2>, n2, n2>)
836   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, s, n1>)
837   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n1, n1>)
838   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n2, n1>)
839   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, s, n2>)
840   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n1, n2>)
841   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n2, n2>)
842 
843   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, s, false>)
844   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n1, true>)
845   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n2, false>)
846   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, s, false>)
847   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n1, false>)
848   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n2, true>)
849   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, s, false>)
850   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n1, true>)
851   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n2, false>)
852   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, s, false>)
853   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n1, false>)
854   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n2, false>)
855   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, s, false>)
856   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n1, false>)
857   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n2, false>)
858   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, s, false>)
859   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n1, false>)
860   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n2, true>)
861   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, s, false>)
862   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n1, true>)
863   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n2, false>)
864   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, s, false>)
865   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n1, false>)
866   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n2, true>)
867 
868   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n1>, n1, n1>)
869   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n2>, n2, n2>)
870   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n1, n1>, n1, n1>)
871   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n2, n2>, n2, n2>)
872   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<n1, s, n1>, n1, n1>)
873   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<n2, s, n2>, n2, n2>)
874 
875   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, s, false>)
876   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n1, true>)
877   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n2, true>)
878   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, s, false>)
879   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n1, true>)
880   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n2, true>)
881   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, s, false>)
882   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n1, true>)
883   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n2, true>)
884   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, s, false>)
885   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n1, true>)
886   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n2, true>)
887   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, s, false>)
888   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n1, true>)
889   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n2, true>)
890   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, s, false>)
891   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n1, true>)
892   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n2, true>)
893   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, s, false>)
894   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n1, true>)
895   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n2, true>)
896   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, s, false>)
897   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n1, true>)
898   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n2, true>)
899 
900   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n1>, n1, n1>)
901   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n1>, n2, n1>)
902   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n2>, n1, n2>)
903   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n2>, n2, n2>)
904   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n1>, n1, n1>)
905   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n1>, n2, n1>)
906   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n2>, n1, n2>)
907   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n2>, n2, n2>)
908   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n1>, n1, n1>)
909   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n1>, n2, n1>)
910   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n2>, n1, n2>)
911   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n2>, n2, n2>)
912   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n1, s, n1>, n1, n1>)
913   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n1, s, n1>, n2, n1>)
914   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n2, s, n2>, n1, n2>)
915   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n2, s, n2>, n2, n2>)
916 
917   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, s, true>)
918   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n1, true>)
919   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n2, true>)
920   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, s, true>)
921   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n1, true>)
922   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n2, true>)
923   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, s, true>)
924   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n1, true>)
925   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n2, false>)
926   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, s, true>)
927   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n1, true>)
928   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n2, false>)
929   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, s, true>)
930   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n1, false>)
931   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n2, true>)
932   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, s, true>)
933   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n1, false>)
934   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n2, true>)
935   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, s, true>)
936   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n1, true>)
937   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n2, true>)
938   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, s, true>)
939   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n1, true>)
940   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n2, true>)
941 
942   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, s, n1>)
943   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n1, n1>)
944   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n2, n1>)
945   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, s, n2>)
946   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n1, n2>)
947   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n2, n2>)
948   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n1>, s, n1>)
949   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n1>, n1, n1>)
950   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n2>, s, n2>)
951   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n2>, n1, n2>)
952   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n1>, s, n1>)
953   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n1>, n2, n1>)
954   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n2>, s, n2>)
955   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n2>, n2, n2>)
956   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, s, n1>)
957   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n1, n1>)
958   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n2, n1>)
959   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, s, n2>)
960   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n1, n2>)
961   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n2, n2>)
962 
963   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, s, false>)
964   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n1, false>)
965   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n2, false>)
966   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, s, false>)
967   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n1, false>)
968   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n2, false>)
969   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, s, false>)
970   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n1, false>)
971   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n2, false>)
972   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, s, false>)
973   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n1, false>)
974   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n2, false>)
975   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, s, false>)
976   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n1, false>)
977   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n2, false>)
978   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, s, false>)
979   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n1, false>)
980   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n2, false>)
981   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, s, false>)
982   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n1, false>)
983   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n2, false>)
984   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, s, false>)
985   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n1, false>)
986   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n2, false>)
987 
988   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, s, false>)
989   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n1, true>)
990   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n2, true>)
991   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, s, false>)
992   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n1, true>)
993   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n2, true>)
994   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, s, false>)
995   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n1, true>)
996   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n2, true>)
997   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, s, false>)
998   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n1, true>)
999   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n2, true>)
1000   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, s, false>)
1001   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n1, true>)
1002   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n2, true>)
1003   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, s, false>)
1004   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n1, true>)
1005   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n2, true>)
1006   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, s, false>)
1007   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n1, true>)
1008   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n2, true>)
1009   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, s, false>)
1010   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n1, true>)
1011   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n2, true>)
1012 
1013   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n1>, n1, n1>)
1014   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n1>, n2, n1>)
1015   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n2>, n1, n2>)
1016   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n2>, n2, n2>)
1017   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n1>, n1, n1>)
1018   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n1>, n2, n1>)
1019   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n2>, n1, n2>)
1020   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n2>, n2, n2>)
1021   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n1>, n1, n1>)
1022   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n1>, n2, n1>)
1023   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n2>, n1, n2>)
1024   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n2>, n2, n2>)
1025   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n1, s, n1>, n1, n1>)
1026   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n1, s, n1>, n2, n1>)
1027   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n2, s, n2>, n1, n2>)
1028   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n2, s, n2>, n2, n2>)
1029 
1030   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, s, true>)
1031   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n1, true>)
1032   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n2, true>)
1033   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, s, true>)
1034   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n1, true>)
1035   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n2, true>)
1036   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, s, true>)
1037   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n1, true>)
1038   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n2, false>)
1039   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, s, true>)
1040   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n1, true>)
1041   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n2, false>)
1042   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, s, true>)
1043   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n1, false>)
1044   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n2, true>)
1045   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, s, true>)
1046   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n1, false>)
1047   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n2, true>)
1048   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, s, true>)
1049   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n1, true>)
1050   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n2, true>)
1051   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, s, true>)
1052   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n1, true>)
1053   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n2, true>)
1054 
1055   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, s, n1>)
1056   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n1, n1>)
1057   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n2, n1>)
1058   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, s, n2>)
1059   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n1, n2>)
1060   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n2, n2>)
1061   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n1>, s, n1>)
1062   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n1>, n1, n1>)
1063   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n2>, s, n2>)
1064   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n2>, n1, n2>)
1065   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n1>, s, n1>)
1066   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n1>, n2, n1>)
1067   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n2>, s, n2>)
1068   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n2>, n2, n2>)
1069   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, s, n1>)
1070   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n1, n1>)
1071   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n2, n1>)
1072   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, s, n2>)
1073   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n1, n2>)
1074   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n2, n2>)
1075 
1076   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, s, false>)
1077   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n1, false>)
1078   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n2, false>)
1079   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, s, false>)
1080   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n1, false>)
1081   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n2, false>)
1082   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, s, false>)
1083   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n1, false>)
1084   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n2, false>)
1085   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, s, false>)
1086   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n1, false>)
1087   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n2, false>)
1088   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, s, false>)
1089   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n1, false>)
1090   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n2, false>)
1091   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, s, false>)
1092   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n1, false>)
1093   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n2, false>)
1094   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, s, false>)
1095   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n1, false>)
1096   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n2, false>)
1097   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, s, false>)
1098   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n1, false>)
1099   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n2, false>)
1100 
1101   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, s, false>)
1102   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n1, true>)
1103   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n2, true>)
1104   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, s, false>)
1105   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n1, true>)
1106   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n2, true>)
1107   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, s, false>)
1108   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n1, true>)
1109   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n2, true>)
1110   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, s, false>)
1111   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n1, true>)
1112   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n2, true>)
1113   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, s, false>)
1114   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n1, true>)
1115   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n2, true>)
1116   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, s, false>)
1117   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n1, true>)
1118   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n2, true>)
1119   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, s, false>)
1120   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n1, true>)
1121   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n2, true>)
1122   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, s, false>)
1123   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n1, true>)
1124   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n2, true>)
1125 
1126   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n1>, n1, n1>)
1127   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n1>, n2, n1>)
1128   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n2>, n1, n2>)
1129   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n2>, n2, n2>)
1130   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n1>, n1, n1>)
1131   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n1>, n2, n1>)
1132   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n2>, n1, n2>)
1133   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n2>, n2, n2>)
1134   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n1>, n1, n1>)
1135   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n1>, n2, n1>)
1136   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n2>, n1, n2>)
1137   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n2>, n2, n2>)
1138   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n1, s, n1>, n1, n1>)
1139   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n1, s, n1>, n2, n1>)
1140   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n2, s, n2>, n1, n2>)
1141   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n2, s, n2>, n2, n2>)
1142 
1143   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, s, true>)
1144   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n1, true>)
1145   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n2, false>)
1146   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, s, true>)
1147   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n1, true>)
1148   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n2, true>)
1149   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, s, true>)
1150   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n1, true>)
1151   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n2, true>)
1152   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, s, true>)
1153   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n1, false>)
1154   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n2, true>)
1155 
1156   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n1>, s, n1>)
1157   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n1>, n1, n1>)
1158   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n2>, s, n1>)
1159   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n2>, n1, n1>)
1160   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n1>, s, n2>)
1161   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n1>, n2, n2>)
1162   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n2>, s, n2>)
1163   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n2>, n2, n2>)
1164 
1165   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, s, false>)
1166   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n1, true>)
1167   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n2, false>)
1168   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, s, false>)
1169   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n1, true>)
1170   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n2, true>)
1171   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, s, false>)
1172   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n1, true>)
1173   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n2, true>)
1174   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, s, false>)
1175   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n1, false>)
1176   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n2, true>)
1177 
1178   BOOST_ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n1>, n1, n1>)
1179   BOOST_ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n2>, n1, n1>)
1180   BOOST_ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n2>, n2, n2>)
1181   BOOST_ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n1>, n1, n1>)
1182   BOOST_ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n1>, n2, n2>)
1183   BOOST_ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n2>, n2, n2>)
1184 
1185   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, s, false>)
1186   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n1, true>)
1187   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n2, true>)
1188   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, s, false>)
1189   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n1, true>)
1190   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n2, true>)
1191   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, s, false>)
1192   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n1, true>)
1193   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n2, true>)
1194   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, s, false>)
1195   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n1, true>)
1196   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n2, true>)
1197 
1198   BOOST_ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n1>, n1, n1>)
1199   BOOST_ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n1>, n2, n1>)
1200   BOOST_ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n2>, n1, n1>)
1201   BOOST_ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n2>, n2, n2>)
1202   BOOST_ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n1>, n1, n1>)
1203   BOOST_ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n1>, n2, n2>)
1204   BOOST_ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n2>, n1, n2>)
1205   BOOST_ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n2>, n2, n2>)
1206 
1207   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, s, true>)
1208   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n1, true>)
1209   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n2, false>)
1210   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, s, true>)
1211   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n1, true>)
1212   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n2, true>)
1213   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, s, true>)
1214   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n1, true>)
1215   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n2, true>)
1216   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, s, true>)
1217   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n1, false>)
1218   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n2, true>)
1219 
1220   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n1>, s, n1>)
1221   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n1>, n1, n1>)
1222   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n2>, s, n1>)
1223   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n2>, n1, n1>)
1224   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n1>, s, n2>)
1225   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n1>, n2, n2>)
1226   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n2>, s, n2>)
1227   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n2>, n2, n2>)
1228 
1229   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, s, false>)
1230   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n1, true>)
1231   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n2, false>)
1232   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, s, false>)
1233   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n1, true>)
1234   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n2, true>)
1235   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, s, false>)
1236   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n1, true>)
1237   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n2, true>)
1238   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, s, false>)
1239   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n1, false>)
1240   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n2, true>)
1241 
1242   BOOST_ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n1>, n1, n1>)
1243   BOOST_ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n2>, n1, n1>)
1244   BOOST_ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n2>, n2, n2>)
1245   BOOST_ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n1>, n1, n1>)
1246   BOOST_ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n1>, n2, n2>)
1247   BOOST_ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n2>, n2, n2>)
1248 
1249   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, s, false>)
1250   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n1, true>)
1251   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n2, true>)
1252   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, s, false>)
1253   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n1, true>)
1254   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n2, true>)
1255   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, s, false>)
1256   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n1, true>)
1257   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n2, true>)
1258   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, s, false>)
1259   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n1, true>)
1260   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n2, true>)
1261 
1262   BOOST_ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n1>, n1, n1>)
1263   BOOST_ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n1>, n2, n1>)
1264   BOOST_ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n2>, n1, n1>)
1265   BOOST_ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n2>, n2, n2>)
1266   BOOST_ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n1>, n1, n1>)
1267   BOOST_ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n1>, n2, n2>)
1268   BOOST_ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n2>, n1, n2>)
1269   BOOST_ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n2>, n2, n2>)
1270 
1271   BOOST_ASIO_TEST_CASE(test_vars)
1272 )
1273