iutest  1.17.1.0
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 #include "iutest_assertion.hpp"
21 
22 //======================================================================
23 // define
24 
31 #define IUTEST_ASSERT_PRED1(pred, v1) \
32  IUTEST_PRED1_(pred, v1, IUTEST_ASSERT_FAILURE)
33 
39 #define IUTEST_EXPECT_PRED1(pred, v1) \
40  IUTEST_PRED1_(pred, v1, IUTEST_EXPECT_FAILURE)
41 
47 #define IUTEST_INFORM_PRED1(pred, v1) \
48  IUTEST_PRED1_(pred, v1, IUTEST_INFORM_FAILURE)
49 
55 #define IUTEST_ASSUME_PRED1(pred, v1) \
56  IUTEST_PRED1_(pred, v1, IUTEST_ASSUME_FAILURE)
57 
64 #define IUTEST_ASSERT_PRED_FORMAT1(pred_formatter, v1) \
65  IUTEST_PRED_FORMAT1_(pred_formatter, v1, IUTEST_ASSERT_FAILURE)
66 
72 #define IUTEST_EXPECT_PRED_FORMAT1(pred_formatter, v1) \
73  IUTEST_PRED_FORMAT1_(pred_formatter, v1, IUTEST_EXPECT_FAILURE)
74 
80 #define IUTEST_INFORM_PRED_FORMAT1(pred_formatter, v1) \
81  IUTEST_PRED_FORMAT1_(pred_formatter, v1, IUTEST_INFORM_FAILURE)
82 
88 #define IUTEST_ASSUME_PRED_FORMAT1(pred_formatter, v1) \
89  IUTEST_PRED_FORMAT1_(pred_formatter, v1, IUTEST_ASSUME_FAILURE)
90 
91 
99 #define IUTEST_ASSERT_PRED2(pred, v1, v2) \
100  IUTEST_PRED2_(pred, v1, v2, IUTEST_ASSERT_FAILURE)
101 
108 #define IUTEST_EXPECT_PRED2(pred, v1, v2) \
109  IUTEST_PRED2_(pred, v1, v2, IUTEST_EXPECT_FAILURE)
110 
117 #define IUTEST_INFORM_PRED2(pred, v1, v2) \
118  IUTEST_PRED2_(pred, v1, v2, IUTEST_INFORM_FAILURE)
119 
126 #define IUTEST_ASSUME_PRED2(pred, v1, v2) \
127  IUTEST_PRED2_(pred, v1, v2, IUTEST_ASSUME_FAILURE)
128 
136 #define IUTEST_ASSERT_PRED_FORMAT2(pred_formatter, v1, v2) \
137  IUTEST_PRED_FORMAT2_(pred_formatter, v1, v2, IUTEST_ASSERT_FAILURE)
138 
145 #define IUTEST_EXPECT_PRED_FORMAT2(pred_formatter, v1, v2) \
146  IUTEST_PRED_FORMAT2_(pred_formatter, v1, v2, IUTEST_EXPECT_FAILURE)
147 
154 #define IUTEST_INFORM_PRED_FORMAT2(pred_formatter, v1, v2) \
155  IUTEST_PRED_FORMAT2_(pred_formatter, v1, v2, IUTEST_INFORM_FAILURE)
156 
163 #define IUTEST_ASSUME_PRED_FORMAT2(pred_formatter, v1, v2) \
164  IUTEST_PRED_FORMAT2_(pred_formatter, v1, v2, IUTEST_ASSUME_FAILURE)
165 
166 
175 #define IUTEST_ASSERT_PRED3(pred, v1, v2, v3) \
176  IUTEST_PRED3_(pred, v1, v2, v3, IUTEST_ASSERT_FAILURE)
177 
185 #define IUTEST_EXPECT_PRED3(pred, v1, v2, v3) \
186  IUTEST_PRED3_(pred, v1, v2, v3, IUTEST_EXPECT_FAILURE)
187 
195 #define IUTEST_INFORM_PRED3(pred, v1, v2, v3) \
196  IUTEST_PRED3_(pred, v1, v2, v3, IUTEST_INFORM_FAILURE)
197 
205 #define IUTEST_ASSUME_PRED3(pred, v1, v2, v3) \
206  IUTEST_PRED3_(pred, v1, v2, v3, IUTEST_ASSUME_FAILURE)
207 
216 #define IUTEST_ASSERT_PRED_FORMAT3(pred_formatter, v1, v2, v3) \
217  IUTEST_PRED_FORMAT3_(pred_formatter, v1, v2, v3, IUTEST_ASSERT_FAILURE)
218 
226 #define IUTEST_EXPECT_PRED_FORMAT3(pred_formatter, v1, v2, v3) \
227  IUTEST_PRED_FORMAT3_(pred_formatter, v1, v2, v3, IUTEST_EXPECT_FAILURE)
228 
236 #define IUTEST_INFORM_PRED_FORMAT3(pred_formatter, v1, v2, v3) \
237  IUTEST_PRED_FORMAT3_(pred_formatter, v1, v2, v3, IUTEST_INFORM_FAILURE)
238 
246 #define IUTEST_ASSUME_PRED_FORMAT3(pred_formatter, v1, v2, v3) \
247  IUTEST_PRED_FORMAT3_(pred_formatter, v1, v2, v3, IUTEST_ASSUME_FAILURE)
248 
249 
259 #define IUTEST_ASSERT_PRED4(pred, v1, v2, v3, v4) \
260  IUTEST_PRED4_(pred, v1, v2, v3, v4, IUTEST_ASSERT_FAILURE)
261 
270 #define IUTEST_EXPECT_PRED4(pred, v1, v2, v3, v4) \
271  IUTEST_PRED4_(pred, v1, v2, v3, v4, IUTEST_EXPECT_FAILURE)
272 
281 #define IUTEST_INFORM_PRED4(pred, v1, v2, v3, v4) \
282  IUTEST_PRED4_(pred, v1, v2, v3, v4, IUTEST_INFORM_FAILURE)
283 
292 #define IUTEST_ASSUME_PRED4(pred, v1, v2, v3, v4) \
293  IUTEST_PRED4_(pred, v1, v2, v3, v4, IUTEST_ASSUME_FAILURE)
294 
304 #define IUTEST_ASSERT_PRED_FORMAT4(pred_formatter, v1, v2, v3, v4) \
305  IUTEST_PRED_FORMAT4_(pred_formatter, v1, v2, v3, v4, IUTEST_ASSERT_FAILURE)
306 
315 #define IUTEST_EXPECT_PRED_FORMAT4(pred_formatter, v1, v2, v3, v4) \
316  IUTEST_PRED_FORMAT4_(pred_formatter, v1, v2, v3, v4, IUTEST_EXPECT_FAILURE)
317 
326 #define IUTEST_INFORM_PRED_FORMAT4(pred_formatter, v1, v2, v3, v4) \
327  IUTEST_PRED_FORMAT4_(pred_formatter, v1, v2, v3, v4, IUTEST_INFORM_FAILURE)
328 
337 #define IUTEST_ASSUME_PRED_FORMAT4(pred_formatter, v1, v2, v3, v4) \
338  IUTEST_PRED_FORMAT4_(pred_formatter, v1, v2, v3, v4, IUTEST_ASSUME_FAILURE)
339 
340 
341 
352 #define IUTEST_ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \
353  IUTEST_PRED5_(pred, v1, v2, v3, v4, v5, IUTEST_ASSERT_FAILURE)
354 
364 #define IUTEST_EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \
365  IUTEST_PRED5_(pred, v1, v2, v3, v4, v5, IUTEST_EXPECT_FAILURE)
366 
376 #define IUTEST_INFORM_PRED5(pred, v1, v2, v3, v4, v5) \
377  IUTEST_PRED5_(pred, v1, v2, v3, v4, v5, IUTEST_INFORM_FAILURE)
378 
388 #define IUTEST_ASSUME_PRED5(pred, v1, v2, v3, v4, v5) \
389  IUTEST_PRED5_(pred, v1, v2, v3, v4, v5, IUTEST_ASSUME_FAILURE)
390 
401 #define IUTEST_ASSERT_PRED_FORMAT5(pred_formatter, v1, v2, v3, v4, v5) \
402  IUTEST_PRED_FORMAT5_(pred_formatter, v1, v2, v3, v4, v5, IUTEST_ASSERT_FAILURE)
403 
413 #define IUTEST_EXPECT_PRED_FORMAT5(pred_formatter, v1, v2, v3, v4, v5) \
414  IUTEST_PRED_FORMAT5_(pred_formatter, v1, v2, v3, v4, v5, IUTEST_EXPECT_FAILURE)
415 
425 #define IUTEST_INFORM_PRED_FORMAT5(pred_formatter, v1, v2, v3, v4, v5) \
426  IUTEST_PRED_FORMAT5_(pred_formatter, v1, v2, v3, v4, v5, IUTEST_INFORM_FAILURE)
427 
437 #define IUTEST_ASSUME_PRED_FORMAT5(pred_formatter, v1, v2, v3, v4, v5) \
438  IUTEST_PRED_FORMAT5_(pred_formatter, v1, v2, v3, v4, v5, IUTEST_ASSUME_FAILURE)
439 
440 
441 #ifndef IUTEST_NO_VARIADIC_MACROS
442 
443 #if IUTEST_HAS_VARIADIC_TEMPLATES
444 
451 #define IUTEST_ASSERT_PRED(pred, ...) \
452  IUTEST_PRED_(pred, IUTEST_ASSERT_FAILURE, __VA_ARGS__)
453 
459 #define IUTEST_EXPECT_PRED(pred, ...) \
460  IUTEST_PRED_(pred, IUTEST_EXPECT_FAILURE, __VA_ARGS__)
461 
467 #define IUTEST_INFORM_PRED(pred, ...) \
468  IUTEST_PRED_(pred, IUTEST_INFORM_FAILURE, __VA_ARGS__)
469 
475 #define IUTEST_ASSUME_PRED(pred, ...) \
476  IUTEST_PRED_(pred, IUTEST_ASSUME_FAILURE, __VA_ARGS__)
477 
478 #endif
479 
486 #define IUTEST_ASSERT_PRED_FORMAT(pred_formatter, ...) \
487  IUTEST_PRED_FORMAT_(pred_formatter, IUTEST_ASSERT_FAILURE, __VA_ARGS__)
488 
494 #define IUTEST_EXPECT_PRED_FORMAT(pred_formatter, ...) \
495  IUTEST_PRED_FORMAT_(pred_formatter, IUTEST_EXPECT_FAILURE, __VA_ARGS__)
496 
502 #define IUTEST_INFORM_PRED_FORMAT(pred_formatter, ...) \
503  IUTEST_PRED_FORMAT_(pred_formatter, IUTEST_INFORM_FAILURE, __VA_ARGS__)
504 
510 #define IUTEST_ASSUME_PRED_FORMAT(pred_formatter, ...) \
511  IUTEST_PRED_FORMAT_(pred_formatter, IUTEST_ASSUME_FAILURE, __VA_ARGS__)
512 
513 #endif
514 
515 
524 #define IUTEST_ASSERT_THROW_PRED_FORMAT2(pred_formatter, statement, expected_exception, expected_exception_value) \
525  IUTEST_THROW_PRED_FORMAT2_(pred_formatter, statement, expected_exception, expected_exception_value, IUTEST_ASSERT_FAILURE)
526 
534 #define IUTEST_EXPECT_THROW_PRED_FORMAT2(pred_formatter, statement, expected_exception, expected_exception_value) \
535  IUTEST_THROW_PRED_FORMAT2_(pred_formatter, statement, expected_exception, expected_exception_value, IUTEST_EXPECT_FAILURE)
536 
544 #define IUTEST_INFORM_THROW_PRED_FORMAT2(pred_formatter, statement, expected_exception, expected_exception_value) \
545  IUTEST_THROW_PRED_FORMAT2_(pred_formatter, statement, expected_exception, expected_exception_value, IUTEST_INFORM_FAILURE)
546 
554 #define IUTEST_ASSUME_THROW_PRED_FORMAT2(pred_formatter, statement, expected_exception, expected_exception_value) \
555  IUTEST_THROW_PRED_FORMAT2_(pred_formatter, statement, expected_exception, expected_exception_value, IUTEST_ASSUME_FAILURE)
556 
557 
563 #define IUTEST_PRED1_(pred, v1, on_failure) \
564  IUTEST_TEST_ASSERT_(::iutest::AssertPred1Helper(#pred, #v1, pred, v1), on_failure)
565 #define IUTEST_PRED_FORMAT1_(pred_formatter, v1, on_failure) \
566  IUTEST_TEST_ASSERT_(pred_formatter(#v1, v1), on_failure)
567 
568 
569 #define IUTEST_PRED2_(pred, v1, v2, on_failure) \
570  IUTEST_TEST_ASSERT_(::iutest::AssertPred2Helper(#pred, #v1, #v2, pred, v1, v2), on_failure)
571 #define IUTEST_PRED_FORMAT2_(pred_formatter, v1, v2, on_failure) \
572  IUTEST_TEST_ASSERT_(pred_formatter(#v1, #v2, v1, v2), on_failure)
573 
574 
575 #define IUTEST_PRED3_(pred, v1, v2, v3, on_failure) \
576  IUTEST_TEST_ASSERT_(::iutest::AssertPred3Helper(#pred, #v1, #v2, #v3, pred, v1, v2, v3), on_failure)
577 #define IUTEST_PRED_FORMAT3_(pred_formatter, v1, v2, v3, on_failure) \
578  IUTEST_TEST_ASSERT_(pred_formatter(#v1, #v2, #v3, v1, v2, v3), on_failure)
579 
580 
581 #define IUTEST_PRED4_(pred, v1, v2, v3, v4, on_failure) \
582  IUTEST_TEST_ASSERT_(::iutest::AssertPred4Helper(#pred, #v1, #v2, #v3, #v4, pred, v1, v2, v3, v4), on_failure)
583 #define IUTEST_PRED_FORMAT4_(pred_formatter, v1, v2, v3, v4, on_failure) \
584  IUTEST_TEST_ASSERT_(pred_formatter(#v1, #v2, #v3, #v4, v1, v2, v3, v4), on_failure)
585 
586 
587 #define IUTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure) \
588  IUTEST_TEST_ASSERT_(::iutest::AssertPred5Helper(#pred, #v1, #v2, #v3, #v4, #v5, pred, v1, v2, v3, v4, v5), on_failure)
589 #define IUTEST_PRED_FORMAT5_(pred_formatter, v1, v2, v3, v4, v5, on_failure) \
590  IUTEST_TEST_ASSERT_(pred_formatter(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), on_failure)
591 
592 #ifndef IUTEST_NO_VARIADIC_MACROS
593 
594 #if IUTEST_HAS_VARIADIC_TEMPLATES
595 
596 #define IUTEST_PRED_(pred, on_failure, ...) \
597  IUTEST_TEST_ASSERT_(::iutest::AssertPredVariadicHelper(#pred, #__VA_ARGS__, pred, __VA_ARGS__), on_failure)
598 
599 #endif
600 
601 #define IUTEST_PRED_FORMAT_(pred_formatter, on_failure, ...) \
602  IUTEST_TEST_ASSERT_(pred_formatter(#__VA_ARGS__, __VA_ARGS__), on_failure)
603 
604 #endif
605 
606 #define IUTEST_THROW_PRED_FORMAT2_(pred_formatter, statement, expected_exception, expected_exception_value, on_failure) \
607  IUTEST_TEST_THROW_VALUE_(statement, expected_exception, expected_exception_value, on_failure, pred_formatter)
608 
613 namespace iutest
614 {
615 
616 //======================================================================
617 // function
619 template<typename PRED, typename T1>
620 AssertionResult AssertPred1Helper(const char* pred_str, const char* expr1
621  , PRED pred, T1 val1)
622 {
623  if( (*pred)(val1) )
624  {
625  return AssertionSuccess();
626  }
627  return AssertionFailure() << "error: " << pred_str << "(" << expr1 << ") evaluates to false, where "
628  << "\n" << expr1 << " : " << val1;
629 }
630 
632 template<typename PRED, typename T1, typename T2>
633 AssertionResult AssertPred2Helper(const char* pred_str, const char* expr1, const char* expr2
634  , PRED pred, T1 val1, T2 val2)
635 {
636  if( (*pred)(val1, val2) )
637  {
638  return AssertionSuccess();
639  }
640  return AssertionFailure() << "error: " << pred_str << "("
641  << expr1 << ", " << expr2
642  << ") evaluates to false, where "
643  << "\n" << expr1 << " : " << val1
644  << "\n" << expr2 << " : " << val2;
645 }
646 
648 template<typename PRED, typename T1, typename T2, typename T3>
649 AssertionResult AssertPred3Helper(const char* pred_str
650  , const char* expr1, const char* expr2, const char* expr3
651  , PRED pred, T1 val1, T2 val2, T3 val3)
652 {
653  if( (*pred)(val1, val2, val3) )
654  {
655  return AssertionSuccess();
656  }
657  return AssertionFailure() << "error: " << pred_str << "("
658  << expr1 << ", " << expr2 << ", " << expr3
659  << ") evaluates to false, where "
660  << "\n" << expr1 << " : " << val1
661  << "\n" << expr2 << " : " << val2
662  << "\n" << expr3 << " : " << val3;
663 }
664 
666 template<typename PRED, typename T1, typename T2, typename T3, typename T4>
667 AssertionResult AssertPred4Helper(const char* pred_str
668  , const char* expr1, const char* expr2, const char* expr3, const char* expr4
669  , PRED pred, T1 val1, T2 val2, T3 val3, T4 val4)
670 {
671  if( (*pred)(val1, val2, val3, val4) )
672  {
673  return AssertionSuccess();
674  }
675  return AssertionFailure() << "error: " << pred_str << "("
676  << expr1 << ", " << expr2 << ", " << expr3 << ", " << expr4
677  << ") evaluates to false, where "
678  << "\n" << expr1 << " : " << val1
679  << "\n" << expr2 << " : " << val2
680  << "\n" << expr3 << " : " << val3
681  << "\n" << expr4 << " : " << val4;
682 }
683 
685 template<typename PRED, typename T1, typename T2, typename T3, typename T4, typename T5>
686 AssertionResult AssertPred5Helper(const char* pred_str
687  , const char* expr1, const char* expr2, const char* expr3, const char* expr4, const char* expr5
688  , PRED pred, T1 val1, T2 val2, T3 val3, T4 val4, T5 val5)
689 {
690  if( (*pred)(val1, val2, val3, val4, val5) )
691  {
692  return AssertionSuccess();
693  }
694  return AssertionFailure() << "error: " << pred_str << "("
695  << expr1 << ", " << expr2 << ", " << expr3 << ", " << expr4 << ", " << expr5
696  << ") evaluates to false, where "
697  << "\n" << expr1 << " : " << val1
698  << "\n" << expr2 << " : " << val2
699  << "\n" << expr3 << " : " << val3
700  << "\n" << expr4 << " : " << val4
701  << "\n" << expr5 << " : " << val5;
702 }
703 
704 #if IUTEST_HAS_VARIADIC_TEMPLATES
705 
707 template<typename PRED, typename ...Args>
708 AssertionResult AssertPredVariadicHelper(const char* pred_str, const char* params
709  , PRED pred, Args... args)
710 {
711  if( (*pred)(args...) )
712  {
713  return AssertionSuccess();
714  }
715  return AssertionFailure() << "error: " << pred_str << "("
716  << params << ") evaluates to false, where "
717  << "\n" << PrintToStrings("\n", args...);
718 }
719 
720 #endif
721 
722 } // end of namespace iutest
723 
724 #endif // INCG_IRIS_IUTEST_PRED_HPP_ADF851F3_C89B_4CA4_B9A0_A2B2229945C6_
iutest_assertion.hpp
iris unit test assertion 定義 ファイル
iutest_config.hpp
iris unit test config
iutest
iutest root namespace
Definition: iutest_charcode.hpp:31
iutest::PrintToStrings
inline ::std::string PrintToStrings(const char *separate, const T &v)
文字列化
Definition: iutest_printers.hpp:690
iutest::AssertionFailure
AssertionResult AssertionFailure()
テスト失敗を示す AssertionResult オブジェクトの取得
Definition: iutest_assertion.hpp:386
iutest::AssertionSuccess
AssertionResult AssertionSuccess()
テスト成功を示す AssertionResult オブジェクトの取得
Definition: iutest_assertion.hpp:382