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