15 #ifndef INCG_IRIS_IUTEST_PRED_HPP_ADF851F3_C89B_4CA4_B9A0_A2B2229945C6_ 
   16 #define INCG_IRIS_IUTEST_PRED_HPP_ADF851F3_C89B_4CA4_B9A0_A2B2229945C6_ 
   31 #define IUTEST_ASSERT_PRED1(pred, v1)       \ 
   32     IUTEST_PRED1_(pred, v1, IUTEST_ASSERT_FAILURE) 
   39 #define IUTEST_EXPECT_PRED1(pred, v1)       \ 
   40     IUTEST_PRED1_(pred, v1, IUTEST_EXPECT_FAILURE) 
   47 #define IUTEST_INFORM_PRED1(pred, v1)       \ 
   48     IUTEST_PRED1_(pred, v1, IUTEST_INFORM_FAILURE) 
   55 #define IUTEST_ASSUME_PRED1(pred, v1)       \ 
   56     IUTEST_PRED1_(pred, v1, IUTEST_ASSUME_FAILURE) 
   64 #define IUTEST_ASSERT_PRED_FORMAT1(pred_formatter, v1)      \ 
   65     IUTEST_PRED_FORMAT1_(pred_formatter, v1, IUTEST_ASSERT_FAILURE) 
   72 #define IUTEST_EXPECT_PRED_FORMAT1(pred_formatter, v1)      \ 
   73     IUTEST_PRED_FORMAT1_(pred_formatter, v1, IUTEST_EXPECT_FAILURE) 
   80 #define IUTEST_INFORM_PRED_FORMAT1(pred_formatter, v1)      \ 
   81     IUTEST_PRED_FORMAT1_(pred_formatter, v1, IUTEST_INFORM_FAILURE) 
   88 #define IUTEST_ASSUME_PRED_FORMAT1(pred_formatter, v1)      \ 
   89     IUTEST_PRED_FORMAT1_(pred_formatter, v1, IUTEST_ASSUME_FAILURE) 
   99 #define IUTEST_ASSERT_PRED2(pred, v1, v2)       \ 
  100     IUTEST_PRED2_(pred, v1, v2, IUTEST_ASSERT_FAILURE) 
  108 #define IUTEST_EXPECT_PRED2(pred, v1, v2)       \ 
  109     IUTEST_PRED2_(pred, v1, v2, IUTEST_EXPECT_FAILURE) 
  117 #define IUTEST_INFORM_PRED2(pred, v1, v2)       \ 
  118     IUTEST_PRED2_(pred, v1, v2, IUTEST_INFORM_FAILURE) 
  126 #define IUTEST_ASSUME_PRED2(pred, v1, v2)       \ 
  127     IUTEST_PRED2_(pred, v1, v2, IUTEST_ASSUME_FAILURE) 
  136 #define IUTEST_ASSERT_PRED_FORMAT2(pred_formatter, v1, v2)      \ 
  137     IUTEST_PRED_FORMAT2_(pred_formatter, v1, v2, IUTEST_ASSERT_FAILURE) 
  145 #define IUTEST_EXPECT_PRED_FORMAT2(pred_formatter, v1, v2)      \ 
  146     IUTEST_PRED_FORMAT2_(pred_formatter, v1, v2, IUTEST_EXPECT_FAILURE) 
  154 #define IUTEST_INFORM_PRED_FORMAT2(pred_formatter, v1, v2)      \ 
  155     IUTEST_PRED_FORMAT2_(pred_formatter, v1, v2, IUTEST_INFORM_FAILURE) 
  163 #define IUTEST_ASSUME_PRED_FORMAT2(pred_formatter, v1, v2)      \ 
  164     IUTEST_PRED_FORMAT2_(pred_formatter, v1, v2, IUTEST_ASSUME_FAILURE) 
  175 #define IUTEST_ASSERT_PRED3(pred, v1, v2, v3)       \ 
  176     IUTEST_PRED3_(pred, v1, v2, v3, IUTEST_ASSERT_FAILURE) 
  185 #define IUTEST_EXPECT_PRED3(pred, v1, v2, v3)       \ 
  186     IUTEST_PRED3_(pred, v1, v2, v3, IUTEST_EXPECT_FAILURE) 
  195 #define IUTEST_INFORM_PRED3(pred, v1, v2, v3)       \ 
  196     IUTEST_PRED3_(pred, v1, v2, v3, IUTEST_INFORM_FAILURE) 
  205 #define IUTEST_ASSUME_PRED3(pred, v1, v2, v3)       \ 
  206     IUTEST_PRED3_(pred, v1, v2, v3, IUTEST_ASSUME_FAILURE) 
  216 #define IUTEST_ASSERT_PRED_FORMAT3(pred_formatter, v1, v2, v3)      \ 
  217     IUTEST_PRED_FORMAT3_(pred_formatter, v1, v2, v3, IUTEST_ASSERT_FAILURE) 
  226 #define IUTEST_EXPECT_PRED_FORMAT3(pred_formatter, v1, v2, v3)      \ 
  227     IUTEST_PRED_FORMAT3_(pred_formatter, v1, v2, v3, IUTEST_EXPECT_FAILURE) 
  236 #define IUTEST_INFORM_PRED_FORMAT3(pred_formatter, v1, v2, v3)      \ 
  237     IUTEST_PRED_FORMAT3_(pred_formatter, v1, v2, v3, IUTEST_INFORM_FAILURE) 
  246 #define IUTEST_ASSUME_PRED_FORMAT3(pred_formatter, v1, v2, v3)      \ 
  247     IUTEST_PRED_FORMAT3_(pred_formatter, v1, v2, v3, IUTEST_ASSUME_FAILURE) 
  259 #define IUTEST_ASSERT_PRED4(pred, v1, v2, v3, v4)       \ 
  260     IUTEST_PRED4_(pred, v1, v2, v3, v4, IUTEST_ASSERT_FAILURE) 
  270 #define IUTEST_EXPECT_PRED4(pred, v1, v2, v3, v4)       \ 
  271     IUTEST_PRED4_(pred, v1, v2, v3, v4, IUTEST_EXPECT_FAILURE) 
  281 #define IUTEST_INFORM_PRED4(pred, v1, v2, v3, v4)       \ 
  282     IUTEST_PRED4_(pred, v1, v2, v3, v4, IUTEST_INFORM_FAILURE) 
  292 #define IUTEST_ASSUME_PRED4(pred, v1, v2, v3, v4)       \ 
  293     IUTEST_PRED4_(pred, v1, v2, v3, v4, IUTEST_ASSUME_FAILURE) 
  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) 
  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) 
  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) 
  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) 
  352 #define IUTEST_ASSERT_PRED5(pred, v1, v2, v3, v4, v5)       \ 
  353     IUTEST_PRED5_(pred, v1, v2, v3, v4, v5, IUTEST_ASSERT_FAILURE) 
  364 #define IUTEST_EXPECT_PRED5(pred, v1, v2, v3, v4, v5)       \ 
  365     IUTEST_PRED5_(pred, v1, v2, v3, v4, v5, IUTEST_EXPECT_FAILURE) 
  376 #define IUTEST_INFORM_PRED5(pred, v1, v2, v3, v4, v5)       \ 
  377     IUTEST_PRED5_(pred, v1, v2, v3, v4, v5, IUTEST_INFORM_FAILURE) 
  388 #define IUTEST_ASSUME_PRED5(pred, v1, v2, v3, v4, v5)       \ 
  389     IUTEST_PRED5_(pred, v1, v2, v3, v4, v5, IUTEST_ASSUME_FAILURE) 
  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) 
  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) 
  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) 
  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) 
  441 #ifndef IUTEST_NO_VARIADIC_MACROS 
  443 #if IUTEST_HAS_VARIADIC_TEMPLATES 
  451 #define IUTEST_ASSERT_PRED(pred, ...)       \ 
  452     IUTEST_PRED_(pred, IUTEST_ASSERT_FAILURE, __VA_ARGS__) 
  459 #define IUTEST_EXPECT_PRED(pred, ...)       \ 
  460     IUTEST_PRED_(pred, IUTEST_EXPECT_FAILURE, __VA_ARGS__) 
  467 #define IUTEST_INFORM_PRED(pred, ...)       \ 
  468     IUTEST_PRED_(pred, IUTEST_INFORM_FAILURE, __VA_ARGS__) 
  475 #define IUTEST_ASSUME_PRED(pred, ...)       \ 
  476     IUTEST_PRED_(pred, IUTEST_ASSUME_FAILURE, __VA_ARGS__) 
  486 #define IUTEST_ASSERT_PRED_FORMAT(pred_formatter, ...)      \ 
  487     IUTEST_PRED_FORMAT_(pred_formatter, IUTEST_ASSERT_FAILURE, __VA_ARGS__) 
  494 #define IUTEST_EXPECT_PRED_FORMAT(pred_formatter, ...)      \ 
  495     IUTEST_PRED_FORMAT_(pred_formatter, IUTEST_EXPECT_FAILURE, __VA_ARGS__) 
  502 #define IUTEST_INFORM_PRED_FORMAT(pred_formatter, ...)      \ 
  503     IUTEST_PRED_FORMAT_(pred_formatter, IUTEST_INFORM_FAILURE, __VA_ARGS__) 
  510 #define IUTEST_ASSUME_PRED_FORMAT(pred_formatter, ...)      \ 
  511     IUTEST_PRED_FORMAT_(pred_formatter, IUTEST_ASSUME_FAILURE, __VA_ARGS__) 
  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) 
  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) 
  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) 
  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) 
  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) 
  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) 
  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) 
  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) 
  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) 
  592 #ifndef IUTEST_NO_VARIADIC_MACROS 
  594 #if IUTEST_HAS_VARIADIC_TEMPLATES 
  596 #define IUTEST_PRED_(pred, on_failure, ...) \ 
  597     IUTEST_TEST_ASSERT_(::iutest::AssertPredVariadicHelper(#pred, #__VA_ARGS__, pred, __VA_ARGS__), on_failure) 
  601 #define IUTEST_PRED_FORMAT_(pred_formatter, on_failure, ...)    \ 
  602     IUTEST_TEST_ASSERT_(pred_formatter(#__VA_ARGS__, __VA_ARGS__), on_failure) 
  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) 
  619 template<
typename PRED, 
typename T1>
 
  620 AssertionResult AssertPred1Helper(
const char* pred_str, 
const char* expr1
 
  621     , PRED pred, T1 val1)
 
  627     return AssertionFailure() << 
"error: " << pred_str << 
"(" << expr1 << 
") evaluates to false, where " 
  628         << 
"\n" << expr1 << 
" : " << val1;
 
  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)
 
  636     if( (*pred)(val1, val2) )
 
  641         << expr1 << 
", " << expr2
 
  642         << 
") evaluates to false, where " 
  643         << 
"\n" << expr1 << 
" : " << val1
 
  644         << 
"\n" << expr2 << 
" : " << val2;
 
  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)
 
  653     if( (*pred)(val1, val2, val3) )
 
  658         << expr1 << 
", " << expr2 << 
", " << expr3
 
  659         << 
") evaluates to false, where " 
  660         << 
"\n" << expr1 << 
" : " << val1
 
  661         << 
"\n" << expr2 << 
" : " << val2
 
  662         << 
"\n" << expr3 << 
" : " << val3;
 
  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)
 
  671     if( (*pred)(val1, val2, val3, val4) )
 
  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;
 
  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)
 
  690     if( (*pred)(val1, val2, val3, val4, val5) )
 
  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;
 
  704 #if IUTEST_HAS_VARIADIC_TEMPLATES 
  707 template<
typename PRED, 
typename ...Args>
 
  708 AssertionResult AssertPredVariadicHelper(
const char* pred_str, 
const char* params
 
  709     , PRED pred, Args... args)
 
  711     if( (*pred)(args...) )
 
  716         << params << 
") evaluates to false, where " 
  724 #endif // INCG_IRIS_IUTEST_PRED_HPP_ADF851F3_C89B_4CA4_B9A0_A2B2229945C6_