Home | History | Annotate | Download | only in test
      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 10/31/2011 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