?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1. // Copyright 2006, Google Inc.
  2. // All rights reserved.
  3. //
  4. // Redistribution and use in source and binary forms, with or without
  5. // modification, are permitted provided that the following conditions are
  6. // met:
  7. //
  8. //     * Redistributions of source code must retain the above copyright
  9. // notice, this list of conditions and the following disclaimer.
  10. //     * Redistributions in binary form must reproduce the above
  11. // copyright notice, this list of conditions and the following disclaimer
  12. // in the documentation and/or other materials provided with the
  13. // distribution.
  14. //     * Neither the name of Google Inc. nor the names of its
  15. // contributors may be used to endorse or promote products derived from
  16. // this software without specific prior written permission.
  17. //
  18. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  19. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  20. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  21. // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  22. // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  23. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  24. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  25. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  26. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  27. // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  28. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29.  
  30. // This file is AUTOMATICALLY GENERATED on 01/02/2018 by command
  31. // 'gen_gtest_pred_impl.py 5'.  DO NOT EDIT BY HAND!
  32.  
  33. // Regression test for gtest_pred_impl.h
  34. //
  35. // This file is generated by a script and quite long.  If you intend to
  36. // learn how Google Test works by reading its unit tests, read
  37. // gtest_unittest.cc instead.
  38. //
  39. // This is intended as a regression test for the Google Test predicate
  40. // assertions.  We compile it as part of the gtest_unittest target
  41. // only to keep the implementation tidy and compact, as it is quite
  42. // involved to set up the stage for testing Google Test using Google
  43. // Test itself.
  44. //
  45. // Currently, gtest_unittest takes ~11 seconds to run in the testing
  46. // daemon.  In the future, if it grows too large and needs much more
  47. // time to finish, we should consider separating this file into a
  48. // stand-alone regression test.
  49.  
  50. #include <iostream>
  51.  
  52. #include "gtest/gtest.h"
  53. #include "gtest/gtest-spi.h"
  54.  
  55. // A user-defined data type.
  56. struct Bool {
  57.   explicit Bool(int val) : value(val != 0) {}
  58.  
  59.   bool operator>(int n) const { return value > Bool(n).value; }
  60.  
  61.   Bool operator+(const Bool& rhs) const { return Bool(value + rhs.value); }
  62.  
  63.   bool operator==(const Bool& rhs) const { return value == rhs.value; }
  64.  
  65.   bool value;
  66. };
  67.  
  68. // Enables Bool to be used in assertions.
  69. std::ostream& operator<<(std::ostream& os, const Bool& x) {
  70.   return os << (x.value ? "true" : "false");
  71. }
  72.  
  73. // Sample functions/functors for testing unary predicate assertions.
  74.  
  75. // A unary predicate function.
  76. template <typename T1>
  77. bool PredFunction1(T1 v1) {
  78.   return v1 > 0;
  79. }
  80.  
  81. // The following two functions are needed to circumvent a bug in
  82. // gcc 2.95.3, which sometimes has problem with the above template
  83. // function.
  84. bool PredFunction1Int(int v1) {
  85.   return v1 > 0;
  86. }
  87. bool PredFunction1Bool(Bool v1) {
  88.   return v1 > 0;
  89. }
  90.  
  91. // A unary predicate functor.
  92. struct PredFunctor1 {
  93.   template <typename T1>
  94.   bool operator()(const T1& v1) {
  95.     return v1 > 0;
  96.   }
  97. };
  98.  
  99. // A unary predicate-formatter function.
  100. template <typename T1>
  101. testing::AssertionResult PredFormatFunction1(const char* e1,
  102.                                              const T1& v1) {
  103.   if (PredFunction1(v1))
  104.     return testing::AssertionSuccess();
  105.  
  106.   return testing::AssertionFailure()
  107.       << e1
  108.       << " is expected to be positive, but evaluates to "
  109.       << v1 << ".";
  110. }
  111.  
  112. // A unary predicate-formatter functor.
  113. struct PredFormatFunctor1 {
  114.   template <typename T1>
  115.   testing::AssertionResult operator()(const char* e1,
  116.                                       const T1& v1) const {
  117.     return PredFormatFunction1(e1, v1);
  118.   }
  119. };
  120.  
  121. // Tests for {EXPECT|ASSERT}_PRED_FORMAT1.
  122.  
  123. class Predicate1Test : public testing::Test {
  124.  protected:
  125.   virtual void SetUp() {
  126.     expected_to_finish_ = true;
  127.     finished_ = false;
  128.     n1_ = 0;
  129.   }
  130.  
  131.   virtual void TearDown() {
  132.     // Verifies that each of the predicate's arguments was evaluated
  133.     // exactly once.
  134.     EXPECT_EQ(1, n1_) <<
  135.         "The predicate assertion didn't evaluate argument 2 "
  136.         "exactly once.";
  137.  
  138.     // Verifies that the control flow in the test function is expected.
  139.     if (expected_to_finish_ && !finished_) {
  140.       FAIL() << "The predicate assertion unexpactedly aborted the test.";
  141.     } else if (!expected_to_finish_ && finished_) {
  142.       FAIL() << "The failed predicate assertion didn't abort the test "
  143.                 "as expected.";
  144.     }
  145.   }
  146.  
  147.   // true iff the test function is expected to run to finish.
  148.   static bool expected_to_finish_;
  149.  
  150.   // true iff the test function did run to finish.
  151.   static bool finished_;
  152.  
  153.   static int n1_;
  154. };
  155.  
  156. bool Predicate1Test::expected_to_finish_;
  157. bool Predicate1Test::finished_;
  158. int Predicate1Test::n1_;
  159.  
  160. typedef Predicate1Test EXPECT_PRED_FORMAT1Test;
  161. typedef Predicate1Test ASSERT_PRED_FORMAT1Test;
  162. typedef Predicate1Test EXPECT_PRED1Test;
  163. typedef Predicate1Test ASSERT_PRED1Test;
  164.  
  165. // Tests a successful EXPECT_PRED1 where the
  166. // predicate-formatter is a function on a built-in type (int).
  167. TEST_F(EXPECT_PRED1Test, FunctionOnBuiltInTypeSuccess) {
  168.   EXPECT_PRED1(PredFunction1Int,
  169.                ++n1_);
  170.   finished_ = true;
  171. }
  172.  
  173. // Tests a successful EXPECT_PRED1 where the
  174. // predicate-formatter is a function on a user-defined type (Bool).
  175. TEST_F(EXPECT_PRED1Test, FunctionOnUserTypeSuccess) {
  176.   EXPECT_PRED1(PredFunction1Bool,
  177.                Bool(++n1_));
  178.   finished_ = true;
  179. }
  180.  
  181. // Tests a successful EXPECT_PRED1 where the
  182. // predicate-formatter is a functor on a built-in type (int).
  183. TEST_F(EXPECT_PRED1Test, FunctorOnBuiltInTypeSuccess) {
  184.   EXPECT_PRED1(PredFunctor1(),
  185.                ++n1_);
  186.   finished_ = true;
  187. }
  188.  
  189. // Tests a successful EXPECT_PRED1 where the
  190. // predicate-formatter is a functor on a user-defined type (Bool).
  191. TEST_F(EXPECT_PRED1Test, FunctorOnUserTypeSuccess) {
  192.   EXPECT_PRED1(PredFunctor1(),
  193.                Bool(++n1_));
  194.   finished_ = true;
  195. }
  196.  
  197. // Tests a failed EXPECT_PRED1 where the
  198. // predicate-formatter is a function on a built-in type (int).
  199. TEST_F(EXPECT_PRED1Test, FunctionOnBuiltInTypeFailure) {
  200.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  201.     EXPECT_PRED1(PredFunction1Int,
  202.                  n1_++);
  203.     finished_ = true;
  204.   }, "");
  205. }
  206.  
  207. // Tests a failed EXPECT_PRED1 where the
  208. // predicate-formatter is a function on a user-defined type (Bool).
  209. TEST_F(EXPECT_PRED1Test, FunctionOnUserTypeFailure) {
  210.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  211.     EXPECT_PRED1(PredFunction1Bool,
  212.                  Bool(n1_++));
  213.     finished_ = true;
  214.   }, "");
  215. }
  216.  
  217. // Tests a failed EXPECT_PRED1 where the
  218. // predicate-formatter is a functor on a built-in type (int).
  219. TEST_F(EXPECT_PRED1Test, FunctorOnBuiltInTypeFailure) {
  220.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  221.     EXPECT_PRED1(PredFunctor1(),
  222.                  n1_++);
  223.     finished_ = true;
  224.   }, "");
  225. }
  226.  
  227. // Tests a failed EXPECT_PRED1 where the
  228. // predicate-formatter is a functor on a user-defined type (Bool).
  229. TEST_F(EXPECT_PRED1Test, FunctorOnUserTypeFailure) {
  230.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  231.     EXPECT_PRED1(PredFunctor1(),
  232.                  Bool(n1_++));
  233.     finished_ = true;
  234.   }, "");
  235. }
  236.  
  237. // Tests a successful ASSERT_PRED1 where the
  238. // predicate-formatter is a function on a built-in type (int).
  239. TEST_F(ASSERT_PRED1Test, FunctionOnBuiltInTypeSuccess) {
  240.   ASSERT_PRED1(PredFunction1Int,
  241.                ++n1_);
  242.   finished_ = true;
  243. }
  244.  
  245. // Tests a successful ASSERT_PRED1 where the
  246. // predicate-formatter is a function on a user-defined type (Bool).
  247. TEST_F(ASSERT_PRED1Test, FunctionOnUserTypeSuccess) {
  248.   ASSERT_PRED1(PredFunction1Bool,
  249.                Bool(++n1_));
  250.   finished_ = true;
  251. }
  252.  
  253. // Tests a successful ASSERT_PRED1 where the
  254. // predicate-formatter is a functor on a built-in type (int).
  255. TEST_F(ASSERT_PRED1Test, FunctorOnBuiltInTypeSuccess) {
  256.   ASSERT_PRED1(PredFunctor1(),
  257.                ++n1_);
  258.   finished_ = true;
  259. }
  260.  
  261. // Tests a successful ASSERT_PRED1 where the
  262. // predicate-formatter is a functor on a user-defined type (Bool).
  263. TEST_F(ASSERT_PRED1Test, FunctorOnUserTypeSuccess) {
  264.   ASSERT_PRED1(PredFunctor1(),
  265.                Bool(++n1_));
  266.   finished_ = true;
  267. }
  268.  
  269. // Tests a failed ASSERT_PRED1 where the
  270. // predicate-formatter is a function on a built-in type (int).
  271. TEST_F(ASSERT_PRED1Test, FunctionOnBuiltInTypeFailure) {
  272.   expected_to_finish_ = false;
  273.   EXPECT_FATAL_FAILURE({  // NOLINT
  274.     ASSERT_PRED1(PredFunction1Int,
  275.                  n1_++);
  276.     finished_ = true;
  277.   }, "");
  278. }
  279.  
  280. // Tests a failed ASSERT_PRED1 where the
  281. // predicate-formatter is a function on a user-defined type (Bool).
  282. TEST_F(ASSERT_PRED1Test, FunctionOnUserTypeFailure) {
  283.   expected_to_finish_ = false;
  284.   EXPECT_FATAL_FAILURE({  // NOLINT
  285.     ASSERT_PRED1(PredFunction1Bool,
  286.                  Bool(n1_++));
  287.     finished_ = true;
  288.   }, "");
  289. }
  290.  
  291. // Tests a failed ASSERT_PRED1 where the
  292. // predicate-formatter is a functor on a built-in type (int).
  293. TEST_F(ASSERT_PRED1Test, FunctorOnBuiltInTypeFailure) {
  294.   expected_to_finish_ = false;
  295.   EXPECT_FATAL_FAILURE({  // NOLINT
  296.     ASSERT_PRED1(PredFunctor1(),
  297.                  n1_++);
  298.     finished_ = true;
  299.   }, "");
  300. }
  301.  
  302. // Tests a failed ASSERT_PRED1 where the
  303. // predicate-formatter is a functor on a user-defined type (Bool).
  304. TEST_F(ASSERT_PRED1Test, FunctorOnUserTypeFailure) {
  305.   expected_to_finish_ = false;
  306.   EXPECT_FATAL_FAILURE({  // NOLINT
  307.     ASSERT_PRED1(PredFunctor1(),
  308.                  Bool(n1_++));
  309.     finished_ = true;
  310.   }, "");
  311. }
  312.  
  313. // Tests a successful EXPECT_PRED_FORMAT1 where the
  314. // predicate-formatter is a function on a built-in type (int).
  315. TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnBuiltInTypeSuccess) {
  316.   EXPECT_PRED_FORMAT1(PredFormatFunction1,
  317.                       ++n1_);
  318.   finished_ = true;
  319. }
  320.  
  321. // Tests a successful EXPECT_PRED_FORMAT1 where the
  322. // predicate-formatter is a function on a user-defined type (Bool).
  323. TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnUserTypeSuccess) {
  324.   EXPECT_PRED_FORMAT1(PredFormatFunction1,
  325.                       Bool(++n1_));
  326.   finished_ = true;
  327. }
  328.  
  329. // Tests a successful EXPECT_PRED_FORMAT1 where the
  330. // predicate-formatter is a functor on a built-in type (int).
  331. TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnBuiltInTypeSuccess) {
  332.   EXPECT_PRED_FORMAT1(PredFormatFunctor1(),
  333.                       ++n1_);
  334.   finished_ = true;
  335. }
  336.  
  337. // Tests a successful EXPECT_PRED_FORMAT1 where the
  338. // predicate-formatter is a functor on a user-defined type (Bool).
  339. TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnUserTypeSuccess) {
  340.   EXPECT_PRED_FORMAT1(PredFormatFunctor1(),
  341.                       Bool(++n1_));
  342.   finished_ = true;
  343. }
  344.  
  345. // Tests a failed EXPECT_PRED_FORMAT1 where the
  346. // predicate-formatter is a function on a built-in type (int).
  347. TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnBuiltInTypeFailure) {
  348.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  349.     EXPECT_PRED_FORMAT1(PredFormatFunction1,
  350.                         n1_++);
  351.     finished_ = true;
  352.   }, "");
  353. }
  354.  
  355. // Tests a failed EXPECT_PRED_FORMAT1 where the
  356. // predicate-formatter is a function on a user-defined type (Bool).
  357. TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnUserTypeFailure) {
  358.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  359.     EXPECT_PRED_FORMAT1(PredFormatFunction1,
  360.                         Bool(n1_++));
  361.     finished_ = true;
  362.   }, "");
  363. }
  364.  
  365. // Tests a failed EXPECT_PRED_FORMAT1 where the
  366. // predicate-formatter is a functor on a built-in type (int).
  367. TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnBuiltInTypeFailure) {
  368.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  369.     EXPECT_PRED_FORMAT1(PredFormatFunctor1(),
  370.                         n1_++);
  371.     finished_ = true;
  372.   }, "");
  373. }
  374.  
  375. // Tests a failed EXPECT_PRED_FORMAT1 where the
  376. // predicate-formatter is a functor on a user-defined type (Bool).
  377. TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnUserTypeFailure) {
  378.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  379.     EXPECT_PRED_FORMAT1(PredFormatFunctor1(),
  380.                         Bool(n1_++));
  381.     finished_ = true;
  382.   }, "");
  383. }
  384.  
  385. // Tests a successful ASSERT_PRED_FORMAT1 where the
  386. // predicate-formatter is a function on a built-in type (int).
  387. TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnBuiltInTypeSuccess) {
  388.   ASSERT_PRED_FORMAT1(PredFormatFunction1,
  389.                       ++n1_);
  390.   finished_ = true;
  391. }
  392.  
  393. // Tests a successful ASSERT_PRED_FORMAT1 where the
  394. // predicate-formatter is a function on a user-defined type (Bool).
  395. TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnUserTypeSuccess) {
  396.   ASSERT_PRED_FORMAT1(PredFormatFunction1,
  397.                       Bool(++n1_));
  398.   finished_ = true;
  399. }
  400.  
  401. // Tests a successful ASSERT_PRED_FORMAT1 where the
  402. // predicate-formatter is a functor on a built-in type (int).
  403. TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnBuiltInTypeSuccess) {
  404.   ASSERT_PRED_FORMAT1(PredFormatFunctor1(),
  405.                       ++n1_);
  406.   finished_ = true;
  407. }
  408.  
  409. // Tests a successful ASSERT_PRED_FORMAT1 where the
  410. // predicate-formatter is a functor on a user-defined type (Bool).
  411. TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnUserTypeSuccess) {
  412.   ASSERT_PRED_FORMAT1(PredFormatFunctor1(),
  413.                       Bool(++n1_));
  414.   finished_ = true;
  415. }
  416.  
  417. // Tests a failed ASSERT_PRED_FORMAT1 where the
  418. // predicate-formatter is a function on a built-in type (int).
  419. TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnBuiltInTypeFailure) {
  420.   expected_to_finish_ = false;
  421.   EXPECT_FATAL_FAILURE({  // NOLINT
  422.     ASSERT_PRED_FORMAT1(PredFormatFunction1,
  423.                         n1_++);
  424.     finished_ = true;
  425.   }, "");
  426. }
  427.  
  428. // Tests a failed ASSERT_PRED_FORMAT1 where the
  429. // predicate-formatter is a function on a user-defined type (Bool).
  430. TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnUserTypeFailure) {
  431.   expected_to_finish_ = false;
  432.   EXPECT_FATAL_FAILURE({  // NOLINT
  433.     ASSERT_PRED_FORMAT1(PredFormatFunction1,
  434.                         Bool(n1_++));
  435.     finished_ = true;
  436.   }, "");
  437. }
  438.  
  439. // Tests a failed ASSERT_PRED_FORMAT1 where the
  440. // predicate-formatter is a functor on a built-in type (int).
  441. TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnBuiltInTypeFailure) {
  442.   expected_to_finish_ = false;
  443.   EXPECT_FATAL_FAILURE({  // NOLINT
  444.     ASSERT_PRED_FORMAT1(PredFormatFunctor1(),
  445.                         n1_++);
  446.     finished_ = true;
  447.   }, "");
  448. }
  449.  
  450. // Tests a failed ASSERT_PRED_FORMAT1 where the
  451. // predicate-formatter is a functor on a user-defined type (Bool).
  452. TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnUserTypeFailure) {
  453.   expected_to_finish_ = false;
  454.   EXPECT_FATAL_FAILURE({  // NOLINT
  455.     ASSERT_PRED_FORMAT1(PredFormatFunctor1(),
  456.                         Bool(n1_++));
  457.     finished_ = true;
  458.   }, "");
  459. }
  460. // Sample functions/functors for testing binary predicate assertions.
  461.  
  462. // A binary predicate function.
  463. template <typename T1, typename T2>
  464. bool PredFunction2(T1 v1, T2 v2) {
  465.   return v1 + v2 > 0;
  466. }
  467.  
  468. // The following two functions are needed to circumvent a bug in
  469. // gcc 2.95.3, which sometimes has problem with the above template
  470. // function.
  471. bool PredFunction2Int(int v1, int v2) {
  472.   return v1 + v2 > 0;
  473. }
  474. bool PredFunction2Bool(Bool v1, Bool v2) {
  475.   return v1 + v2 > 0;
  476. }
  477.  
  478. // A binary predicate functor.
  479. struct PredFunctor2 {
  480.   template <typename T1, typename T2>
  481.   bool operator()(const T1& v1,
  482.                   const T2& v2) {
  483.     return v1 + v2 > 0;
  484.   }
  485. };
  486.  
  487. // A binary predicate-formatter function.
  488. template <typename T1, typename T2>
  489. testing::AssertionResult PredFormatFunction2(const char* e1,
  490.                                              const char* e2,
  491.                                              const T1& v1,
  492.                                              const T2& v2) {
  493.   if (PredFunction2(v1, v2))
  494.     return testing::AssertionSuccess();
  495.  
  496.   return testing::AssertionFailure()
  497.       << e1 << " + " << e2
  498.       << " is expected to be positive, but evaluates to "
  499.       << v1 + v2 << ".";
  500. }
  501.  
  502. // A binary predicate-formatter functor.
  503. struct PredFormatFunctor2 {
  504.   template <typename T1, typename T2>
  505.   testing::AssertionResult operator()(const char* e1,
  506.                                       const char* e2,
  507.                                       const T1& v1,
  508.                                       const T2& v2) const {
  509.     return PredFormatFunction2(e1, e2, v1, v2);
  510.   }
  511. };
  512.  
  513. // Tests for {EXPECT|ASSERT}_PRED_FORMAT2.
  514.  
  515. class Predicate2Test : public testing::Test {
  516.  protected:
  517.   virtual void SetUp() {
  518.     expected_to_finish_ = true;
  519.     finished_ = false;
  520.     n1_ = n2_ = 0;
  521.   }
  522.  
  523.   virtual void TearDown() {
  524.     // Verifies that each of the predicate's arguments was evaluated
  525.     // exactly once.
  526.     EXPECT_EQ(1, n1_) <<
  527.         "The predicate assertion didn't evaluate argument 2 "
  528.         "exactly once.";
  529.     EXPECT_EQ(1, n2_) <<
  530.         "The predicate assertion didn't evaluate argument 3 "
  531.         "exactly once.";
  532.  
  533.     // Verifies that the control flow in the test function is expected.
  534.     if (expected_to_finish_ && !finished_) {
  535.       FAIL() << "The predicate assertion unexpactedly aborted the test.";
  536.     } else if (!expected_to_finish_ && finished_) {
  537.       FAIL() << "The failed predicate assertion didn't abort the test "
  538.                 "as expected.";
  539.     }
  540.   }
  541.  
  542.   // true iff the test function is expected to run to finish.
  543.   static bool expected_to_finish_;
  544.  
  545.   // true iff the test function did run to finish.
  546.   static bool finished_;
  547.  
  548.   static int n1_;
  549.   static int n2_;
  550. };
  551.  
  552. bool Predicate2Test::expected_to_finish_;
  553. bool Predicate2Test::finished_;
  554. int Predicate2Test::n1_;
  555. int Predicate2Test::n2_;
  556.  
  557. typedef Predicate2Test EXPECT_PRED_FORMAT2Test;
  558. typedef Predicate2Test ASSERT_PRED_FORMAT2Test;
  559. typedef Predicate2Test EXPECT_PRED2Test;
  560. typedef Predicate2Test ASSERT_PRED2Test;
  561.  
  562. // Tests a successful EXPECT_PRED2 where the
  563. // predicate-formatter is a function on a built-in type (int).
  564. TEST_F(EXPECT_PRED2Test, FunctionOnBuiltInTypeSuccess) {
  565.   EXPECT_PRED2(PredFunction2Int,
  566.                ++n1_,
  567.                ++n2_);
  568.   finished_ = true;
  569. }
  570.  
  571. // Tests a successful EXPECT_PRED2 where the
  572. // predicate-formatter is a function on a user-defined type (Bool).
  573. TEST_F(EXPECT_PRED2Test, FunctionOnUserTypeSuccess) {
  574.   EXPECT_PRED2(PredFunction2Bool,
  575.                Bool(++n1_),
  576.                Bool(++n2_));
  577.   finished_ = true;
  578. }
  579.  
  580. // Tests a successful EXPECT_PRED2 where the
  581. // predicate-formatter is a functor on a built-in type (int).
  582. TEST_F(EXPECT_PRED2Test, FunctorOnBuiltInTypeSuccess) {
  583.   EXPECT_PRED2(PredFunctor2(),
  584.                ++n1_,
  585.                ++n2_);
  586.   finished_ = true;
  587. }
  588.  
  589. // Tests a successful EXPECT_PRED2 where the
  590. // predicate-formatter is a functor on a user-defined type (Bool).
  591. TEST_F(EXPECT_PRED2Test, FunctorOnUserTypeSuccess) {
  592.   EXPECT_PRED2(PredFunctor2(),
  593.                Bool(++n1_),
  594.                Bool(++n2_));
  595.   finished_ = true;
  596. }
  597.  
  598. // Tests a failed EXPECT_PRED2 where the
  599. // predicate-formatter is a function on a built-in type (int).
  600. TEST_F(EXPECT_PRED2Test, FunctionOnBuiltInTypeFailure) {
  601.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  602.     EXPECT_PRED2(PredFunction2Int,
  603.                  n1_++,
  604.                  n2_++);
  605.     finished_ = true;
  606.   }, "");
  607. }
  608.  
  609. // Tests a failed EXPECT_PRED2 where the
  610. // predicate-formatter is a function on a user-defined type (Bool).
  611. TEST_F(EXPECT_PRED2Test, FunctionOnUserTypeFailure) {
  612.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  613.     EXPECT_PRED2(PredFunction2Bool,
  614.                  Bool(n1_++),
  615.                  Bool(n2_++));
  616.     finished_ = true;
  617.   }, "");
  618. }
  619.  
  620. // Tests a failed EXPECT_PRED2 where the
  621. // predicate-formatter is a functor on a built-in type (int).
  622. TEST_F(EXPECT_PRED2Test, FunctorOnBuiltInTypeFailure) {
  623.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  624.     EXPECT_PRED2(PredFunctor2(),
  625.                  n1_++,
  626.                  n2_++);
  627.     finished_ = true;
  628.   }, "");
  629. }
  630.  
  631. // Tests a failed EXPECT_PRED2 where the
  632. // predicate-formatter is a functor on a user-defined type (Bool).
  633. TEST_F(EXPECT_PRED2Test, FunctorOnUserTypeFailure) {
  634.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  635.     EXPECT_PRED2(PredFunctor2(),
  636.                  Bool(n1_++),
  637.                  Bool(n2_++));
  638.     finished_ = true;
  639.   }, "");
  640. }
  641.  
  642. // Tests a successful ASSERT_PRED2 where the
  643. // predicate-formatter is a function on a built-in type (int).
  644. TEST_F(ASSERT_PRED2Test, FunctionOnBuiltInTypeSuccess) {
  645.   ASSERT_PRED2(PredFunction2Int,
  646.                ++n1_,
  647.                ++n2_);
  648.   finished_ = true;
  649. }
  650.  
  651. // Tests a successful ASSERT_PRED2 where the
  652. // predicate-formatter is a function on a user-defined type (Bool).
  653. TEST_F(ASSERT_PRED2Test, FunctionOnUserTypeSuccess) {
  654.   ASSERT_PRED2(PredFunction2Bool,
  655.                Bool(++n1_),
  656.                Bool(++n2_));
  657.   finished_ = true;
  658. }
  659.  
  660. // Tests a successful ASSERT_PRED2 where the
  661. // predicate-formatter is a functor on a built-in type (int).
  662. TEST_F(ASSERT_PRED2Test, FunctorOnBuiltInTypeSuccess) {
  663.   ASSERT_PRED2(PredFunctor2(),
  664.                ++n1_,
  665.                ++n2_);
  666.   finished_ = true;
  667. }
  668.  
  669. // Tests a successful ASSERT_PRED2 where the
  670. // predicate-formatter is a functor on a user-defined type (Bool).
  671. TEST_F(ASSERT_PRED2Test, FunctorOnUserTypeSuccess) {
  672.   ASSERT_PRED2(PredFunctor2(),
  673.                Bool(++n1_),
  674.                Bool(++n2_));
  675.   finished_ = true;
  676. }
  677.  
  678. // Tests a failed ASSERT_PRED2 where the
  679. // predicate-formatter is a function on a built-in type (int).
  680. TEST_F(ASSERT_PRED2Test, FunctionOnBuiltInTypeFailure) {
  681.   expected_to_finish_ = false;
  682.   EXPECT_FATAL_FAILURE({  // NOLINT
  683.     ASSERT_PRED2(PredFunction2Int,
  684.                  n1_++,
  685.                  n2_++);
  686.     finished_ = true;
  687.   }, "");
  688. }
  689.  
  690. // Tests a failed ASSERT_PRED2 where the
  691. // predicate-formatter is a function on a user-defined type (Bool).
  692. TEST_F(ASSERT_PRED2Test, FunctionOnUserTypeFailure) {
  693.   expected_to_finish_ = false;
  694.   EXPECT_FATAL_FAILURE({  // NOLINT
  695.     ASSERT_PRED2(PredFunction2Bool,
  696.                  Bool(n1_++),
  697.                  Bool(n2_++));
  698.     finished_ = true;
  699.   }, "");
  700. }
  701.  
  702. // Tests a failed ASSERT_PRED2 where the
  703. // predicate-formatter is a functor on a built-in type (int).
  704. TEST_F(ASSERT_PRED2Test, FunctorOnBuiltInTypeFailure) {
  705.   expected_to_finish_ = false;
  706.   EXPECT_FATAL_FAILURE({  // NOLINT
  707.     ASSERT_PRED2(PredFunctor2(),
  708.                  n1_++,
  709.                  n2_++);
  710.     finished_ = true;
  711.   }, "");
  712. }
  713.  
  714. // Tests a failed ASSERT_PRED2 where the
  715. // predicate-formatter is a functor on a user-defined type (Bool).
  716. TEST_F(ASSERT_PRED2Test, FunctorOnUserTypeFailure) {
  717.   expected_to_finish_ = false;
  718.   EXPECT_FATAL_FAILURE({  // NOLINT
  719.     ASSERT_PRED2(PredFunctor2(),
  720.                  Bool(n1_++),
  721.                  Bool(n2_++));
  722.     finished_ = true;
  723.   }, "");
  724. }
  725.  
  726. // Tests a successful EXPECT_PRED_FORMAT2 where the
  727. // predicate-formatter is a function on a built-in type (int).
  728. TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnBuiltInTypeSuccess) {
  729.   EXPECT_PRED_FORMAT2(PredFormatFunction2,
  730.                       ++n1_,
  731.                       ++n2_);
  732.   finished_ = true;
  733. }
  734.  
  735. // Tests a successful EXPECT_PRED_FORMAT2 where the
  736. // predicate-formatter is a function on a user-defined type (Bool).
  737. TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnUserTypeSuccess) {
  738.   EXPECT_PRED_FORMAT2(PredFormatFunction2,
  739.                       Bool(++n1_),
  740.                       Bool(++n2_));
  741.   finished_ = true;
  742. }
  743.  
  744. // Tests a successful EXPECT_PRED_FORMAT2 where the
  745. // predicate-formatter is a functor on a built-in type (int).
  746. TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnBuiltInTypeSuccess) {
  747.   EXPECT_PRED_FORMAT2(PredFormatFunctor2(),
  748.                       ++n1_,
  749.                       ++n2_);
  750.   finished_ = true;
  751. }
  752.  
  753. // Tests a successful EXPECT_PRED_FORMAT2 where the
  754. // predicate-formatter is a functor on a user-defined type (Bool).
  755. TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnUserTypeSuccess) {
  756.   EXPECT_PRED_FORMAT2(PredFormatFunctor2(),
  757.                       Bool(++n1_),
  758.                       Bool(++n2_));
  759.   finished_ = true;
  760. }
  761.  
  762. // Tests a failed EXPECT_PRED_FORMAT2 where the
  763. // predicate-formatter is a function on a built-in type (int).
  764. TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnBuiltInTypeFailure) {
  765.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  766.     EXPECT_PRED_FORMAT2(PredFormatFunction2,
  767.                         n1_++,
  768.                         n2_++);
  769.     finished_ = true;
  770.   }, "");
  771. }
  772.  
  773. // Tests a failed EXPECT_PRED_FORMAT2 where the
  774. // predicate-formatter is a function on a user-defined type (Bool).
  775. TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnUserTypeFailure) {
  776.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  777.     EXPECT_PRED_FORMAT2(PredFormatFunction2,
  778.                         Bool(n1_++),
  779.                         Bool(n2_++));
  780.     finished_ = true;
  781.   }, "");
  782. }
  783.  
  784. // Tests a failed EXPECT_PRED_FORMAT2 where the
  785. // predicate-formatter is a functor on a built-in type (int).
  786. TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnBuiltInTypeFailure) {
  787.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  788.     EXPECT_PRED_FORMAT2(PredFormatFunctor2(),
  789.                         n1_++,
  790.                         n2_++);
  791.     finished_ = true;
  792.   }, "");
  793. }
  794.  
  795. // Tests a failed EXPECT_PRED_FORMAT2 where the
  796. // predicate-formatter is a functor on a user-defined type (Bool).
  797. TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnUserTypeFailure) {
  798.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  799.     EXPECT_PRED_FORMAT2(PredFormatFunctor2(),
  800.                         Bool(n1_++),
  801.                         Bool(n2_++));
  802.     finished_ = true;
  803.   }, "");
  804. }
  805.  
  806. // Tests a successful ASSERT_PRED_FORMAT2 where the
  807. // predicate-formatter is a function on a built-in type (int).
  808. TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnBuiltInTypeSuccess) {
  809.   ASSERT_PRED_FORMAT2(PredFormatFunction2,
  810.                       ++n1_,
  811.                       ++n2_);
  812.   finished_ = true;
  813. }
  814.  
  815. // Tests a successful ASSERT_PRED_FORMAT2 where the
  816. // predicate-formatter is a function on a user-defined type (Bool).
  817. TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnUserTypeSuccess) {
  818.   ASSERT_PRED_FORMAT2(PredFormatFunction2,
  819.                       Bool(++n1_),
  820.                       Bool(++n2_));
  821.   finished_ = true;
  822. }
  823.  
  824. // Tests a successful ASSERT_PRED_FORMAT2 where the
  825. // predicate-formatter is a functor on a built-in type (int).
  826. TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnBuiltInTypeSuccess) {
  827.   ASSERT_PRED_FORMAT2(PredFormatFunctor2(),
  828.                       ++n1_,
  829.                       ++n2_);
  830.   finished_ = true;
  831. }
  832.  
  833. // Tests a successful ASSERT_PRED_FORMAT2 where the
  834. // predicate-formatter is a functor on a user-defined type (Bool).
  835. TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnUserTypeSuccess) {
  836.   ASSERT_PRED_FORMAT2(PredFormatFunctor2(),
  837.                       Bool(++n1_),
  838.                       Bool(++n2_));
  839.   finished_ = true;
  840. }
  841.  
  842. // Tests a failed ASSERT_PRED_FORMAT2 where the
  843. // predicate-formatter is a function on a built-in type (int).
  844. TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnBuiltInTypeFailure) {
  845.   expected_to_finish_ = false;
  846.   EXPECT_FATAL_FAILURE({  // NOLINT
  847.     ASSERT_PRED_FORMAT2(PredFormatFunction2,
  848.                         n1_++,
  849.                         n2_++);
  850.     finished_ = true;
  851.   }, "");
  852. }
  853.  
  854. // Tests a failed ASSERT_PRED_FORMAT2 where the
  855. // predicate-formatter is a function on a user-defined type (Bool).
  856. TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnUserTypeFailure) {
  857.   expected_to_finish_ = false;
  858.   EXPECT_FATAL_FAILURE({  // NOLINT
  859.     ASSERT_PRED_FORMAT2(PredFormatFunction2,
  860.                         Bool(n1_++),
  861.                         Bool(n2_++));
  862.     finished_ = true;
  863.   }, "");
  864. }
  865.  
  866. // Tests a failed ASSERT_PRED_FORMAT2 where the
  867. // predicate-formatter is a functor on a built-in type (int).
  868. TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnBuiltInTypeFailure) {
  869.   expected_to_finish_ = false;
  870.   EXPECT_FATAL_FAILURE({  // NOLINT
  871.     ASSERT_PRED_FORMAT2(PredFormatFunctor2(),
  872.                         n1_++,
  873.                         n2_++);
  874.     finished_ = true;
  875.   }, "");
  876. }
  877.  
  878. // Tests a failed ASSERT_PRED_FORMAT2 where the
  879. // predicate-formatter is a functor on a user-defined type (Bool).
  880. TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnUserTypeFailure) {
  881.   expected_to_finish_ = false;
  882.   EXPECT_FATAL_FAILURE({  // NOLINT
  883.     ASSERT_PRED_FORMAT2(PredFormatFunctor2(),
  884.                         Bool(n1_++),
  885.                         Bool(n2_++));
  886.     finished_ = true;
  887.   }, "");
  888. }
  889. // Sample functions/functors for testing ternary predicate assertions.
  890.  
  891. // A ternary predicate function.
  892. template <typename T1, typename T2, typename T3>
  893. bool PredFunction3(T1 v1, T2 v2, T3 v3) {
  894.   return v1 + v2 + v3 > 0;
  895. }
  896.  
  897. // The following two functions are needed to circumvent a bug in
  898. // gcc 2.95.3, which sometimes has problem with the above template
  899. // function.
  900. bool PredFunction3Int(int v1, int v2, int v3) {
  901.   return v1 + v2 + v3 > 0;
  902. }
  903. bool PredFunction3Bool(Bool v1, Bool v2, Bool v3) {
  904.   return v1 + v2 + v3 > 0;
  905. }
  906.  
  907. // A ternary predicate functor.
  908. struct PredFunctor3 {
  909.   template <typename T1, typename T2, typename T3>
  910.   bool operator()(const T1& v1,
  911.                   const T2& v2,
  912.                   const T3& v3) {
  913.     return v1 + v2 + v3 > 0;
  914.   }
  915. };
  916.  
  917. // A ternary predicate-formatter function.
  918. template <typename T1, typename T2, typename T3>
  919. testing::AssertionResult PredFormatFunction3(const char* e1,
  920.                                              const char* e2,
  921.                                              const char* e3,
  922.                                              const T1& v1,
  923.                                              const T2& v2,
  924.                                              const T3& v3) {
  925.   if (PredFunction3(v1, v2, v3))
  926.     return testing::AssertionSuccess();
  927.  
  928.   return testing::AssertionFailure()
  929.       << e1 << " + " << e2 << " + " << e3
  930.       << " is expected to be positive, but evaluates to "
  931.       << v1 + v2 + v3 << ".";
  932. }
  933.  
  934. // A ternary predicate-formatter functor.
  935. struct PredFormatFunctor3 {
  936.   template <typename T1, typename T2, typename T3>
  937.   testing::AssertionResult operator()(const char* e1,
  938.                                       const char* e2,
  939.                                       const char* e3,
  940.                                       const T1& v1,
  941.                                       const T2& v2,
  942.                                       const T3& v3) const {
  943.     return PredFormatFunction3(e1, e2, e3, v1, v2, v3);
  944.   }
  945. };
  946.  
  947. // Tests for {EXPECT|ASSERT}_PRED_FORMAT3.
  948.  
  949. class Predicate3Test : public testing::Test {
  950.  protected:
  951.   virtual void SetUp() {
  952.     expected_to_finish_ = true;
  953.     finished_ = false;
  954.     n1_ = n2_ = n3_ = 0;
  955.   }
  956.  
  957.   virtual void TearDown() {
  958.     // Verifies that each of the predicate's arguments was evaluated
  959.     // exactly once.
  960.     EXPECT_EQ(1, n1_) <<
  961.         "The predicate assertion didn't evaluate argument 2 "
  962.         "exactly once.";
  963.     EXPECT_EQ(1, n2_) <<
  964.         "The predicate assertion didn't evaluate argument 3 "
  965.         "exactly once.";
  966.     EXPECT_EQ(1, n3_) <<
  967.         "The predicate assertion didn't evaluate argument 4 "
  968.         "exactly once.";
  969.  
  970.     // Verifies that the control flow in the test function is expected.
  971.     if (expected_to_finish_ && !finished_) {
  972.       FAIL() << "The predicate assertion unexpactedly aborted the test.";
  973.     } else if (!expected_to_finish_ && finished_) {
  974.       FAIL() << "The failed predicate assertion didn't abort the test "
  975.                 "as expected.";
  976.     }
  977.   }
  978.  
  979.   // true iff the test function is expected to run to finish.
  980.   static bool expected_to_finish_;
  981.  
  982.   // true iff the test function did run to finish.
  983.   static bool finished_;
  984.  
  985.   static int n1_;
  986.   static int n2_;
  987.   static int n3_;
  988. };
  989.  
  990. bool Predicate3Test::expected_to_finish_;
  991. bool Predicate3Test::finished_;
  992. int Predicate3Test::n1_;
  993. int Predicate3Test::n2_;
  994. int Predicate3Test::n3_;
  995.  
  996. typedef Predicate3Test EXPECT_PRED_FORMAT3Test;
  997. typedef Predicate3Test ASSERT_PRED_FORMAT3Test;
  998. typedef Predicate3Test EXPECT_PRED3Test;
  999. typedef Predicate3Test ASSERT_PRED3Test;
  1000.  
  1001. // Tests a successful EXPECT_PRED3 where the
  1002. // predicate-formatter is a function on a built-in type (int).
  1003. TEST_F(EXPECT_PRED3Test, FunctionOnBuiltInTypeSuccess) {
  1004.   EXPECT_PRED3(PredFunction3Int,
  1005.                ++n1_,
  1006.                ++n2_,
  1007.                ++n3_);
  1008.   finished_ = true;
  1009. }
  1010.  
  1011. // Tests a successful EXPECT_PRED3 where the
  1012. // predicate-formatter is a function on a user-defined type (Bool).
  1013. TEST_F(EXPECT_PRED3Test, FunctionOnUserTypeSuccess) {
  1014.   EXPECT_PRED3(PredFunction3Bool,
  1015.                Bool(++n1_),
  1016.                Bool(++n2_),
  1017.                Bool(++n3_));
  1018.   finished_ = true;
  1019. }
  1020.  
  1021. // Tests a successful EXPECT_PRED3 where the
  1022. // predicate-formatter is a functor on a built-in type (int).
  1023. TEST_F(EXPECT_PRED3Test, FunctorOnBuiltInTypeSuccess) {
  1024.   EXPECT_PRED3(PredFunctor3(),
  1025.                ++n1_,
  1026.                ++n2_,
  1027.                ++n3_);
  1028.   finished_ = true;
  1029. }
  1030.  
  1031. // Tests a successful EXPECT_PRED3 where the
  1032. // predicate-formatter is a functor on a user-defined type (Bool).
  1033. TEST_F(EXPECT_PRED3Test, FunctorOnUserTypeSuccess) {
  1034.   EXPECT_PRED3(PredFunctor3(),
  1035.                Bool(++n1_),
  1036.                Bool(++n2_),
  1037.                Bool(++n3_));
  1038.   finished_ = true;
  1039. }
  1040.  
  1041. // Tests a failed EXPECT_PRED3 where the
  1042. // predicate-formatter is a function on a built-in type (int).
  1043. TEST_F(EXPECT_PRED3Test, FunctionOnBuiltInTypeFailure) {
  1044.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1045.     EXPECT_PRED3(PredFunction3Int,
  1046.                  n1_++,
  1047.                  n2_++,
  1048.                  n3_++);
  1049.     finished_ = true;
  1050.   }, "");
  1051. }
  1052.  
  1053. // Tests a failed EXPECT_PRED3 where the
  1054. // predicate-formatter is a function on a user-defined type (Bool).
  1055. TEST_F(EXPECT_PRED3Test, FunctionOnUserTypeFailure) {
  1056.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1057.     EXPECT_PRED3(PredFunction3Bool,
  1058.                  Bool(n1_++),
  1059.                  Bool(n2_++),
  1060.                  Bool(n3_++));
  1061.     finished_ = true;
  1062.   }, "");
  1063. }
  1064.  
  1065. // Tests a failed EXPECT_PRED3 where the
  1066. // predicate-formatter is a functor on a built-in type (int).
  1067. TEST_F(EXPECT_PRED3Test, FunctorOnBuiltInTypeFailure) {
  1068.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1069.     EXPECT_PRED3(PredFunctor3(),
  1070.                  n1_++,
  1071.                  n2_++,
  1072.                  n3_++);
  1073.     finished_ = true;
  1074.   }, "");
  1075. }
  1076.  
  1077. // Tests a failed EXPECT_PRED3 where the
  1078. // predicate-formatter is a functor on a user-defined type (Bool).
  1079. TEST_F(EXPECT_PRED3Test, FunctorOnUserTypeFailure) {
  1080.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1081.     EXPECT_PRED3(PredFunctor3(),
  1082.                  Bool(n1_++),
  1083.                  Bool(n2_++),
  1084.                  Bool(n3_++));
  1085.     finished_ = true;
  1086.   }, "");
  1087. }
  1088.  
  1089. // Tests a successful ASSERT_PRED3 where the
  1090. // predicate-formatter is a function on a built-in type (int).
  1091. TEST_F(ASSERT_PRED3Test, FunctionOnBuiltInTypeSuccess) {
  1092.   ASSERT_PRED3(PredFunction3Int,
  1093.                ++n1_,
  1094.                ++n2_,
  1095.                ++n3_);
  1096.   finished_ = true;
  1097. }
  1098.  
  1099. // Tests a successful ASSERT_PRED3 where the
  1100. // predicate-formatter is a function on a user-defined type (Bool).
  1101. TEST_F(ASSERT_PRED3Test, FunctionOnUserTypeSuccess) {
  1102.   ASSERT_PRED3(PredFunction3Bool,
  1103.                Bool(++n1_),
  1104.                Bool(++n2_),
  1105.                Bool(++n3_));
  1106.   finished_ = true;
  1107. }
  1108.  
  1109. // Tests a successful ASSERT_PRED3 where the
  1110. // predicate-formatter is a functor on a built-in type (int).
  1111. TEST_F(ASSERT_PRED3Test, FunctorOnBuiltInTypeSuccess) {
  1112.   ASSERT_PRED3(PredFunctor3(),
  1113.                ++n1_,
  1114.                ++n2_,
  1115.                ++n3_);
  1116.   finished_ = true;
  1117. }
  1118.  
  1119. // Tests a successful ASSERT_PRED3 where the
  1120. // predicate-formatter is a functor on a user-defined type (Bool).
  1121. TEST_F(ASSERT_PRED3Test, FunctorOnUserTypeSuccess) {
  1122.   ASSERT_PRED3(PredFunctor3(),
  1123.                Bool(++n1_),
  1124.                Bool(++n2_),
  1125.                Bool(++n3_));
  1126.   finished_ = true;
  1127. }
  1128.  
  1129. // Tests a failed ASSERT_PRED3 where the
  1130. // predicate-formatter is a function on a built-in type (int).
  1131. TEST_F(ASSERT_PRED3Test, FunctionOnBuiltInTypeFailure) {
  1132.   expected_to_finish_ = false;
  1133.   EXPECT_FATAL_FAILURE({  // NOLINT
  1134.     ASSERT_PRED3(PredFunction3Int,
  1135.                  n1_++,
  1136.                  n2_++,
  1137.                  n3_++);
  1138.     finished_ = true;
  1139.   }, "");
  1140. }
  1141.  
  1142. // Tests a failed ASSERT_PRED3 where the
  1143. // predicate-formatter is a function on a user-defined type (Bool).
  1144. TEST_F(ASSERT_PRED3Test, FunctionOnUserTypeFailure) {
  1145.   expected_to_finish_ = false;
  1146.   EXPECT_FATAL_FAILURE({  // NOLINT
  1147.     ASSERT_PRED3(PredFunction3Bool,
  1148.                  Bool(n1_++),
  1149.                  Bool(n2_++),
  1150.                  Bool(n3_++));
  1151.     finished_ = true;
  1152.   }, "");
  1153. }
  1154.  
  1155. // Tests a failed ASSERT_PRED3 where the
  1156. // predicate-formatter is a functor on a built-in type (int).
  1157. TEST_F(ASSERT_PRED3Test, FunctorOnBuiltInTypeFailure) {
  1158.   expected_to_finish_ = false;
  1159.   EXPECT_FATAL_FAILURE({  // NOLINT
  1160.     ASSERT_PRED3(PredFunctor3(),
  1161.                  n1_++,
  1162.                  n2_++,
  1163.                  n3_++);
  1164.     finished_ = true;
  1165.   }, "");
  1166. }
  1167.  
  1168. // Tests a failed ASSERT_PRED3 where the
  1169. // predicate-formatter is a functor on a user-defined type (Bool).
  1170. TEST_F(ASSERT_PRED3Test, FunctorOnUserTypeFailure) {
  1171.   expected_to_finish_ = false;
  1172.   EXPECT_FATAL_FAILURE({  // NOLINT
  1173.     ASSERT_PRED3(PredFunctor3(),
  1174.                  Bool(n1_++),
  1175.                  Bool(n2_++),
  1176.                  Bool(n3_++));
  1177.     finished_ = true;
  1178.   }, "");
  1179. }
  1180.  
  1181. // Tests a successful EXPECT_PRED_FORMAT3 where the
  1182. // predicate-formatter is a function on a built-in type (int).
  1183. TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnBuiltInTypeSuccess) {
  1184.   EXPECT_PRED_FORMAT3(PredFormatFunction3,
  1185.                       ++n1_,
  1186.                       ++n2_,
  1187.                       ++n3_);
  1188.   finished_ = true;
  1189. }
  1190.  
  1191. // Tests a successful EXPECT_PRED_FORMAT3 where the
  1192. // predicate-formatter is a function on a user-defined type (Bool).
  1193. TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnUserTypeSuccess) {
  1194.   EXPECT_PRED_FORMAT3(PredFormatFunction3,
  1195.                       Bool(++n1_),
  1196.                       Bool(++n2_),
  1197.                       Bool(++n3_));
  1198.   finished_ = true;
  1199. }
  1200.  
  1201. // Tests a successful EXPECT_PRED_FORMAT3 where the
  1202. // predicate-formatter is a functor on a built-in type (int).
  1203. TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnBuiltInTypeSuccess) {
  1204.   EXPECT_PRED_FORMAT3(PredFormatFunctor3(),
  1205.                       ++n1_,
  1206.                       ++n2_,
  1207.                       ++n3_);
  1208.   finished_ = true;
  1209. }
  1210.  
  1211. // Tests a successful EXPECT_PRED_FORMAT3 where the
  1212. // predicate-formatter is a functor on a user-defined type (Bool).
  1213. TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnUserTypeSuccess) {
  1214.   EXPECT_PRED_FORMAT3(PredFormatFunctor3(),
  1215.                       Bool(++n1_),
  1216.                       Bool(++n2_),
  1217.                       Bool(++n3_));
  1218.   finished_ = true;
  1219. }
  1220.  
  1221. // Tests a failed EXPECT_PRED_FORMAT3 where the
  1222. // predicate-formatter is a function on a built-in type (int).
  1223. TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnBuiltInTypeFailure) {
  1224.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1225.     EXPECT_PRED_FORMAT3(PredFormatFunction3,
  1226.                         n1_++,
  1227.                         n2_++,
  1228.                         n3_++);
  1229.     finished_ = true;
  1230.   }, "");
  1231. }
  1232.  
  1233. // Tests a failed EXPECT_PRED_FORMAT3 where the
  1234. // predicate-formatter is a function on a user-defined type (Bool).
  1235. TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnUserTypeFailure) {
  1236.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1237.     EXPECT_PRED_FORMAT3(PredFormatFunction3,
  1238.                         Bool(n1_++),
  1239.                         Bool(n2_++),
  1240.                         Bool(n3_++));
  1241.     finished_ = true;
  1242.   }, "");
  1243. }
  1244.  
  1245. // Tests a failed EXPECT_PRED_FORMAT3 where the
  1246. // predicate-formatter is a functor on a built-in type (int).
  1247. TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnBuiltInTypeFailure) {
  1248.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1249.     EXPECT_PRED_FORMAT3(PredFormatFunctor3(),
  1250.                         n1_++,
  1251.                         n2_++,
  1252.                         n3_++);
  1253.     finished_ = true;
  1254.   }, "");
  1255. }
  1256.  
  1257. // Tests a failed EXPECT_PRED_FORMAT3 where the
  1258. // predicate-formatter is a functor on a user-defined type (Bool).
  1259. TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnUserTypeFailure) {
  1260.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1261.     EXPECT_PRED_FORMAT3(PredFormatFunctor3(),
  1262.                         Bool(n1_++),
  1263.                         Bool(n2_++),
  1264.                         Bool(n3_++));
  1265.     finished_ = true;
  1266.   }, "");
  1267. }
  1268.  
  1269. // Tests a successful ASSERT_PRED_FORMAT3 where the
  1270. // predicate-formatter is a function on a built-in type (int).
  1271. TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnBuiltInTypeSuccess) {
  1272.   ASSERT_PRED_FORMAT3(PredFormatFunction3,
  1273.                       ++n1_,
  1274.                       ++n2_,
  1275.                       ++n3_);
  1276.   finished_ = true;
  1277. }
  1278.  
  1279. // Tests a successful ASSERT_PRED_FORMAT3 where the
  1280. // predicate-formatter is a function on a user-defined type (Bool).
  1281. TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnUserTypeSuccess) {
  1282.   ASSERT_PRED_FORMAT3(PredFormatFunction3,
  1283.                       Bool(++n1_),
  1284.                       Bool(++n2_),
  1285.                       Bool(++n3_));
  1286.   finished_ = true;
  1287. }
  1288.  
  1289. // Tests a successful ASSERT_PRED_FORMAT3 where the
  1290. // predicate-formatter is a functor on a built-in type (int).
  1291. TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnBuiltInTypeSuccess) {
  1292.   ASSERT_PRED_FORMAT3(PredFormatFunctor3(),
  1293.                       ++n1_,
  1294.                       ++n2_,
  1295.                       ++n3_);
  1296.   finished_ = true;
  1297. }
  1298.  
  1299. // Tests a successful ASSERT_PRED_FORMAT3 where the
  1300. // predicate-formatter is a functor on a user-defined type (Bool).
  1301. TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnUserTypeSuccess) {
  1302.   ASSERT_PRED_FORMAT3(PredFormatFunctor3(),
  1303.                       Bool(++n1_),
  1304.                       Bool(++n2_),
  1305.                       Bool(++n3_));
  1306.   finished_ = true;
  1307. }
  1308.  
  1309. // Tests a failed ASSERT_PRED_FORMAT3 where the
  1310. // predicate-formatter is a function on a built-in type (int).
  1311. TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnBuiltInTypeFailure) {
  1312.   expected_to_finish_ = false;
  1313.   EXPECT_FATAL_FAILURE({  // NOLINT
  1314.     ASSERT_PRED_FORMAT3(PredFormatFunction3,
  1315.                         n1_++,
  1316.                         n2_++,
  1317.                         n3_++);
  1318.     finished_ = true;
  1319.   }, "");
  1320. }
  1321.  
  1322. // Tests a failed ASSERT_PRED_FORMAT3 where the
  1323. // predicate-formatter is a function on a user-defined type (Bool).
  1324. TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnUserTypeFailure) {
  1325.   expected_to_finish_ = false;
  1326.   EXPECT_FATAL_FAILURE({  // NOLINT
  1327.     ASSERT_PRED_FORMAT3(PredFormatFunction3,
  1328.                         Bool(n1_++),
  1329.                         Bool(n2_++),
  1330.                         Bool(n3_++));
  1331.     finished_ = true;
  1332.   }, "");
  1333. }
  1334.  
  1335. // Tests a failed ASSERT_PRED_FORMAT3 where the
  1336. // predicate-formatter is a functor on a built-in type (int).
  1337. TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnBuiltInTypeFailure) {
  1338.   expected_to_finish_ = false;
  1339.   EXPECT_FATAL_FAILURE({  // NOLINT
  1340.     ASSERT_PRED_FORMAT3(PredFormatFunctor3(),
  1341.                         n1_++,
  1342.                         n2_++,
  1343.                         n3_++);
  1344.     finished_ = true;
  1345.   }, "");
  1346. }
  1347.  
  1348. // Tests a failed ASSERT_PRED_FORMAT3 where the
  1349. // predicate-formatter is a functor on a user-defined type (Bool).
  1350. TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnUserTypeFailure) {
  1351.   expected_to_finish_ = false;
  1352.   EXPECT_FATAL_FAILURE({  // NOLINT
  1353.     ASSERT_PRED_FORMAT3(PredFormatFunctor3(),
  1354.                         Bool(n1_++),
  1355.                         Bool(n2_++),
  1356.                         Bool(n3_++));
  1357.     finished_ = true;
  1358.   }, "");
  1359. }
  1360. // Sample functions/functors for testing 4-ary predicate assertions.
  1361.  
  1362. // A 4-ary predicate function.
  1363. template <typename T1, typename T2, typename T3, typename T4>
  1364. bool PredFunction4(T1 v1, T2 v2, T3 v3, T4 v4) {
  1365.   return v1 + v2 + v3 + v4 > 0;
  1366. }
  1367.  
  1368. // The following two functions are needed to circumvent a bug in
  1369. // gcc 2.95.3, which sometimes has problem with the above template
  1370. // function.
  1371. bool PredFunction4Int(int v1, int v2, int v3, int v4) {
  1372.   return v1 + v2 + v3 + v4 > 0;
  1373. }
  1374. bool PredFunction4Bool(Bool v1, Bool v2, Bool v3, Bool v4) {
  1375.   return v1 + v2 + v3 + v4 > 0;
  1376. }
  1377.  
  1378. // A 4-ary predicate functor.
  1379. struct PredFunctor4 {
  1380.   template <typename T1, typename T2, typename T3, typename T4>
  1381.   bool operator()(const T1& v1,
  1382.                   const T2& v2,
  1383.                   const T3& v3,
  1384.                   const T4& v4) {
  1385.     return v1 + v2 + v3 + v4 > 0;
  1386.   }
  1387. };
  1388.  
  1389. // A 4-ary predicate-formatter function.
  1390. template <typename T1, typename T2, typename T3, typename T4>
  1391. testing::AssertionResult PredFormatFunction4(const char* e1,
  1392.                                              const char* e2,
  1393.                                              const char* e3,
  1394.                                              const char* e4,
  1395.                                              const T1& v1,
  1396.                                              const T2& v2,
  1397.                                              const T3& v3,
  1398.                                              const T4& v4) {
  1399.   if (PredFunction4(v1, v2, v3, v4))
  1400.     return testing::AssertionSuccess();
  1401.  
  1402.   return testing::AssertionFailure()
  1403.       << e1 << " + " << e2 << " + " << e3 << " + " << e4
  1404.       << " is expected to be positive, but evaluates to "
  1405.       << v1 + v2 + v3 + v4 << ".";
  1406. }
  1407.  
  1408. // A 4-ary predicate-formatter functor.
  1409. struct PredFormatFunctor4 {
  1410.   template <typename T1, typename T2, typename T3, typename T4>
  1411.   testing::AssertionResult operator()(const char* e1,
  1412.                                       const char* e2,
  1413.                                       const char* e3,
  1414.                                       const char* e4,
  1415.                                       const T1& v1,
  1416.                                       const T2& v2,
  1417.                                       const T3& v3,
  1418.                                       const T4& v4) const {
  1419.     return PredFormatFunction4(e1, e2, e3, e4, v1, v2, v3, v4);
  1420.   }
  1421. };
  1422.  
  1423. // Tests for {EXPECT|ASSERT}_PRED_FORMAT4.
  1424.  
  1425. class Predicate4Test : public testing::Test {
  1426.  protected:
  1427.   virtual void SetUp() {
  1428.     expected_to_finish_ = true;
  1429.     finished_ = false;
  1430.     n1_ = n2_ = n3_ = n4_ = 0;
  1431.   }
  1432.  
  1433.   virtual void TearDown() {
  1434.     // Verifies that each of the predicate's arguments was evaluated
  1435.     // exactly once.
  1436.     EXPECT_EQ(1, n1_) <<
  1437.         "The predicate assertion didn't evaluate argument 2 "
  1438.         "exactly once.";
  1439.     EXPECT_EQ(1, n2_) <<
  1440.         "The predicate assertion didn't evaluate argument 3 "
  1441.         "exactly once.";
  1442.     EXPECT_EQ(1, n3_) <<
  1443.         "The predicate assertion didn't evaluate argument 4 "
  1444.         "exactly once.";
  1445.     EXPECT_EQ(1, n4_) <<
  1446.         "The predicate assertion didn't evaluate argument 5 "
  1447.         "exactly once.";
  1448.  
  1449.     // Verifies that the control flow in the test function is expected.
  1450.     if (expected_to_finish_ && !finished_) {
  1451.       FAIL() << "The predicate assertion unexpactedly aborted the test.";
  1452.     } else if (!expected_to_finish_ && finished_) {
  1453.       FAIL() << "The failed predicate assertion didn't abort the test "
  1454.                 "as expected.";
  1455.     }
  1456.   }
  1457.  
  1458.   // true iff the test function is expected to run to finish.
  1459.   static bool expected_to_finish_;
  1460.  
  1461.   // true iff the test function did run to finish.
  1462.   static bool finished_;
  1463.  
  1464.   static int n1_;
  1465.   static int n2_;
  1466.   static int n3_;
  1467.   static int n4_;
  1468. };
  1469.  
  1470. bool Predicate4Test::expected_to_finish_;
  1471. bool Predicate4Test::finished_;
  1472. int Predicate4Test::n1_;
  1473. int Predicate4Test::n2_;
  1474. int Predicate4Test::n3_;
  1475. int Predicate4Test::n4_;
  1476.  
  1477. typedef Predicate4Test EXPECT_PRED_FORMAT4Test;
  1478. typedef Predicate4Test ASSERT_PRED_FORMAT4Test;
  1479. typedef Predicate4Test EXPECT_PRED4Test;
  1480. typedef Predicate4Test ASSERT_PRED4Test;
  1481.  
  1482. // Tests a successful EXPECT_PRED4 where the
  1483. // predicate-formatter is a function on a built-in type (int).
  1484. TEST_F(EXPECT_PRED4Test, FunctionOnBuiltInTypeSuccess) {
  1485.   EXPECT_PRED4(PredFunction4Int,
  1486.                ++n1_,
  1487.                ++n2_,
  1488.                ++n3_,
  1489.                ++n4_);
  1490.   finished_ = true;
  1491. }
  1492.  
  1493. // Tests a successful EXPECT_PRED4 where the
  1494. // predicate-formatter is a function on a user-defined type (Bool).
  1495. TEST_F(EXPECT_PRED4Test, FunctionOnUserTypeSuccess) {
  1496.   EXPECT_PRED4(PredFunction4Bool,
  1497.                Bool(++n1_),
  1498.                Bool(++n2_),
  1499.                Bool(++n3_),
  1500.                Bool(++n4_));
  1501.   finished_ = true;
  1502. }
  1503.  
  1504. // Tests a successful EXPECT_PRED4 where the
  1505. // predicate-formatter is a functor on a built-in type (int).
  1506. TEST_F(EXPECT_PRED4Test, FunctorOnBuiltInTypeSuccess) {
  1507.   EXPECT_PRED4(PredFunctor4(),
  1508.                ++n1_,
  1509.                ++n2_,
  1510.                ++n3_,
  1511.                ++n4_);
  1512.   finished_ = true;
  1513. }
  1514.  
  1515. // Tests a successful EXPECT_PRED4 where the
  1516. // predicate-formatter is a functor on a user-defined type (Bool).
  1517. TEST_F(EXPECT_PRED4Test, FunctorOnUserTypeSuccess) {
  1518.   EXPECT_PRED4(PredFunctor4(),
  1519.                Bool(++n1_),
  1520.                Bool(++n2_),
  1521.                Bool(++n3_),
  1522.                Bool(++n4_));
  1523.   finished_ = true;
  1524. }
  1525.  
  1526. // Tests a failed EXPECT_PRED4 where the
  1527. // predicate-formatter is a function on a built-in type (int).
  1528. TEST_F(EXPECT_PRED4Test, FunctionOnBuiltInTypeFailure) {
  1529.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1530.     EXPECT_PRED4(PredFunction4Int,
  1531.                  n1_++,
  1532.                  n2_++,
  1533.                  n3_++,
  1534.                  n4_++);
  1535.     finished_ = true;
  1536.   }, "");
  1537. }
  1538.  
  1539. // Tests a failed EXPECT_PRED4 where the
  1540. // predicate-formatter is a function on a user-defined type (Bool).
  1541. TEST_F(EXPECT_PRED4Test, FunctionOnUserTypeFailure) {
  1542.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1543.     EXPECT_PRED4(PredFunction4Bool,
  1544.                  Bool(n1_++),
  1545.                  Bool(n2_++),
  1546.                  Bool(n3_++),
  1547.                  Bool(n4_++));
  1548.     finished_ = true;
  1549.   }, "");
  1550. }
  1551.  
  1552. // Tests a failed EXPECT_PRED4 where the
  1553. // predicate-formatter is a functor on a built-in type (int).
  1554. TEST_F(EXPECT_PRED4Test, FunctorOnBuiltInTypeFailure) {
  1555.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1556.     EXPECT_PRED4(PredFunctor4(),
  1557.                  n1_++,
  1558.                  n2_++,
  1559.                  n3_++,
  1560.                  n4_++);
  1561.     finished_ = true;
  1562.   }, "");
  1563. }
  1564.  
  1565. // Tests a failed EXPECT_PRED4 where the
  1566. // predicate-formatter is a functor on a user-defined type (Bool).
  1567. TEST_F(EXPECT_PRED4Test, FunctorOnUserTypeFailure) {
  1568.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1569.     EXPECT_PRED4(PredFunctor4(),
  1570.                  Bool(n1_++),
  1571.                  Bool(n2_++),
  1572.                  Bool(n3_++),
  1573.                  Bool(n4_++));
  1574.     finished_ = true;
  1575.   }, "");
  1576. }
  1577.  
  1578. // Tests a successful ASSERT_PRED4 where the
  1579. // predicate-formatter is a function on a built-in type (int).
  1580. TEST_F(ASSERT_PRED4Test, FunctionOnBuiltInTypeSuccess) {
  1581.   ASSERT_PRED4(PredFunction4Int,
  1582.                ++n1_,
  1583.                ++n2_,
  1584.                ++n3_,
  1585.                ++n4_);
  1586.   finished_ = true;
  1587. }
  1588.  
  1589. // Tests a successful ASSERT_PRED4 where the
  1590. // predicate-formatter is a function on a user-defined type (Bool).
  1591. TEST_F(ASSERT_PRED4Test, FunctionOnUserTypeSuccess) {
  1592.   ASSERT_PRED4(PredFunction4Bool,
  1593.                Bool(++n1_),
  1594.                Bool(++n2_),
  1595.                Bool(++n3_),
  1596.                Bool(++n4_));
  1597.   finished_ = true;
  1598. }
  1599.  
  1600. // Tests a successful ASSERT_PRED4 where the
  1601. // predicate-formatter is a functor on a built-in type (int).
  1602. TEST_F(ASSERT_PRED4Test, FunctorOnBuiltInTypeSuccess) {
  1603.   ASSERT_PRED4(PredFunctor4(),
  1604.                ++n1_,
  1605.                ++n2_,
  1606.                ++n3_,
  1607.                ++n4_);
  1608.   finished_ = true;
  1609. }
  1610.  
  1611. // Tests a successful ASSERT_PRED4 where the
  1612. // predicate-formatter is a functor on a user-defined type (Bool).
  1613. TEST_F(ASSERT_PRED4Test, FunctorOnUserTypeSuccess) {
  1614.   ASSERT_PRED4(PredFunctor4(),
  1615.                Bool(++n1_),
  1616.                Bool(++n2_),
  1617.                Bool(++n3_),
  1618.                Bool(++n4_));
  1619.   finished_ = true;
  1620. }
  1621.  
  1622. // Tests a failed ASSERT_PRED4 where the
  1623. // predicate-formatter is a function on a built-in type (int).
  1624. TEST_F(ASSERT_PRED4Test, FunctionOnBuiltInTypeFailure) {
  1625.   expected_to_finish_ = false;
  1626.   EXPECT_FATAL_FAILURE({  // NOLINT
  1627.     ASSERT_PRED4(PredFunction4Int,
  1628.                  n1_++,
  1629.                  n2_++,
  1630.                  n3_++,
  1631.                  n4_++);
  1632.     finished_ = true;
  1633.   }, "");
  1634. }
  1635.  
  1636. // Tests a failed ASSERT_PRED4 where the
  1637. // predicate-formatter is a function on a user-defined type (Bool).
  1638. TEST_F(ASSERT_PRED4Test, FunctionOnUserTypeFailure) {
  1639.   expected_to_finish_ = false;
  1640.   EXPECT_FATAL_FAILURE({  // NOLINT
  1641.     ASSERT_PRED4(PredFunction4Bool,
  1642.                  Bool(n1_++),
  1643.                  Bool(n2_++),
  1644.                  Bool(n3_++),
  1645.                  Bool(n4_++));
  1646.     finished_ = true;
  1647.   }, "");
  1648. }
  1649.  
  1650. // Tests a failed ASSERT_PRED4 where the
  1651. // predicate-formatter is a functor on a built-in type (int).
  1652. TEST_F(ASSERT_PRED4Test, FunctorOnBuiltInTypeFailure) {
  1653.   expected_to_finish_ = false;
  1654.   EXPECT_FATAL_FAILURE({  // NOLINT
  1655.     ASSERT_PRED4(PredFunctor4(),
  1656.                  n1_++,
  1657.                  n2_++,
  1658.                  n3_++,
  1659.                  n4_++);
  1660.     finished_ = true;
  1661.   }, "");
  1662. }
  1663.  
  1664. // Tests a failed ASSERT_PRED4 where the
  1665. // predicate-formatter is a functor on a user-defined type (Bool).
  1666. TEST_F(ASSERT_PRED4Test, FunctorOnUserTypeFailure) {
  1667.   expected_to_finish_ = false;
  1668.   EXPECT_FATAL_FAILURE({  // NOLINT
  1669.     ASSERT_PRED4(PredFunctor4(),
  1670.                  Bool(n1_++),
  1671.                  Bool(n2_++),
  1672.                  Bool(n3_++),
  1673.                  Bool(n4_++));
  1674.     finished_ = true;
  1675.   }, "");
  1676. }
  1677.  
  1678. // Tests a successful EXPECT_PRED_FORMAT4 where the
  1679. // predicate-formatter is a function on a built-in type (int).
  1680. TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnBuiltInTypeSuccess) {
  1681.   EXPECT_PRED_FORMAT4(PredFormatFunction4,
  1682.                       ++n1_,
  1683.                       ++n2_,
  1684.                       ++n3_,
  1685.                       ++n4_);
  1686.   finished_ = true;
  1687. }
  1688.  
  1689. // Tests a successful EXPECT_PRED_FORMAT4 where the
  1690. // predicate-formatter is a function on a user-defined type (Bool).
  1691. TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnUserTypeSuccess) {
  1692.   EXPECT_PRED_FORMAT4(PredFormatFunction4,
  1693.                       Bool(++n1_),
  1694.                       Bool(++n2_),
  1695.                       Bool(++n3_),
  1696.                       Bool(++n4_));
  1697.   finished_ = true;
  1698. }
  1699.  
  1700. // Tests a successful EXPECT_PRED_FORMAT4 where the
  1701. // predicate-formatter is a functor on a built-in type (int).
  1702. TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnBuiltInTypeSuccess) {
  1703.   EXPECT_PRED_FORMAT4(PredFormatFunctor4(),
  1704.                       ++n1_,
  1705.                       ++n2_,
  1706.                       ++n3_,
  1707.                       ++n4_);
  1708.   finished_ = true;
  1709. }
  1710.  
  1711. // Tests a successful EXPECT_PRED_FORMAT4 where the
  1712. // predicate-formatter is a functor on a user-defined type (Bool).
  1713. TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnUserTypeSuccess) {
  1714.   EXPECT_PRED_FORMAT4(PredFormatFunctor4(),
  1715.                       Bool(++n1_),
  1716.                       Bool(++n2_),
  1717.                       Bool(++n3_),
  1718.                       Bool(++n4_));
  1719.   finished_ = true;
  1720. }
  1721.  
  1722. // Tests a failed EXPECT_PRED_FORMAT4 where the
  1723. // predicate-formatter is a function on a built-in type (int).
  1724. TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnBuiltInTypeFailure) {
  1725.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1726.     EXPECT_PRED_FORMAT4(PredFormatFunction4,
  1727.                         n1_++,
  1728.                         n2_++,
  1729.                         n3_++,
  1730.                         n4_++);
  1731.     finished_ = true;
  1732.   }, "");
  1733. }
  1734.  
  1735. // Tests a failed EXPECT_PRED_FORMAT4 where the
  1736. // predicate-formatter is a function on a user-defined type (Bool).
  1737. TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnUserTypeFailure) {
  1738.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1739.     EXPECT_PRED_FORMAT4(PredFormatFunction4,
  1740.                         Bool(n1_++),
  1741.                         Bool(n2_++),
  1742.                         Bool(n3_++),
  1743.                         Bool(n4_++));
  1744.     finished_ = true;
  1745.   }, "");
  1746. }
  1747.  
  1748. // Tests a failed EXPECT_PRED_FORMAT4 where the
  1749. // predicate-formatter is a functor on a built-in type (int).
  1750. TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnBuiltInTypeFailure) {
  1751.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1752.     EXPECT_PRED_FORMAT4(PredFormatFunctor4(),
  1753.                         n1_++,
  1754.                         n2_++,
  1755.                         n3_++,
  1756.                         n4_++);
  1757.     finished_ = true;
  1758.   }, "");
  1759. }
  1760.  
  1761. // Tests a failed EXPECT_PRED_FORMAT4 where the
  1762. // predicate-formatter is a functor on a user-defined type (Bool).
  1763. TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnUserTypeFailure) {
  1764.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  1765.     EXPECT_PRED_FORMAT4(PredFormatFunctor4(),
  1766.                         Bool(n1_++),
  1767.                         Bool(n2_++),
  1768.                         Bool(n3_++),
  1769.                         Bool(n4_++));
  1770.     finished_ = true;
  1771.   }, "");
  1772. }
  1773.  
  1774. // Tests a successful ASSERT_PRED_FORMAT4 where the
  1775. // predicate-formatter is a function on a built-in type (int).
  1776. TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnBuiltInTypeSuccess) {
  1777.   ASSERT_PRED_FORMAT4(PredFormatFunction4,
  1778.                       ++n1_,
  1779.                       ++n2_,
  1780.                       ++n3_,
  1781.                       ++n4_);
  1782.   finished_ = true;
  1783. }
  1784.  
  1785. // Tests a successful ASSERT_PRED_FORMAT4 where the
  1786. // predicate-formatter is a function on a user-defined type (Bool).
  1787. TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnUserTypeSuccess) {
  1788.   ASSERT_PRED_FORMAT4(PredFormatFunction4,
  1789.                       Bool(++n1_),
  1790.                       Bool(++n2_),
  1791.                       Bool(++n3_),
  1792.                       Bool(++n4_));
  1793.   finished_ = true;
  1794. }
  1795.  
  1796. // Tests a successful ASSERT_PRED_FORMAT4 where the
  1797. // predicate-formatter is a functor on a built-in type (int).
  1798. TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnBuiltInTypeSuccess) {
  1799.   ASSERT_PRED_FORMAT4(PredFormatFunctor4(),
  1800.                       ++n1_,
  1801.                       ++n2_,
  1802.                       ++n3_,
  1803.                       ++n4_);
  1804.   finished_ = true;
  1805. }
  1806.  
  1807. // Tests a successful ASSERT_PRED_FORMAT4 where the
  1808. // predicate-formatter is a functor on a user-defined type (Bool).
  1809. TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnUserTypeSuccess) {
  1810.   ASSERT_PRED_FORMAT4(PredFormatFunctor4(),
  1811.                       Bool(++n1_),
  1812.                       Bool(++n2_),
  1813.                       Bool(++n3_),
  1814.                       Bool(++n4_));
  1815.   finished_ = true;
  1816. }
  1817.  
  1818. // Tests a failed ASSERT_PRED_FORMAT4 where the
  1819. // predicate-formatter is a function on a built-in type (int).
  1820. TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnBuiltInTypeFailure) {
  1821.   expected_to_finish_ = false;
  1822.   EXPECT_FATAL_FAILURE({  // NOLINT
  1823.     ASSERT_PRED_FORMAT4(PredFormatFunction4,
  1824.                         n1_++,
  1825.                         n2_++,
  1826.                         n3_++,
  1827.                         n4_++);
  1828.     finished_ = true;
  1829.   }, "");
  1830. }
  1831.  
  1832. // Tests a failed ASSERT_PRED_FORMAT4 where the
  1833. // predicate-formatter is a function on a user-defined type (Bool).
  1834. TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnUserTypeFailure) {
  1835.   expected_to_finish_ = false;
  1836.   EXPECT_FATAL_FAILURE({  // NOLINT
  1837.     ASSERT_PRED_FORMAT4(PredFormatFunction4,
  1838.                         Bool(n1_++),
  1839.                         Bool(n2_++),
  1840.                         Bool(n3_++),
  1841.                         Bool(n4_++));
  1842.     finished_ = true;
  1843.   }, "");
  1844. }
  1845.  
  1846. // Tests a failed ASSERT_PRED_FORMAT4 where the
  1847. // predicate-formatter is a functor on a built-in type (int).
  1848. TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnBuiltInTypeFailure) {
  1849.   expected_to_finish_ = false;
  1850.   EXPECT_FATAL_FAILURE({  // NOLINT
  1851.     ASSERT_PRED_FORMAT4(PredFormatFunctor4(),
  1852.                         n1_++,
  1853.                         n2_++,
  1854.                         n3_++,
  1855.                         n4_++);
  1856.     finished_ = true;
  1857.   }, "");
  1858. }
  1859.  
  1860. // Tests a failed ASSERT_PRED_FORMAT4 where the
  1861. // predicate-formatter is a functor on a user-defined type (Bool).
  1862. TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnUserTypeFailure) {
  1863.   expected_to_finish_ = false;
  1864.   EXPECT_FATAL_FAILURE({  // NOLINT
  1865.     ASSERT_PRED_FORMAT4(PredFormatFunctor4(),
  1866.                         Bool(n1_++),
  1867.                         Bool(n2_++),
  1868.                         Bool(n3_++),
  1869.                         Bool(n4_++));
  1870.     finished_ = true;
  1871.   }, "");
  1872. }
  1873. // Sample functions/functors for testing 5-ary predicate assertions.
  1874.  
  1875. // A 5-ary predicate function.
  1876. template <typename T1, typename T2, typename T3, typename T4, typename T5>
  1877. bool PredFunction5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) {
  1878.   return v1 + v2 + v3 + v4 + v5 > 0;
  1879. }
  1880.  
  1881. // The following two functions are needed to circumvent a bug in
  1882. // gcc 2.95.3, which sometimes has problem with the above template
  1883. // function.
  1884. bool PredFunction5Int(int v1, int v2, int v3, int v4, int v5) {
  1885.   return v1 + v2 + v3 + v4 + v5 > 0;
  1886. }
  1887. bool PredFunction5Bool(Bool v1, Bool v2, Bool v3, Bool v4, Bool v5) {
  1888.   return v1 + v2 + v3 + v4 + v5 > 0;
  1889. }
  1890.  
  1891. // A 5-ary predicate functor.
  1892. struct PredFunctor5 {
  1893.   template <typename T1, typename T2, typename T3, typename T4, typename T5>
  1894.   bool operator()(const T1& v1,
  1895.                   const T2& v2,
  1896.                   const T3& v3,
  1897.                   const T4& v4,
  1898.                   const T5& v5) {
  1899.     return v1 + v2 + v3 + v4 + v5 > 0;
  1900.   }
  1901. };
  1902.  
  1903. // A 5-ary predicate-formatter function.
  1904. template <typename T1, typename T2, typename T3, typename T4, typename T5>
  1905. testing::AssertionResult PredFormatFunction5(const char* e1,
  1906.                                              const char* e2,
  1907.                                              const char* e3,
  1908.                                              const char* e4,
  1909.                                              const char* e5,
  1910.                                              const T1& v1,
  1911.                                              const T2& v2,
  1912.                                              const T3& v3,
  1913.                                              const T4& v4,
  1914.                                              const T5& v5) {
  1915.   if (PredFunction5(v1, v2, v3, v4, v5))
  1916.     return testing::AssertionSuccess();
  1917.  
  1918.   return testing::AssertionFailure()
  1919.       << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " + " << e5
  1920.       << " is expected to be positive, but evaluates to "
  1921.       << v1 + v2 + v3 + v4 + v5 << ".";
  1922. }
  1923.  
  1924. // A 5-ary predicate-formatter functor.
  1925. struct PredFormatFunctor5 {
  1926.   template <typename T1, typename T2, typename T3, typename T4, typename T5>
  1927.   testing::AssertionResult operator()(const char* e1,
  1928.                                       const char* e2,
  1929.                                       const char* e3,
  1930.                                       const char* e4,
  1931.                                       const char* e5,
  1932.                                       const T1& v1,
  1933.                                       const T2& v2,
  1934.                                       const T3& v3,
  1935.                                       const T4& v4,
  1936.                                       const T5& v5) const {
  1937.     return PredFormatFunction5(e1, e2, e3, e4, e5, v1, v2, v3, v4, v5);
  1938.   }
  1939. };
  1940.  
  1941. // Tests for {EXPECT|ASSERT}_PRED_FORMAT5.
  1942.  
  1943. class Predicate5Test : public testing::Test {
  1944.  protected:
  1945.   virtual void SetUp() {
  1946.     expected_to_finish_ = true;
  1947.     finished_ = false;
  1948.     n1_ = n2_ = n3_ = n4_ = n5_ = 0;
  1949.   }
  1950.  
  1951.   virtual void TearDown() {
  1952.     // Verifies that each of the predicate's arguments was evaluated
  1953.     // exactly once.
  1954.     EXPECT_EQ(1, n1_) <<
  1955.         "The predicate assertion didn't evaluate argument 2 "
  1956.         "exactly once.";
  1957.     EXPECT_EQ(1, n2_) <<
  1958.         "The predicate assertion didn't evaluate argument 3 "
  1959.         "exactly once.";
  1960.     EXPECT_EQ(1, n3_) <<
  1961.         "The predicate assertion didn't evaluate argument 4 "
  1962.         "exactly once.";
  1963.     EXPECT_EQ(1, n4_) <<
  1964.         "The predicate assertion didn't evaluate argument 5 "
  1965.         "exactly once.";
  1966.     EXPECT_EQ(1, n5_) <<
  1967.         "The predicate assertion didn't evaluate argument 6 "
  1968.         "exactly once.";
  1969.  
  1970.     // Verifies that the control flow in the test function is expected.
  1971.     if (expected_to_finish_ && !finished_) {
  1972.       FAIL() << "The predicate assertion unexpactedly aborted the test.";
  1973.     } else if (!expected_to_finish_ && finished_) {
  1974.       FAIL() << "The failed predicate assertion didn't abort the test "
  1975.                 "as expected.";
  1976.     }
  1977.   }
  1978.  
  1979.   // true iff the test function is expected to run to finish.
  1980.   static bool expected_to_finish_;
  1981.  
  1982.   // true iff the test function did run to finish.
  1983.   static bool finished_;
  1984.  
  1985.   static int n1_;
  1986.   static int n2_;
  1987.   static int n3_;
  1988.   static int n4_;
  1989.   static int n5_;
  1990. };
  1991.  
  1992. bool Predicate5Test::expected_to_finish_;
  1993. bool Predicate5Test::finished_;
  1994. int Predicate5Test::n1_;
  1995. int Predicate5Test::n2_;
  1996. int Predicate5Test::n3_;
  1997. int Predicate5Test::n4_;
  1998. int Predicate5Test::n5_;
  1999.  
  2000. typedef Predicate5Test EXPECT_PRED_FORMAT5Test;
  2001. typedef Predicate5Test ASSERT_PRED_FORMAT5Test;
  2002. typedef Predicate5Test EXPECT_PRED5Test;
  2003. typedef Predicate5Test ASSERT_PRED5Test;
  2004.  
  2005. // Tests a successful EXPECT_PRED5 where the
  2006. // predicate-formatter is a function on a built-in type (int).
  2007. TEST_F(EXPECT_PRED5Test, FunctionOnBuiltInTypeSuccess) {
  2008.   EXPECT_PRED5(PredFunction5Int,
  2009.                ++n1_,
  2010.                ++n2_,
  2011.                ++n3_,
  2012.                ++n4_,
  2013.                ++n5_);
  2014.   finished_ = true;
  2015. }
  2016.  
  2017. // Tests a successful EXPECT_PRED5 where the
  2018. // predicate-formatter is a function on a user-defined type (Bool).
  2019. TEST_F(EXPECT_PRED5Test, FunctionOnUserTypeSuccess) {
  2020.   EXPECT_PRED5(PredFunction5Bool,
  2021.                Bool(++n1_),
  2022.                Bool(++n2_),
  2023.                Bool(++n3_),
  2024.                Bool(++n4_),
  2025.                Bool(++n5_));
  2026.   finished_ = true;
  2027. }
  2028.  
  2029. // Tests a successful EXPECT_PRED5 where the
  2030. // predicate-formatter is a functor on a built-in type (int).
  2031. TEST_F(EXPECT_PRED5Test, FunctorOnBuiltInTypeSuccess) {
  2032.   EXPECT_PRED5(PredFunctor5(),
  2033.                ++n1_,
  2034.                ++n2_,
  2035.                ++n3_,
  2036.                ++n4_,
  2037.                ++n5_);
  2038.   finished_ = true;
  2039. }
  2040.  
  2041. // Tests a successful EXPECT_PRED5 where the
  2042. // predicate-formatter is a functor on a user-defined type (Bool).
  2043. TEST_F(EXPECT_PRED5Test, FunctorOnUserTypeSuccess) {
  2044.   EXPECT_PRED5(PredFunctor5(),
  2045.                Bool(++n1_),
  2046.                Bool(++n2_),
  2047.                Bool(++n3_),
  2048.                Bool(++n4_),
  2049.                Bool(++n5_));
  2050.   finished_ = true;
  2051. }
  2052.  
  2053. // Tests a failed EXPECT_PRED5 where the
  2054. // predicate-formatter is a function on a built-in type (int).
  2055. TEST_F(EXPECT_PRED5Test, FunctionOnBuiltInTypeFailure) {
  2056.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  2057.     EXPECT_PRED5(PredFunction5Int,
  2058.                  n1_++,
  2059.                  n2_++,
  2060.                  n3_++,
  2061.                  n4_++,
  2062.                  n5_++);
  2063.     finished_ = true;
  2064.   }, "");
  2065. }
  2066.  
  2067. // Tests a failed EXPECT_PRED5 where the
  2068. // predicate-formatter is a function on a user-defined type (Bool).
  2069. TEST_F(EXPECT_PRED5Test, FunctionOnUserTypeFailure) {
  2070.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  2071.     EXPECT_PRED5(PredFunction5Bool,
  2072.                  Bool(n1_++),
  2073.                  Bool(n2_++),
  2074.                  Bool(n3_++),
  2075.                  Bool(n4_++),
  2076.                  Bool(n5_++));
  2077.     finished_ = true;
  2078.   }, "");
  2079. }
  2080.  
  2081. // Tests a failed EXPECT_PRED5 where the
  2082. // predicate-formatter is a functor on a built-in type (int).
  2083. TEST_F(EXPECT_PRED5Test, FunctorOnBuiltInTypeFailure) {
  2084.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  2085.     EXPECT_PRED5(PredFunctor5(),
  2086.                  n1_++,
  2087.                  n2_++,
  2088.                  n3_++,
  2089.                  n4_++,
  2090.                  n5_++);
  2091.     finished_ = true;
  2092.   }, "");
  2093. }
  2094.  
  2095. // Tests a failed EXPECT_PRED5 where the
  2096. // predicate-formatter is a functor on a user-defined type (Bool).
  2097. TEST_F(EXPECT_PRED5Test, FunctorOnUserTypeFailure) {
  2098.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  2099.     EXPECT_PRED5(PredFunctor5(),
  2100.                  Bool(n1_++),
  2101.                  Bool(n2_++),
  2102.                  Bool(n3_++),
  2103.                  Bool(n4_++),
  2104.                  Bool(n5_++));
  2105.     finished_ = true;
  2106.   }, "");
  2107. }
  2108.  
  2109. // Tests a successful ASSERT_PRED5 where the
  2110. // predicate-formatter is a function on a built-in type (int).
  2111. TEST_F(ASSERT_PRED5Test, FunctionOnBuiltInTypeSuccess) {
  2112.   ASSERT_PRED5(PredFunction5Int,
  2113.                ++n1_,
  2114.                ++n2_,
  2115.                ++n3_,
  2116.                ++n4_,
  2117.                ++n5_);
  2118.   finished_ = true;
  2119. }
  2120.  
  2121. // Tests a successful ASSERT_PRED5 where the
  2122. // predicate-formatter is a function on a user-defined type (Bool).
  2123. TEST_F(ASSERT_PRED5Test, FunctionOnUserTypeSuccess) {
  2124.   ASSERT_PRED5(PredFunction5Bool,
  2125.                Bool(++n1_),
  2126.                Bool(++n2_),
  2127.                Bool(++n3_),
  2128.                Bool(++n4_),
  2129.                Bool(++n5_));
  2130.   finished_ = true;
  2131. }
  2132.  
  2133. // Tests a successful ASSERT_PRED5 where the
  2134. // predicate-formatter is a functor on a built-in type (int).
  2135. TEST_F(ASSERT_PRED5Test, FunctorOnBuiltInTypeSuccess) {
  2136.   ASSERT_PRED5(PredFunctor5(),
  2137.                ++n1_,
  2138.                ++n2_,
  2139.                ++n3_,
  2140.                ++n4_,
  2141.                ++n5_);
  2142.   finished_ = true;
  2143. }
  2144.  
  2145. // Tests a successful ASSERT_PRED5 where the
  2146. // predicate-formatter is a functor on a user-defined type (Bool).
  2147. TEST_F(ASSERT_PRED5Test, FunctorOnUserTypeSuccess) {
  2148.   ASSERT_PRED5(PredFunctor5(),
  2149.                Bool(++n1_),
  2150.                Bool(++n2_),
  2151.                Bool(++n3_),
  2152.                Bool(++n4_),
  2153.                Bool(++n5_));
  2154.   finished_ = true;
  2155. }
  2156.  
  2157. // Tests a failed ASSERT_PRED5 where the
  2158. // predicate-formatter is a function on a built-in type (int).
  2159. TEST_F(ASSERT_PRED5Test, FunctionOnBuiltInTypeFailure) {
  2160.   expected_to_finish_ = false;
  2161.   EXPECT_FATAL_FAILURE({  // NOLINT
  2162.     ASSERT_PRED5(PredFunction5Int,
  2163.                  n1_++,
  2164.                  n2_++,
  2165.                  n3_++,
  2166.                  n4_++,
  2167.                  n5_++);
  2168.     finished_ = true;
  2169.   }, "");
  2170. }
  2171.  
  2172. // Tests a failed ASSERT_PRED5 where the
  2173. // predicate-formatter is a function on a user-defined type (Bool).
  2174. TEST_F(ASSERT_PRED5Test, FunctionOnUserTypeFailure) {
  2175.   expected_to_finish_ = false;
  2176.   EXPECT_FATAL_FAILURE({  // NOLINT
  2177.     ASSERT_PRED5(PredFunction5Bool,
  2178.                  Bool(n1_++),
  2179.                  Bool(n2_++),
  2180.                  Bool(n3_++),
  2181.                  Bool(n4_++),
  2182.                  Bool(n5_++));
  2183.     finished_ = true;
  2184.   }, "");
  2185. }
  2186.  
  2187. // Tests a failed ASSERT_PRED5 where the
  2188. // predicate-formatter is a functor on a built-in type (int).
  2189. TEST_F(ASSERT_PRED5Test, FunctorOnBuiltInTypeFailure) {
  2190.   expected_to_finish_ = false;
  2191.   EXPECT_FATAL_FAILURE({  // NOLINT
  2192.     ASSERT_PRED5(PredFunctor5(),
  2193.                  n1_++,
  2194.                  n2_++,
  2195.                  n3_++,
  2196.                  n4_++,
  2197.                  n5_++);
  2198.     finished_ = true;
  2199.   }, "");
  2200. }
  2201.  
  2202. // Tests a failed ASSERT_PRED5 where the
  2203. // predicate-formatter is a functor on a user-defined type (Bool).
  2204. TEST_F(ASSERT_PRED5Test, FunctorOnUserTypeFailure) {
  2205.   expected_to_finish_ = false;
  2206.   EXPECT_FATAL_FAILURE({  // NOLINT
  2207.     ASSERT_PRED5(PredFunctor5(),
  2208.                  Bool(n1_++),
  2209.                  Bool(n2_++),
  2210.                  Bool(n3_++),
  2211.                  Bool(n4_++),
  2212.                  Bool(n5_++));
  2213.     finished_ = true;
  2214.   }, "");
  2215. }
  2216.  
  2217. // Tests a successful EXPECT_PRED_FORMAT5 where the
  2218. // predicate-formatter is a function on a built-in type (int).
  2219. TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnBuiltInTypeSuccess) {
  2220.   EXPECT_PRED_FORMAT5(PredFormatFunction5,
  2221.                       ++n1_,
  2222.                       ++n2_,
  2223.                       ++n3_,
  2224.                       ++n4_,
  2225.                       ++n5_);
  2226.   finished_ = true;
  2227. }
  2228.  
  2229. // Tests a successful EXPECT_PRED_FORMAT5 where the
  2230. // predicate-formatter is a function on a user-defined type (Bool).
  2231. TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnUserTypeSuccess) {
  2232.   EXPECT_PRED_FORMAT5(PredFormatFunction5,
  2233.                       Bool(++n1_),
  2234.                       Bool(++n2_),
  2235.                       Bool(++n3_),
  2236.                       Bool(++n4_),
  2237.                       Bool(++n5_));
  2238.   finished_ = true;
  2239. }
  2240.  
  2241. // Tests a successful EXPECT_PRED_FORMAT5 where the
  2242. // predicate-formatter is a functor on a built-in type (int).
  2243. TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnBuiltInTypeSuccess) {
  2244.   EXPECT_PRED_FORMAT5(PredFormatFunctor5(),
  2245.                       ++n1_,
  2246.                       ++n2_,
  2247.                       ++n3_,
  2248.                       ++n4_,
  2249.                       ++n5_);
  2250.   finished_ = true;
  2251. }
  2252.  
  2253. // Tests a successful EXPECT_PRED_FORMAT5 where the
  2254. // predicate-formatter is a functor on a user-defined type (Bool).
  2255. TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnUserTypeSuccess) {
  2256.   EXPECT_PRED_FORMAT5(PredFormatFunctor5(),
  2257.                       Bool(++n1_),
  2258.                       Bool(++n2_),
  2259.                       Bool(++n3_),
  2260.                       Bool(++n4_),
  2261.                       Bool(++n5_));
  2262.   finished_ = true;
  2263. }
  2264.  
  2265. // Tests a failed EXPECT_PRED_FORMAT5 where the
  2266. // predicate-formatter is a function on a built-in type (int).
  2267. TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnBuiltInTypeFailure) {
  2268.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  2269.     EXPECT_PRED_FORMAT5(PredFormatFunction5,
  2270.                         n1_++,
  2271.                         n2_++,
  2272.                         n3_++,
  2273.                         n4_++,
  2274.                         n5_++);
  2275.     finished_ = true;
  2276.   }, "");
  2277. }
  2278.  
  2279. // Tests a failed EXPECT_PRED_FORMAT5 where the
  2280. // predicate-formatter is a function on a user-defined type (Bool).
  2281. TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnUserTypeFailure) {
  2282.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  2283.     EXPECT_PRED_FORMAT5(PredFormatFunction5,
  2284.                         Bool(n1_++),
  2285.                         Bool(n2_++),
  2286.                         Bool(n3_++),
  2287.                         Bool(n4_++),
  2288.                         Bool(n5_++));
  2289.     finished_ = true;
  2290.   }, "");
  2291. }
  2292.  
  2293. // Tests a failed EXPECT_PRED_FORMAT5 where the
  2294. // predicate-formatter is a functor on a built-in type (int).
  2295. TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnBuiltInTypeFailure) {
  2296.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  2297.     EXPECT_PRED_FORMAT5(PredFormatFunctor5(),
  2298.                         n1_++,
  2299.                         n2_++,
  2300.                         n3_++,
  2301.                         n4_++,
  2302.                         n5_++);
  2303.     finished_ = true;
  2304.   }, "");
  2305. }
  2306.  
  2307. // Tests a failed EXPECT_PRED_FORMAT5 where the
  2308. // predicate-formatter is a functor on a user-defined type (Bool).
  2309. TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnUserTypeFailure) {
  2310.   EXPECT_NONFATAL_FAILURE({  // NOLINT
  2311.     EXPECT_PRED_FORMAT5(PredFormatFunctor5(),
  2312.                         Bool(n1_++),
  2313.                         Bool(n2_++),
  2314.                         Bool(n3_++),
  2315.                         Bool(n4_++),
  2316.                         Bool(n5_++));
  2317.     finished_ = true;
  2318.   }, "");
  2319. }
  2320.  
  2321. // Tests a successful ASSERT_PRED_FORMAT5 where the
  2322. // predicate-formatter is a function on a built-in type (int).
  2323. TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnBuiltInTypeSuccess) {
  2324.   ASSERT_PRED_FORMAT5(PredFormatFunction5,
  2325.                       ++n1_,
  2326.                       ++n2_,
  2327.                       ++n3_,
  2328.                       ++n4_,
  2329.                       ++n5_);
  2330.   finished_ = true;
  2331. }
  2332.  
  2333. // Tests a successful ASSERT_PRED_FORMAT5 where the
  2334. // predicate-formatter is a function on a user-defined type (Bool).
  2335. TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnUserTypeSuccess) {
  2336.   ASSERT_PRED_FORMAT5(PredFormatFunction5,
  2337.                       Bool(++n1_),
  2338.                       Bool(++n2_),
  2339.                       Bool(++n3_),
  2340.                       Bool(++n4_),
  2341.                       Bool(++n5_));
  2342.   finished_ = true;
  2343. }
  2344.  
  2345. // Tests a successful ASSERT_PRED_FORMAT5 where the
  2346. // predicate-formatter is a functor on a built-in type (int).
  2347. TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnBuiltInTypeSuccess) {
  2348.   ASSERT_PRED_FORMAT5(PredFormatFunctor5(),
  2349.                       ++n1_,
  2350.                       ++n2_,
  2351.                       ++n3_,
  2352.                       ++n4_,
  2353.                       ++n5_);
  2354.   finished_ = true;
  2355. }
  2356.  
  2357. // Tests a successful ASSERT_PRED_FORMAT5 where the
  2358. // predicate-formatter is a functor on a user-defined type (Bool).
  2359. TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnUserTypeSuccess) {
  2360.   ASSERT_PRED_FORMAT5(PredFormatFunctor5(),
  2361.                       Bool(++n1_),
  2362.                       Bool(++n2_),
  2363.                       Bool(++n3_),
  2364.                       Bool(++n4_),
  2365.                       Bool(++n5_));
  2366.   finished_ = true;
  2367. }
  2368.  
  2369. // Tests a failed ASSERT_PRED_FORMAT5 where the
  2370. // predicate-formatter is a function on a built-in type (int).
  2371. TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnBuiltInTypeFailure) {
  2372.   expected_to_finish_ = false;
  2373.   EXPECT_FATAL_FAILURE({  // NOLINT
  2374.     ASSERT_PRED_FORMAT5(PredFormatFunction5,
  2375.                         n1_++,
  2376.                         n2_++,
  2377.                         n3_++,
  2378.                         n4_++,
  2379.                         n5_++);
  2380.     finished_ = true;
  2381.   }, "");
  2382. }
  2383.  
  2384. // Tests a failed ASSERT_PRED_FORMAT5 where the
  2385. // predicate-formatter is a function on a user-defined type (Bool).
  2386. TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnUserTypeFailure) {
  2387.   expected_to_finish_ = false;
  2388.   EXPECT_FATAL_FAILURE({  // NOLINT
  2389.     ASSERT_PRED_FORMAT5(PredFormatFunction5,
  2390.                         Bool(n1_++),
  2391.                         Bool(n2_++),
  2392.                         Bool(n3_++),
  2393.                         Bool(n4_++),
  2394.                         Bool(n5_++));
  2395.     finished_ = true;
  2396.   }, "");
  2397. }
  2398.  
  2399. // Tests a failed ASSERT_PRED_FORMAT5 where the
  2400. // predicate-formatter is a functor on a built-in type (int).
  2401. TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnBuiltInTypeFailure) {
  2402.   expected_to_finish_ = false;
  2403.   EXPECT_FATAL_FAILURE({  // NOLINT
  2404.     ASSERT_PRED_FORMAT5(PredFormatFunctor5(),
  2405.                         n1_++,
  2406.                         n2_++,
  2407.                         n3_++,
  2408.                         n4_++,
  2409.                         n5_++);
  2410.     finished_ = true;
  2411.   }, "");
  2412. }
  2413.  
  2414. // Tests a failed ASSERT_PRED_FORMAT5 where the
  2415. // predicate-formatter is a functor on a user-defined type (Bool).
  2416. TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnUserTypeFailure) {
  2417.   expected_to_finish_ = false;
  2418.   EXPECT_FATAL_FAILURE({  // NOLINT
  2419.     ASSERT_PRED_FORMAT5(PredFormatFunctor5(),
  2420.                         Bool(n1_++),
  2421.                         Bool(n2_++),
  2422.                         Bool(n3_++),
  2423.                         Bool(n4_++),
  2424.                         Bool(n5_++));
  2425.     finished_ = true;
  2426.   }, "");
  2427. }
  2428.