github.com/jlmucb/cloudproxy@v0.0.0-20170830161738-b5aa0b619bc4/src/third_party/googlemock/gtest/test/gtest_pred_impl_unittest.cc (about)

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