iutest  1.17.99.14
iutest_pred.hpp
[詳解]
1 //======================================================================
2 //-----------------------------------------------------------------------
13 //-----------------------------------------------------------------------
14 //======================================================================
15 #ifndef INCG_IRIS_IUTEST_PRED_HPP_ADF851F3_C89B_4CA4_B9A0_A2B2229945C6_
16 #define INCG_IRIS_IUTEST_PRED_HPP_ADF851F3_C89B_4CA4_B9A0_A2B2229945C6_
17 
18 //======================================================================
19 // include
20 // IWYU pragma: begin_exports
21 #include "iutest_assertion.hpp"
22 // IWYU pragma: end_exports
23 
24 //======================================================================
25 // define
26 
33 #define IUTEST_ASSERT_PRED1(pred, v1) \
34  IUTEST_PRED1_(pred, v1, IUTEST_ASSERT_FAILURE)
41 #define IUTEST_EXPECT_PRED1(pred, v1) \
42  IUTEST_PRED1_(pred, v1, IUTEST_EXPECT_FAILURE)
49 #define IUTEST_INFORM_PRED1(pred, v1) \
50  IUTEST_PRED1_(pred, v1, IUTEST_INFORM_FAILURE)
57 #define IUTEST_ASSUME_PRED1(pred, v1) \
58  IUTEST_PRED1_(pred, v1, IUTEST_ASSUME_FAILURE)
59 
66 #define IUTEST_ASSERT_PRED_FORMAT1(pred_formatter, v1) \
67  IUTEST_PRED_FORMAT1_(pred_formatter, v1, IUTEST_ASSERT_FAILURE)
74 #define IUTEST_EXPECT_PRED_FORMAT1(pred_formatter, v1) \
75  IUTEST_PRED_FORMAT1_(pred_formatter, v1, IUTEST_EXPECT_FAILURE)
82 #define IUTEST_INFORM_PRED_FORMAT1(pred_formatter, v1) \
83  IUTEST_PRED_FORMAT1_(pred_formatter, v1, IUTEST_INFORM_FAILURE)
90 #define IUTEST_ASSUME_PRED_FORMAT1(pred_formatter, v1) \
91  IUTEST_PRED_FORMAT1_(pred_formatter, v1, IUTEST_ASSUME_FAILURE)
92 
93 
101 #define IUTEST_ASSERT_PRED2(pred, v1, v2) \
102  IUTEST_PRED2_(pred, v1, v2, IUTEST_ASSERT_FAILURE)
110 #define IUTEST_EXPECT_PRED2(pred, v1, v2) \
111  IUTEST_PRED2_(pred, v1, v2, IUTEST_EXPECT_FAILURE)
119 #define IUTEST_INFORM_PRED2(pred, v1, v2) \
120  IUTEST_PRED2_(pred, v1, v2, IUTEST_INFORM_FAILURE)
128 #define IUTEST_ASSUME_PRED2(pred, v1, v2) \
129  IUTEST_PRED2_(pred, v1, v2, IUTEST_ASSUME_FAILURE)
130 
138 #define IUTEST_ASSERT_PRED_FORMAT2(pred_formatter, v1, v2) \
139  IUTEST_PRED_FORMAT2_(pred_formatter, v1, v2, IUTEST_ASSERT_FAILURE)
147 #define IUTEST_EXPECT_PRED_FORMAT2(pred_formatter, v1, v2) \
148  IUTEST_PRED_FORMAT2_(pred_formatter, v1, v2, IUTEST_EXPECT_FAILURE)
156 #define IUTEST_INFORM_PRED_FORMAT2(pred_formatter, v1, v2) \
157  IUTEST_PRED_FORMAT2_(pred_formatter, v1, v2, IUTEST_INFORM_FAILURE)
165 #define IUTEST_ASSUME_PRED_FORMAT2(pred_formatter, v1, v2) \
166  IUTEST_PRED_FORMAT2_(pred_formatter, v1, v2, IUTEST_ASSUME_FAILURE)
167 
168 
177 #define IUTEST_ASSERT_PRED3(pred, v1, v2, v3) \
178  IUTEST_PRED3_(pred, v1, v2, v3, IUTEST_ASSERT_FAILURE)
187 #define IUTEST_EXPECT_PRED3(pred, v1, v2, v3) \
188  IUTEST_PRED3_(pred, v1, v2, v3, IUTEST_EXPECT_FAILURE)
197 #define IUTEST_INFORM_PRED3(pred, v1, v2, v3) \
198  IUTEST_PRED3_(pred, v1, v2, v3, IUTEST_INFORM_FAILURE)
207 #define IUTEST_ASSUME_PRED3(pred, v1, v2, v3) \
208  IUTEST_PRED3_(pred, v1, v2, v3, IUTEST_ASSUME_FAILURE)
209 
218 #define IUTEST_ASSERT_PRED_FORMAT3(pred_formatter, v1, v2, v3) \
219  IUTEST_PRED_FORMAT3_(pred_formatter, v1, v2, v3, IUTEST_ASSERT_FAILURE)
228 #define IUTEST_EXPECT_PRED_FORMAT3(pred_formatter, v1, v2, v3) \
229  IUTEST_PRED_FORMAT3_(pred_formatter, v1, v2, v3, IUTEST_EXPECT_FAILURE)
238 #define IUTEST_INFORM_PRED_FORMAT3(pred_formatter, v1, v2, v3) \
239  IUTEST_PRED_FORMAT3_(pred_formatter, v1, v2, v3, IUTEST_INFORM_FAILURE)
248 #define IUTEST_ASSUME_PRED_FORMAT3(pred_formatter, v1, v2, v3) \
249  IUTEST_PRED_FORMAT3_(pred_formatter, v1, v2, v3, IUTEST_ASSUME_FAILURE)
250 
251 
261 #define IUTEST_ASSERT_PRED4(pred, v1, v2, v3, v4) \
262  IUTEST_PRED4_(pred, v1, v2, v3, v4, IUTEST_ASSERT_FAILURE)
272 #define IUTEST_EXPECT_PRED4(pred, v1, v2, v3, v4) \
273  IUTEST_PRED4_(pred, v1, v2, v3, v4, IUTEST_EXPECT_FAILURE)
283 #define IUTEST_INFORM_PRED4(pred, v1, v2, v3, v4) \
284  IUTEST_PRED4_(pred, v1, v2, v3, v4, IUTEST_INFORM_FAILURE)
294 #define IUTEST_ASSUME_PRED4(pred, v1, v2, v3, v4) \
295  IUTEST_PRED4_(pred, v1, v2, v3, v4, IUTEST_ASSUME_FAILURE)
296 
306 #define IUTEST_ASSERT_PRED_FORMAT4(pred_formatter, v1, v2, v3, v4) \
307  IUTEST_PRED_FORMAT4_(pred_formatter, v1, v2, v3, v4, IUTEST_ASSERT_FAILURE)
317 #define IUTEST_EXPECT_PRED_FORMAT4(pred_formatter, v1, v2, v3, v4) \
318  IUTEST_PRED_FORMAT4_(pred_formatter, v1, v2, v3, v4, IUTEST_EXPECT_FAILURE)
328 #define IUTEST_INFORM_PRED_FORMAT4(pred_formatter, v1, v2, v3, v4) \
329  IUTEST_PRED_FORMAT4_(pred_formatter, v1, v2, v3, v4, IUTEST_INFORM_FAILURE)
339 #define IUTEST_ASSUME_PRED_FORMAT4(pred_formatter, v1, v2, v3, v4) \
340  IUTEST_PRED_FORMAT4_(pred_formatter, v1, v2, v3, v4, IUTEST_ASSUME_FAILURE)
341 
342 
343 
354 #define IUTEST_ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \
355  IUTEST_PRED5_(pred, v1, v2, v3, v4, v5, IUTEST_ASSERT_FAILURE)
366 #define IUTEST_EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \
367  IUTEST_PRED5_(pred, v1, v2, v3, v4, v5, IUTEST_EXPECT_FAILURE)
378 #define IUTEST_INFORM_PRED5(pred, v1, v2, v3, v4, v5) \
379  IUTEST_PRED5_(pred, v1, v2, v3, v4, v5, IUTEST_INFORM_FAILURE)
390 #define IUTEST_ASSUME_PRED5(pred, v1, v2, v3, v4, v5) \
391  IUTEST_PRED5_(pred, v1, v2, v3, v4, v5, IUTEST_ASSUME_FAILURE)
392 
403 #define IUTEST_ASSERT_PRED_FORMAT5(pred_formatter, v1, v2, v3, v4, v5) \
404  IUTEST_PRED_FORMAT5_(pred_formatter, v1, v2, v3, v4, v5, IUTEST_ASSERT_FAILURE)
415 #define IUTEST_EXPECT_PRED_FORMAT5(pred_formatter, v1, v2, v3, v4, v5) \
416  IUTEST_PRED_FORMAT5_(pred_formatter, v1, v2, v3, v4, v5, IUTEST_EXPECT_FAILURE)
427 #define IUTEST_INFORM_PRED_FORMAT5(pred_formatter, v1, v2, v3, v4, v5) \
428  IUTEST_PRED_FORMAT5_(pred_formatter, v1, v2, v3, v4, v5, IUTEST_INFORM_FAILURE)
439 #define IUTEST_ASSUME_PRED_FORMAT5(pred_formatter, v1, v2, v3, v4, v5) \
440  IUTEST_PRED_FORMAT5_(pred_formatter, v1, v2, v3, v4, v5, IUTEST_ASSUME_FAILURE)
441 
442 
443 #ifndef IUTEST_NO_VARIADIC_MACROS
444 
445 #if IUTEST_HAS_VARIADIC_TEMPLATES
446 
453 #define IUTEST_ASSERT_PRED(pred, ...) \
454  IUTEST_PRED_(pred, IUTEST_ASSERT_FAILURE, __VA_ARGS__)
461 #define IUTEST_EXPECT_PRED(pred, ...) \
462  IUTEST_PRED_(pred, IUTEST_EXPECT_FAILURE, __VA_ARGS__)
469 #define IUTEST_INFORM_PRED(pred, ...) \
470  IUTEST_PRED_(pred, IUTEST_INFORM_FAILURE, __VA_ARGS__)
477 #define IUTEST_ASSUME_PRED(pred, ...) \
478  IUTEST_PRED_(pred, IUTEST_ASSUME_FAILURE, __VA_ARGS__)
479 
480 #endif
481 
488 #define IUTEST_ASSERT_PRED_FORMAT(pred_formatter, ...) \
489  IUTEST_PRED_FORMAT_(pred_formatter, IUTEST_ASSERT_FAILURE, __VA_ARGS__)
496 #define IUTEST_EXPECT_PRED_FORMAT(pred_formatter, ...) \
497  IUTEST_PRED_FORMAT_(pred_formatter, IUTEST_EXPECT_FAILURE, __VA_ARGS__)
504 #define IUTEST_INFORM_PRED_FORMAT(pred_formatter, ...) \
505  IUTEST_PRED_FORMAT_(pred_formatter, IUTEST_INFORM_FAILURE, __VA_ARGS__)
512 #define IUTEST_ASSUME_PRED_FORMAT(pred_formatter, ...) \
513  IUTEST_PRED_FORMAT_(pred_formatter, IUTEST_ASSUME_FAILURE, __VA_ARGS__)
514 
515 #endif
516 
517 
526 #define IUTEST_ASSERT_THROW_PRED_FORMAT2(pred_formatter, statement, expected_exception, expected_exception_value) \
527  IUTEST_THROW_PRED_FORMAT2_(pred_formatter, statement, expected_exception, expected_exception_value, IUTEST_ASSERT_FAILURE)
536 #define IUTEST_EXPECT_THROW_PRED_FORMAT2(pred_formatter, statement, expected_exception, expected_exception_value) \
537  IUTEST_THROW_PRED_FORMAT2_(pred_formatter, statement, expected_exception, expected_exception_value, IUTEST_EXPECT_FAILURE)
546 #define IUTEST_INFORM_THROW_PRED_FORMAT2(pred_formatter, statement, expected_exception, expected_exception_value) \
547  IUTEST_THROW_PRED_FORMAT2_(pred_formatter, statement, expected_exception, expected_exception_value, IUTEST_INFORM_FAILURE)
556 #define IUTEST_ASSUME_THROW_PRED_FORMAT2(pred_formatter, statement, expected_exception, expected_exception_value) \
557  IUTEST_THROW_PRED_FORMAT2_(pred_formatter, statement, expected_exception, expected_exception_value, IUTEST_ASSUME_FAILURE)
558 
559 
565 #define IUTEST_PRED1_(pred, v1, on_failure) \
566  IUTEST_TEST_ASSERT_(::iutest::AssertPred1Helper(#pred, #v1, pred, v1), on_failure)
567 #define IUTEST_PRED_FORMAT1_(pred_formatter, v1, on_failure) \
568  IUTEST_TEST_ASSERT_(pred_formatter(#v1, v1), on_failure)
569 
570 
571 #define IUTEST_PRED2_(pred, v1, v2, on_failure) \
572  IUTEST_TEST_ASSERT_(::iutest::AssertPred2Helper(#pred, #v1, #v2, pred, v1, v2), on_failure)
573 #define IUTEST_PRED_FORMAT2_(pred_formatter, v1, v2, on_failure) \
574  IUTEST_TEST_ASSERT_(pred_formatter(#v1, #v2, v1, v2), on_failure)
575 
576 
577 #define IUTEST_PRED3_(pred, v1, v2, v3, on_failure) \
578  IUTEST_TEST_ASSERT_(::iutest::AssertPred3Helper(#pred, #v1, #v2, #v3, pred, v1, v2, v3), on_failure)
579 #define IUTEST_PRED_FORMAT3_(pred_formatter, v1, v2, v3, on_failure) \
580  IUTEST_TEST_ASSERT_(pred_formatter(#v1, #v2, #v3, v1, v2, v3), on_failure)
581 
582 
583 #define IUTEST_PRED4_(pred, v1, v2, v3, v4, on_failure) \
584  IUTEST_TEST_ASSERT_(::iutest::AssertPred4Helper(#pred, #v1, #v2, #v3, #v4, pred, v1, v2, v3, v4), on_failure)
585 #define IUTEST_PRED_FORMAT4_(pred_formatter, v1, v2, v3, v4, on_failure) \
586  IUTEST_TEST_ASSERT_(pred_formatter(#v1, #v2, #v3, #v4, v1, v2, v3, v4), on_failure)
587 
588 
589 #define IUTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure) \
590  IUTEST_TEST_ASSERT_(::iutest::AssertPred5Helper(#pred, #v1, #v2, #v3, #v4, #v5, pred, v1, v2, v3, v4, v5), on_failure)
591 #define IUTEST_PRED_FORMAT5_(pred_formatter, v1, v2, v3, v4, v5, on_failure) \
592  IUTEST_TEST_ASSERT_(pred_formatter(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), on_failure)
593 
594 #ifndef IUTEST_NO_VARIADIC_MACROS
595 
596 #if IUTEST_HAS_VARIADIC_TEMPLATES
597 
598 #define IUTEST_PRED_(pred, on_failure, ...) \
599  IUTEST_TEST_ASSERT_(::iutest::AssertPredVariadicHelper(#pred, #__VA_ARGS__, pred, __VA_ARGS__), on_failure)
600 
601 #endif
602 
603 #define IUTEST_PRED_FORMAT_(pred_formatter, on_failure, ...) \
604  IUTEST_TEST_ASSERT_(pred_formatter(#__VA_ARGS__, __VA_ARGS__), on_failure)
605 
606 #endif
607 
608 #define IUTEST_THROW_PRED_FORMAT2_(pred_formatter, statement, expected_exception, expected_exception_value, on_failure) \
609  IUTEST_TEST_THROW_VALUE_(statement, expected_exception, expected_exception_value, on_failure, pred_formatter)
610 
615 namespace iutest
616 {
617 
618 //======================================================================
619 // function
621 template<typename PRED, typename T1>
622 AssertionResult AssertPred1Helper(const char* pred_str, const char* expr1
623  , PRED pred, T1 val1)
624 {
625  if IUTEST_COND_LIKELY( (*pred)(val1) )
626  {
627  return AssertionSuccess();
628  }
629  return AssertionFailure() << "error: " << pred_str << "(" << expr1 << ") evaluates to false, where "
630  << "\n" << expr1 << " : " << val1;
631 }
632 
634 template<typename PRED, typename T1, typename T2>
635 AssertionResult AssertPred2Helper(const char* pred_str, const char* expr1, const char* expr2
636  , PRED pred, T1 val1, T2 val2)
637 {
638  if IUTEST_COND_LIKELY( (*pred)(val1, val2) )
639  {
640  return AssertionSuccess();
641  }
642  return AssertionFailure() << "error: " << pred_str << "("
643  << expr1 << ", " << expr2
644  << ") evaluates to false, where "
645  << "\n" << expr1 << " : " << val1
646  << "\n" << expr2 << " : " << val2;
647 }
648 
650 template<typename PRED, typename T1, typename T2, typename T3>
651 AssertionResult AssertPred3Helper(const char* pred_str
652  , const char* expr1, const char* expr2, const char* expr3
653  , PRED pred, T1 val1, T2 val2, T3 val3)
654 {
655  if IUTEST_COND_LIKELY( (*pred)(val1, val2, val3) )
656  {
657  return AssertionSuccess();
658  }
659  return AssertionFailure() << "error: " << pred_str << "("
660  << expr1 << ", " << expr2 << ", " << expr3
661  << ") evaluates to false, where "
662  << "\n" << expr1 << " : " << val1
663  << "\n" << expr2 << " : " << val2
664  << "\n" << expr3 << " : " << val3;
665 }
666 
668 template<typename PRED, typename T1, typename T2, typename T3, typename T4>
669 AssertionResult AssertPred4Helper(const char* pred_str
670  , const char* expr1, const char* expr2, const char* expr3, const char* expr4
671  , PRED pred, T1 val1, T2 val2, T3 val3, T4 val4)
672 {
673  if IUTEST_COND_LIKELY( (*pred)(val1, val2, val3, val4) )
674  {
675  return AssertionSuccess();
676  }
677  return AssertionFailure() << "error: " << pred_str << "("
678  << expr1 << ", " << expr2 << ", " << expr3 << ", " << expr4
679  << ") evaluates to false, where "
680  << "\n" << expr1 << " : " << val1
681  << "\n" << expr2 << " : " << val2
682  << "\n" << expr3 << " : " << val3
683  << "\n" << expr4 << " : " << val4;
684 }
685 
687 template<typename PRED, typename T1, typename T2, typename T3, typename T4, typename T5>
688 AssertionResult AssertPred5Helper(const char* pred_str
689  , const char* expr1, const char* expr2, const char* expr3, const char* expr4, const char* expr5
690  , PRED pred, T1 val1, T2 val2, T3 val3, T4 val4, T5 val5)
691 {
692  if IUTEST_COND_LIKELY( (*pred)(val1, val2, val3, val4, val5) )
693  {
694  return AssertionSuccess();
695  }
696  return AssertionFailure() << "error: " << pred_str << "("
697  << expr1 << ", " << expr2 << ", " << expr3 << ", " << expr4 << ", " << expr5
698  << ") evaluates to false, where "
699  << "\n" << expr1 << " : " << val1
700  << "\n" << expr2 << " : " << val2
701  << "\n" << expr3 << " : " << val3
702  << "\n" << expr4 << " : " << val4
703  << "\n" << expr5 << " : " << val5;
704 }
705 
706 #if IUTEST_HAS_VARIADIC_TEMPLATES
707 
709 template<typename PRED, typename ...Args>
710 AssertionResult AssertPredVariadicHelper(const char* pred_str, const char* params
711  , PRED pred, Args... args)
712 {
713  if IUTEST_COND_LIKELY( (*pred)(args...) )
714  {
715  return AssertionSuccess();
716  }
717  return AssertionFailure() << "error: " << pred_str << "("
718  << params << ") evaluates to false, where "
719  << "\n" << PrintToStrings("\n", args...);
720 }
721 
722 #endif
723 
724 } // end of namespace iutest
725 
726 #endif // INCG_IRIS_IUTEST_PRED_HPP_ADF851F3_C89B_4CA4_B9A0_A2B2229945C6_
iris unit test assertion 定義 ファイル
iutest root namespace
Definition: iutest_charcode.hpp:33
AssertionResult AssertionSuccess()
テスト成功を示す AssertionResult オブジェクトの取得
Definition: iutest_assertion.hpp:406
AssertionResult AssertionFailure()
テスト失敗を示す AssertionResult オブジェクトの取得
Definition: iutest_assertion.hpp:410
inline ::std::string PrintToStrings(const char *separate, const T &v)
文字列化
Definition: iutest_printers.hpp:779