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