11be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Copyright 2006, Google Inc.
21be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// All rights reserved.
31be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania//
41be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Redistribution and use in source and binary forms, with or without
51be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// modification, are permitted provided that the following conditions are
61be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// met:
71be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania//
81be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania//     * Redistributions of source code must retain the above copyright
91be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// notice, this list of conditions and the following disclaimer.
101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania//     * Redistributions in binary form must reproduce the above
111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// copyright notice, this list of conditions and the following disclaimer
121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// in the documentation and/or other materials provided with the
131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// distribution.
141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania//     * Neither the name of Google Inc. nor the names of its
151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// contributors may be used to endorse or promote products derived from
161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// this software without specific prior written permission.
171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania//
181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
3041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// This file is AUTOMATICALLY GENERATED on 09/24/2010 by command
311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 'gen_gtest_pred_impl.py 5'.  DO NOT EDIT BY HAND!
321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Regression test for gtest_pred_impl.h
341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania//
351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This file is generated by a script and quite long.  If you intend to
361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// learn how Google Test works by reading its unit tests, read
371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// gtest_unittest.cc instead.
381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania//
391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This is intended as a regression test for the Google Test predicate
401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// assertions.  We compile it as part of the gtest_unittest target
411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// only to keep the implementation tidy and compact, as it is quite
421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// involved to set up the stage for testing Google Test using Google
431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Test itself.
441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania//
451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Currently, gtest_unittest takes ~11 seconds to run in the testing
461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// daemon.  In the future, if it grows too large and needs much more
471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// time to finish, we should consider separating this file into a
481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// stand-alone regression test.
491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#include <iostream>
511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#include "gtest/gtest.h"
5341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#include "gtest/gtest-spi.h"
541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A user-defined data type.
561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct Bool {
571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  explicit Bool(int val) : value(val != 0) {}
581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  bool operator>(int n) const { return value > Bool(n).value; }
601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  Bool operator+(const Bool& rhs) const { return Bool(value + rhs.value); }
621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  bool operator==(const Bool& rhs) const { return value == rhs.value; }
641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  bool value;
661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Enables Bool to be used in assertions.
691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastd::ostream& operator<<(std::ostream& os, const Bool& x) {
701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return os << (x.value ? "true" : "false");
711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Sample functions/functors for testing unary predicate assertions.
741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A unary predicate function.
761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T1>
771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool PredFunction1(T1 v1) {
781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return v1 > 0;
791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The following two functions are needed to circumvent a bug in
821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// gcc 2.95.3, which sometimes has problem with the above template
831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// function.
841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool PredFunction1Int(int v1) {
851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return v1 > 0;
861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool PredFunction1Bool(Bool v1) {
881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return v1 > 0;
891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A unary predicate functor.
921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct PredFunctor1 {
931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  template <typename T1>
941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  bool operator()(const T1& v1) {
951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    return v1 > 0;
961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A unary predicate-formatter function.
1001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T1>
1011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatesting::AssertionResult PredFormatFunction1(const char* e1,
1021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const T1& v1) {
1031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  if (PredFunction1(v1))
1041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    return testing::AssertionSuccess();
1051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
10641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return testing::AssertionFailure()
10741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      << e1
1081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      << " is expected to be positive, but evaluates to "
1091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      << v1 << ".";
1101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
1111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
1121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A unary predicate-formatter functor.
1131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct PredFormatFunctor1 {
1141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  template <typename T1>
1151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  testing::AssertionResult operator()(const char* e1,
1161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const T1& v1) const {
1171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    return PredFormatFunction1(e1, v1);
1181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
1191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
1201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
1211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests for {EXPECT|ASSERT}_PRED_FORMAT1.
1221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
1231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass Predicate1Test : public testing::Test {
1241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected:
1251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  virtual void SetUp() {
1261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    expected_to_finish_ = true;
1271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = false;
1281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    n1_ = 0;
1291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
1301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
1311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  virtual void TearDown() {
1321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    // Verifies that each of the predicate's arguments was evaluated
1331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    // exactly once.
1341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_EQ(1, n1_) <<
1351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "The predicate assertion didn't evaluate argument 2 "
1361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "exactly once.";
1371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
1381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    // Verifies that the control flow in the test function is expected.
1391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    if (expected_to_finish_ && !finished_) {
1401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      FAIL() << "The predicate assertion unexpactedly aborted the test.";
1411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    } else if (!expected_to_finish_ && finished_) {
1421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      FAIL() << "The failed predicate assertion didn't abort the test "
1431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                "as expected.";
1441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    }
1451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
1461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
1471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  // true iff the test function is expected to run to finish.
1481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static bool expected_to_finish_;
1491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
1501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  // true iff the test function did run to finish.
1511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static bool finished_;
1521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
1531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static int n1_;
1541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
1551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
1561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool Predicate1Test::expected_to_finish_;
1571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool Predicate1Test::finished_;
1581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint Predicate1Test::n1_;
1591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
1601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate1Test EXPECT_PRED_FORMAT1Test;
1611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate1Test ASSERT_PRED_FORMAT1Test;
1621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate1Test EXPECT_PRED1Test;
1631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate1Test ASSERT_PRED1Test;
1641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
1651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED1 where the
1661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
1671be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED1Test, FunctionOnBuiltInTypeSuccess) {
1681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED1(PredFunction1Int,
1691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_);
1701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
1711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
1721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
1731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED1 where the
1741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
1751be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED1Test, FunctionOnUserTypeSuccess) {
1761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED1(PredFunction1Bool,
1771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_));
1781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
1791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
1801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
1811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED1 where the
1821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
1831be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED1Test, FunctorOnBuiltInTypeSuccess) {
1841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED1(PredFunctor1(),
1851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_);
1861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
1871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
1881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
1891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED1 where the
1901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
1911be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED1Test, FunctorOnUserTypeSuccess) {
1921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED1(PredFunctor1(),
1931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_));
1941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
1951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
1961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
1971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED1 where the
1981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
1991be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED1Test, FunctionOnBuiltInTypeFailure) {
2001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
2011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED1(PredFunction1Int,
2021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++);
2031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
2041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
2051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
2061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
2071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED1 where the
2081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
2091be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED1Test, FunctionOnUserTypeFailure) {
2101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
2111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED1(PredFunction1Bool,
2121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++));
2131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
2141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
2151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
2161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
2171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED1 where the
2181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
2191be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED1Test, FunctorOnBuiltInTypeFailure) {
2201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
2211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED1(PredFunctor1(),
2221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++);
2231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
2241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
2251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
2261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
2271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED1 where the
2281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
2291be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED1Test, FunctorOnUserTypeFailure) {
2301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
2311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED1(PredFunctor1(),
2321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++));
2331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
2341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
2351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
2361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
2371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED1 where the
2381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
2391be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED1Test, FunctionOnBuiltInTypeSuccess) {
2401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED1(PredFunction1Int,
2411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_);
2421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
2431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
2441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
2451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED1 where the
2461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
2471be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED1Test, FunctionOnUserTypeSuccess) {
2481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED1(PredFunction1Bool,
2491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_));
2501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
2511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
2521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
2531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED1 where the
2541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
2551be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED1Test, FunctorOnBuiltInTypeSuccess) {
2561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED1(PredFunctor1(),
2571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_);
2581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
2591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
2601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
2611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED1 where the
2621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
2631be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED1Test, FunctorOnUserTypeSuccess) {
2641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED1(PredFunctor1(),
2651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_));
2661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
2671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
2681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
2691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED1 where the
2701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
2711be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED1Test, FunctionOnBuiltInTypeFailure) {
2721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
2731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
2741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED1(PredFunction1Int,
2751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++);
2761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
2771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
2781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
2791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
2801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED1 where the
2811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
2821be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED1Test, FunctionOnUserTypeFailure) {
2831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
2841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
2851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED1(PredFunction1Bool,
2861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++));
2871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
2881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
2891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
2901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
2911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED1 where the
2921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
2931be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED1Test, FunctorOnBuiltInTypeFailure) {
2941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
2951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
2961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED1(PredFunctor1(),
2971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++);
2981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
2991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
3001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
3011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
3021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED1 where the
3031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
3041be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED1Test, FunctorOnUserTypeFailure) {
3051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
3061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
3071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED1(PredFunctor1(),
3081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++));
3091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
3101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
3111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
3121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
3131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT1 where the
3141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
3151be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnBuiltInTypeSuccess) {
3161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT1(PredFormatFunction1,
3171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_);
3181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
3191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
3201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
3211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT1 where the
3221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
3231be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnUserTypeSuccess) {
3241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT1(PredFormatFunction1,
3251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_));
3261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
3271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
3281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
3291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT1 where the
3301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
3311be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnBuiltInTypeSuccess) {
3321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT1(PredFormatFunctor1(),
3331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_);
3341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
3351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
3361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
3371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT1 where the
3381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
3391be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnUserTypeSuccess) {
3401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT1(PredFormatFunctor1(),
3411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_));
3421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
3431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
3441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
3451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT1 where the
3461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
3471be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnBuiltInTypeFailure) {
3481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
3491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT1(PredFormatFunction1,
3501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++);
3511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
3521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
3531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
3541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
3551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT1 where the
3561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
3571be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnUserTypeFailure) {
3581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
3591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT1(PredFormatFunction1,
3601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++));
3611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
3621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
3631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
3641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
3651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT1 where the
3661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
3671be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnBuiltInTypeFailure) {
3681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
3691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT1(PredFormatFunctor1(),
3701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++);
3711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
3721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
3731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
3741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
3751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT1 where the
3761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
3771be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnUserTypeFailure) {
3781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
3791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT1(PredFormatFunctor1(),
3801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++));
3811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
3821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
3831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
3841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
3851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT1 where the
3861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
3871be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnBuiltInTypeSuccess) {
3881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT1(PredFormatFunction1,
3891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_);
3901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
3911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
3921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
3931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT1 where the
3941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
3951be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnUserTypeSuccess) {
3961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT1(PredFormatFunction1,
3971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_));
3981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
3991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
4001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
4011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT1 where the
4021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
4031be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnBuiltInTypeSuccess) {
4041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT1(PredFormatFunctor1(),
4051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_);
4061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
4071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
4081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
4091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT1 where the
4101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
4111be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnUserTypeSuccess) {
4121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT1(PredFormatFunctor1(),
4131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_));
4141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
4151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
4161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
4171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT1 where the
4181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
4191be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnBuiltInTypeFailure) {
4201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
4211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
4221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT1(PredFormatFunction1,
4231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++);
4241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
4251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
4261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
4271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
4281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT1 where the
4291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
4301be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnUserTypeFailure) {
4311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
4321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
4331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT1(PredFormatFunction1,
4341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++));
4351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
4361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
4371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
4381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
4391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT1 where the
4401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
4411be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnBuiltInTypeFailure) {
4421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
4431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
4441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT1(PredFormatFunctor1(),
4451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++);
4461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
4471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
4481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
4491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
4501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT1 where the
4511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
4521be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnUserTypeFailure) {
4531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
4541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
4551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT1(PredFormatFunctor1(),
4561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++));
4571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
4581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
4591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
4601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Sample functions/functors for testing binary predicate assertions.
4611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
4621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A binary predicate function.
4631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T1, typename T2>
4641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool PredFunction2(T1 v1, T2 v2) {
4651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return v1 + v2 > 0;
4661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
4671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
4681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The following two functions are needed to circumvent a bug in
4691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// gcc 2.95.3, which sometimes has problem with the above template
4701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// function.
4711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool PredFunction2Int(int v1, int v2) {
4721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return v1 + v2 > 0;
4731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
4741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool PredFunction2Bool(Bool v1, Bool v2) {
4751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return v1 + v2 > 0;
4761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
4771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
4781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A binary predicate functor.
4791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct PredFunctor2 {
4801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  template <typename T1, typename T2>
4811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  bool operator()(const T1& v1,
4821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                  const T2& v2) {
4831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    return v1 + v2 > 0;
4841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
4851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
4861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
4871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A binary predicate-formatter function.
4881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T1, typename T2>
4891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatesting::AssertionResult PredFormatFunction2(const char* e1,
4901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const char* e2,
4911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const T1& v1,
4921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const T2& v2) {
4931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  if (PredFunction2(v1, v2))
4941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    return testing::AssertionSuccess();
4951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
49641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return testing::AssertionFailure()
49741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      << e1 << " + " << e2
4981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      << " is expected to be positive, but evaluates to "
4991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      << v1 + v2 << ".";
5001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
5011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A binary predicate-formatter functor.
5031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct PredFormatFunctor2 {
5041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  template <typename T1, typename T2>
5051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  testing::AssertionResult operator()(const char* e1,
5061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const char* e2,
5071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const T1& v1,
5081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const T2& v2) const {
5091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    return PredFormatFunction2(e1, e2, v1, v2);
5101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
5111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
5121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests for {EXPECT|ASSERT}_PRED_FORMAT2.
5141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass Predicate2Test : public testing::Test {
5161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected:
5171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  virtual void SetUp() {
5181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    expected_to_finish_ = true;
5191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = false;
5201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    n1_ = n2_ = 0;
5211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
5221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  virtual void TearDown() {
5241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    // Verifies that each of the predicate's arguments was evaluated
5251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    // exactly once.
5261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_EQ(1, n1_) <<
5271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "The predicate assertion didn't evaluate argument 2 "
5281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "exactly once.";
5291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_EQ(1, n2_) <<
5301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "The predicate assertion didn't evaluate argument 3 "
5311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "exactly once.";
5321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    // Verifies that the control flow in the test function is expected.
5341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    if (expected_to_finish_ && !finished_) {
5351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      FAIL() << "The predicate assertion unexpactedly aborted the test.";
5361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    } else if (!expected_to_finish_ && finished_) {
5371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      FAIL() << "The failed predicate assertion didn't abort the test "
5381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                "as expected.";
5391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    }
5401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
5411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  // true iff the test function is expected to run to finish.
5431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static bool expected_to_finish_;
5441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  // true iff the test function did run to finish.
5461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static bool finished_;
5471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static int n1_;
5491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static int n2_;
5501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
5511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool Predicate2Test::expected_to_finish_;
5531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool Predicate2Test::finished_;
5541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint Predicate2Test::n1_;
5551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint Predicate2Test::n2_;
5561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate2Test EXPECT_PRED_FORMAT2Test;
5581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate2Test ASSERT_PRED_FORMAT2Test;
5591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate2Test EXPECT_PRED2Test;
5601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate2Test ASSERT_PRED2Test;
5611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED2 where the
5631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
5641be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED2Test, FunctionOnBuiltInTypeSuccess) {
5651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED2(PredFunction2Int,
5661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
5671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_);
5681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
5691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
5701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED2 where the
5721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
5731be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED2Test, FunctionOnUserTypeSuccess) {
5741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED2(PredFunction2Bool,
5751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
5761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_));
5771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
5781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
5791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED2 where the
5811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
5821be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED2Test, FunctorOnBuiltInTypeSuccess) {
5831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED2(PredFunctor2(),
5841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
5851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_);
5861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
5871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
5881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED2 where the
5901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
5911be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED2Test, FunctorOnUserTypeSuccess) {
5921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED2(PredFunctor2(),
5931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
5941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_));
5951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
5961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
5971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
5981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED2 where the
5991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
6001be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED2Test, FunctionOnBuiltInTypeFailure) {
6011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
6021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED2(PredFunction2Int,
6031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
6041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++);
6051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
6061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
6071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
6081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
6091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED2 where the
6101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
6111be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED2Test, FunctionOnUserTypeFailure) {
6121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
6131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED2(PredFunction2Bool,
6141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
6151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++));
6161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
6171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
6181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
6191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
6201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED2 where the
6211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
6221be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED2Test, FunctorOnBuiltInTypeFailure) {
6231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
6241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED2(PredFunctor2(),
6251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
6261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++);
6271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
6281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
6291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
6301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
6311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED2 where the
6321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
6331be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED2Test, FunctorOnUserTypeFailure) {
6341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
6351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED2(PredFunctor2(),
6361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
6371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++));
6381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
6391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
6401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
6411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
6421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED2 where the
6431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
6441be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED2Test, FunctionOnBuiltInTypeSuccess) {
6451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED2(PredFunction2Int,
6461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
6471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_);
6481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
6491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
6501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
6511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED2 where the
6521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
6531be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED2Test, FunctionOnUserTypeSuccess) {
6541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED2(PredFunction2Bool,
6551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
6561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_));
6571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
6581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
6591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
6601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED2 where the
6611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
6621be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED2Test, FunctorOnBuiltInTypeSuccess) {
6631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED2(PredFunctor2(),
6641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
6651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_);
6661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
6671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
6681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
6691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED2 where the
6701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
6711be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED2Test, FunctorOnUserTypeSuccess) {
6721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED2(PredFunctor2(),
6731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
6741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_));
6751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
6761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
6771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
6781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED2 where the
6791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
6801be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED2Test, FunctionOnBuiltInTypeFailure) {
6811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
6821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
6831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED2(PredFunction2Int,
6841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
6851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++);
6861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
6871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
6881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
6891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
6901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED2 where the
6911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
6921be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED2Test, FunctionOnUserTypeFailure) {
6931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
6941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
6951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED2(PredFunction2Bool,
6961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
6971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++));
6981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
6991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
7001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
7011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
7021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED2 where the
7031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
7041be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED2Test, FunctorOnBuiltInTypeFailure) {
7051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
7061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
7071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED2(PredFunctor2(),
7081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
7091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++);
7101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
7111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
7121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
7131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
7141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED2 where the
7151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
7161be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED2Test, FunctorOnUserTypeFailure) {
7171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
7181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
7191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED2(PredFunctor2(),
7201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
7211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++));
7221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
7231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
7241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
7251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
7261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT2 where the
7271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
7281be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnBuiltInTypeSuccess) {
7291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT2(PredFormatFunction2,
7301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
7311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_);
7321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
7331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
7341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
7351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT2 where the
7361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
7371be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnUserTypeSuccess) {
7381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT2(PredFormatFunction2,
7391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
7401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_));
7411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
7421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
7431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
7441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT2 where the
7451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
7461be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnBuiltInTypeSuccess) {
7471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT2(PredFormatFunctor2(),
7481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
7491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_);
7501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
7511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
7521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
7531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT2 where the
7541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
7551be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnUserTypeSuccess) {
7561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT2(PredFormatFunctor2(),
7571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
7581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_));
7591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
7601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
7611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
7621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT2 where the
7631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
7641be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnBuiltInTypeFailure) {
7651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
7661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT2(PredFormatFunction2,
7671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
7681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++);
7691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
7701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
7711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
7721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
7731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT2 where the
7741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
7751be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnUserTypeFailure) {
7761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
7771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT2(PredFormatFunction2,
7781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
7791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++));
7801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
7811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
7821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
7831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
7841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT2 where the
7851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
7861be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnBuiltInTypeFailure) {
7871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
7881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT2(PredFormatFunctor2(),
7891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
7901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++);
7911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
7921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
7931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
7941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
7951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT2 where the
7961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
7971be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnUserTypeFailure) {
7981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
7991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT2(PredFormatFunctor2(),
8001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
8011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++));
8021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
8031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
8041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
8051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
8061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT2 where the
8071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
8081be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnBuiltInTypeSuccess) {
8091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT2(PredFormatFunction2,
8101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
8111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_);
8121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
8131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
8141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
8151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT2 where the
8161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
8171be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnUserTypeSuccess) {
8181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT2(PredFormatFunction2,
8191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
8201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_));
8211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
8221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
8231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
8241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT2 where the
8251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
8261be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnBuiltInTypeSuccess) {
8271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT2(PredFormatFunctor2(),
8281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
8291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_);
8301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
8311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
8321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
8331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT2 where the
8341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
8351be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnUserTypeSuccess) {
8361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT2(PredFormatFunctor2(),
8371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
8381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_));
8391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
8401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
8411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
8421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT2 where the
8431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
8441be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnBuiltInTypeFailure) {
8451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
8461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
8471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT2(PredFormatFunction2,
8481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
8491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++);
8501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
8511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
8521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
8531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
8541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT2 where the
8551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
8561be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnUserTypeFailure) {
8571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
8581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
8591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT2(PredFormatFunction2,
8601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
8611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++));
8621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
8631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
8641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
8651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
8661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT2 where the
8671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
8681be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnBuiltInTypeFailure) {
8691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
8701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
8711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT2(PredFormatFunctor2(),
8721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
8731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++);
8741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
8751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
8761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
8771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
8781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT2 where the
8791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
8801be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnUserTypeFailure) {
8811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
8821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
8831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT2(PredFormatFunctor2(),
8841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
8851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++));
8861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
8871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
8881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
8891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Sample functions/functors for testing ternary predicate assertions.
8901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
8911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A ternary predicate function.
8921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T1, typename T2, typename T3>
8931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool PredFunction3(T1 v1, T2 v2, T3 v3) {
8941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return v1 + v2 + v3 > 0;
8951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
8961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
8971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The following two functions are needed to circumvent a bug in
8981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// gcc 2.95.3, which sometimes has problem with the above template
8991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// function.
9001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool PredFunction3Int(int v1, int v2, int v3) {
9011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return v1 + v2 + v3 > 0;
9021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
9031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool PredFunction3Bool(Bool v1, Bool v2, Bool v3) {
9041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return v1 + v2 + v3 > 0;
9051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
9061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
9071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A ternary predicate functor.
9081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct PredFunctor3 {
9091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  template <typename T1, typename T2, typename T3>
9101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  bool operator()(const T1& v1,
9111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                  const T2& v2,
9121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                  const T3& v3) {
9131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    return v1 + v2 + v3 > 0;
9141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
9151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
9161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
9171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A ternary predicate-formatter function.
9181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T1, typename T2, typename T3>
9191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatesting::AssertionResult PredFormatFunction3(const char* e1,
9201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const char* e2,
9211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const char* e3,
9221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const T1& v1,
9231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const T2& v2,
9241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const T3& v3) {
9251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  if (PredFunction3(v1, v2, v3))
9261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    return testing::AssertionSuccess();
9271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
92841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return testing::AssertionFailure()
92941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      << e1 << " + " << e2 << " + " << e3
9301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      << " is expected to be positive, but evaluates to "
9311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      << v1 + v2 + v3 << ".";
9321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
9331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
9341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A ternary predicate-formatter functor.
9351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct PredFormatFunctor3 {
9361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  template <typename T1, typename T2, typename T3>
9371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  testing::AssertionResult operator()(const char* e1,
9381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const char* e2,
9391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const char* e3,
9401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const T1& v1,
9411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const T2& v2,
9421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const T3& v3) const {
9431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    return PredFormatFunction3(e1, e2, e3, v1, v2, v3);
9441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
9451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
9461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
9471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests for {EXPECT|ASSERT}_PRED_FORMAT3.
9481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
9491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass Predicate3Test : public testing::Test {
9501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected:
9511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  virtual void SetUp() {
9521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    expected_to_finish_ = true;
9531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = false;
9541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    n1_ = n2_ = n3_ = 0;
9551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
9561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
9571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  virtual void TearDown() {
9581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    // Verifies that each of the predicate's arguments was evaluated
9591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    // exactly once.
9601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_EQ(1, n1_) <<
9611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "The predicate assertion didn't evaluate argument 2 "
9621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "exactly once.";
9631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_EQ(1, n2_) <<
9641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "The predicate assertion didn't evaluate argument 3 "
9651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "exactly once.";
9661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_EQ(1, n3_) <<
9671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "The predicate assertion didn't evaluate argument 4 "
9681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "exactly once.";
9691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
9701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    // Verifies that the control flow in the test function is expected.
9711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    if (expected_to_finish_ && !finished_) {
9721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      FAIL() << "The predicate assertion unexpactedly aborted the test.";
9731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    } else if (!expected_to_finish_ && finished_) {
9741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      FAIL() << "The failed predicate assertion didn't abort the test "
9751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                "as expected.";
9761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    }
9771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
9781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
9791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  // true iff the test function is expected to run to finish.
9801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static bool expected_to_finish_;
9811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
9821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  // true iff the test function did run to finish.
9831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static bool finished_;
9841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
9851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static int n1_;
9861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static int n2_;
9871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static int n3_;
9881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
9891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
9901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool Predicate3Test::expected_to_finish_;
9911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool Predicate3Test::finished_;
9921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint Predicate3Test::n1_;
9931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint Predicate3Test::n2_;
9941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint Predicate3Test::n3_;
9951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
9961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate3Test EXPECT_PRED_FORMAT3Test;
9971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate3Test ASSERT_PRED_FORMAT3Test;
9981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate3Test EXPECT_PRED3Test;
9991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate3Test ASSERT_PRED3Test;
10001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
10011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED3 where the
10021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
10031be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED3Test, FunctionOnBuiltInTypeSuccess) {
10041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED3(PredFunction3Int,
10051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
10061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_,
10071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n3_);
10081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
10091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
10101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
10111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED3 where the
10121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
10131be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED3Test, FunctionOnUserTypeSuccess) {
10141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED3(PredFunction3Bool,
10151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
10161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_),
10171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n3_));
10181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
10191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
10201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
10211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED3 where the
10221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
10231be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED3Test, FunctorOnBuiltInTypeSuccess) {
10241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED3(PredFunctor3(),
10251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
10261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_,
10271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n3_);
10281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
10291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
10301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
10311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED3 where the
10321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
10331be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED3Test, FunctorOnUserTypeSuccess) {
10341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED3(PredFunctor3(),
10351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
10361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_),
10371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n3_));
10381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
10391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
10401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
10411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED3 where the
10421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
10431be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED3Test, FunctionOnBuiltInTypeFailure) {
10441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
10451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED3(PredFunction3Int,
10461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
10471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++,
10481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n3_++);
10491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
10501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
10511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
10521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
10531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED3 where the
10541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
10551be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED3Test, FunctionOnUserTypeFailure) {
10561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
10571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED3(PredFunction3Bool,
10581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
10591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++),
10601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n3_++));
10611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
10621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
10631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
10641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
10651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED3 where the
10661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
10671be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED3Test, FunctorOnBuiltInTypeFailure) {
10681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
10691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED3(PredFunctor3(),
10701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
10711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++,
10721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n3_++);
10731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
10741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
10751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
10761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
10771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED3 where the
10781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
10791be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED3Test, FunctorOnUserTypeFailure) {
10801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
10811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED3(PredFunctor3(),
10821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
10831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++),
10841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n3_++));
10851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
10861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
10871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
10881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
10891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED3 where the
10901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
10911be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED3Test, FunctionOnBuiltInTypeSuccess) {
10921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED3(PredFunction3Int,
10931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
10941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_,
10951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n3_);
10961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
10971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
10981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
10991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED3 where the
11001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
11011be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED3Test, FunctionOnUserTypeSuccess) {
11021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED3(PredFunction3Bool,
11031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
11041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_),
11051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n3_));
11061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
11071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
11081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
11091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED3 where the
11101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
11111be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED3Test, FunctorOnBuiltInTypeSuccess) {
11121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED3(PredFunctor3(),
11131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
11141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_,
11151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n3_);
11161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
11171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
11181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
11191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED3 where the
11201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
11211be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED3Test, FunctorOnUserTypeSuccess) {
11221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED3(PredFunctor3(),
11231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
11241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_),
11251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n3_));
11261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
11271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
11281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
11291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED3 where the
11301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
11311be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED3Test, FunctionOnBuiltInTypeFailure) {
11321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
11331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
11341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED3(PredFunction3Int,
11351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
11361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++,
11371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n3_++);
11381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
11391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
11401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
11411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
11421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED3 where the
11431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
11441be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED3Test, FunctionOnUserTypeFailure) {
11451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
11461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
11471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED3(PredFunction3Bool,
11481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
11491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++),
11501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n3_++));
11511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
11521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
11531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
11541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
11551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED3 where the
11561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
11571be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED3Test, FunctorOnBuiltInTypeFailure) {
11581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
11591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
11601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED3(PredFunctor3(),
11611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
11621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++,
11631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n3_++);
11641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
11651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
11661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
11671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
11681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED3 where the
11691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
11701be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED3Test, FunctorOnUserTypeFailure) {
11711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
11721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
11731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED3(PredFunctor3(),
11741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
11751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++),
11761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n3_++));
11771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
11781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
11791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
11801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
11811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT3 where the
11821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
11831be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnBuiltInTypeSuccess) {
11841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT3(PredFormatFunction3,
11851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
11861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_,
11871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n3_);
11881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
11891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
11901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
11911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT3 where the
11921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
11931be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnUserTypeSuccess) {
11941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT3(PredFormatFunction3,
11951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
11961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_),
11971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n3_));
11981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
11991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
12001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
12011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT3 where the
12021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
12031be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnBuiltInTypeSuccess) {
12041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT3(PredFormatFunctor3(),
12051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
12061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_,
12071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n3_);
12081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
12091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
12101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
12111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT3 where the
12121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
12131be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnUserTypeSuccess) {
12141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT3(PredFormatFunctor3(),
12151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
12161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_),
12171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n3_));
12181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
12191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
12201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
12211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT3 where the
12221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
12231be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnBuiltInTypeFailure) {
12241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
12251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT3(PredFormatFunction3,
12261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
12271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++,
12281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n3_++);
12291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
12301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
12311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
12321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
12331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT3 where the
12341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
12351be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnUserTypeFailure) {
12361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
12371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT3(PredFormatFunction3,
12381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
12391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++),
12401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n3_++));
12411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
12421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
12431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
12441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
12451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT3 where the
12461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
12471be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnBuiltInTypeFailure) {
12481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
12491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT3(PredFormatFunctor3(),
12501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
12511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++,
12521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n3_++);
12531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
12541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
12551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
12561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
12571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT3 where the
12581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
12591be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnUserTypeFailure) {
12601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
12611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT3(PredFormatFunctor3(),
12621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
12631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++),
12641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n3_++));
12651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
12661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
12671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
12681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
12691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT3 where the
12701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
12711be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnBuiltInTypeSuccess) {
12721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT3(PredFormatFunction3,
12731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
12741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_,
12751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n3_);
12761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
12771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
12781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
12791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT3 where the
12801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
12811be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnUserTypeSuccess) {
12821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT3(PredFormatFunction3,
12831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
12841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_),
12851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n3_));
12861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
12871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
12881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
12891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT3 where the
12901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
12911be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnBuiltInTypeSuccess) {
12921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT3(PredFormatFunctor3(),
12931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
12941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_,
12951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n3_);
12961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
12971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
12981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
12991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT3 where the
13001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
13011be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnUserTypeSuccess) {
13021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT3(PredFormatFunctor3(),
13031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
13041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_),
13051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n3_));
13061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
13071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
13081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
13091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT3 where the
13101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
13111be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnBuiltInTypeFailure) {
13121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
13131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
13141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT3(PredFormatFunction3,
13151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
13161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++,
13171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n3_++);
13181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
13191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
13201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
13211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
13221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT3 where the
13231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
13241be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnUserTypeFailure) {
13251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
13261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
13271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT3(PredFormatFunction3,
13281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
13291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++),
13301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n3_++));
13311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
13321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
13331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
13341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
13351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT3 where the
13361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
13371be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnBuiltInTypeFailure) {
13381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
13391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
13401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT3(PredFormatFunctor3(),
13411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
13421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++,
13431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n3_++);
13441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
13451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
13461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
13471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
13481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT3 where the
13491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
13501be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnUserTypeFailure) {
13511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
13521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
13531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT3(PredFormatFunctor3(),
13541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
13551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++),
13561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n3_++));
13571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
13581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
13591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
13601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Sample functions/functors for testing 4-ary predicate assertions.
13611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
13621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A 4-ary predicate function.
13631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T1, typename T2, typename T3, typename T4>
13641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool PredFunction4(T1 v1, T2 v2, T3 v3, T4 v4) {
13651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return v1 + v2 + v3 + v4 > 0;
13661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
13671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
13681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The following two functions are needed to circumvent a bug in
13691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// gcc 2.95.3, which sometimes has problem with the above template
13701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// function.
13711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool PredFunction4Int(int v1, int v2, int v3, int v4) {
13721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return v1 + v2 + v3 + v4 > 0;
13731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
13741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool PredFunction4Bool(Bool v1, Bool v2, Bool v3, Bool v4) {
13751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return v1 + v2 + v3 + v4 > 0;
13761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
13771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
13781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A 4-ary predicate functor.
13791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct PredFunctor4 {
13801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  template <typename T1, typename T2, typename T3, typename T4>
13811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  bool operator()(const T1& v1,
13821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                  const T2& v2,
13831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                  const T3& v3,
13841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                  const T4& v4) {
13851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    return v1 + v2 + v3 + v4 > 0;
13861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
13871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
13881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
13891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A 4-ary predicate-formatter function.
13901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T1, typename T2, typename T3, typename T4>
13911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatesting::AssertionResult PredFormatFunction4(const char* e1,
13921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const char* e2,
13931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const char* e3,
13941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const char* e4,
13951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const T1& v1,
13961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const T2& v2,
13971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const T3& v3,
13981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const T4& v4) {
13991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  if (PredFunction4(v1, v2, v3, v4))
14001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    return testing::AssertionSuccess();
14011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
140241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return testing::AssertionFailure()
140341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      << e1 << " + " << e2 << " + " << e3 << " + " << e4
14041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      << " is expected to be positive, but evaluates to "
14051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      << v1 + v2 + v3 + v4 << ".";
14061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
14071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
14081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A 4-ary predicate-formatter functor.
14091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct PredFormatFunctor4 {
14101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  template <typename T1, typename T2, typename T3, typename T4>
14111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  testing::AssertionResult operator()(const char* e1,
14121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const char* e2,
14131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const char* e3,
14141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const char* e4,
14151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const T1& v1,
14161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const T2& v2,
14171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const T3& v3,
14181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const T4& v4) const {
14191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    return PredFormatFunction4(e1, e2, e3, e4, v1, v2, v3, v4);
14201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
14211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
14221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
14231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests for {EXPECT|ASSERT}_PRED_FORMAT4.
14241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
14251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass Predicate4Test : public testing::Test {
14261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected:
14271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  virtual void SetUp() {
14281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    expected_to_finish_ = true;
14291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = false;
14301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    n1_ = n2_ = n3_ = n4_ = 0;
14311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
14321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
14331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  virtual void TearDown() {
14341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    // Verifies that each of the predicate's arguments was evaluated
14351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    // exactly once.
14361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_EQ(1, n1_) <<
14371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "The predicate assertion didn't evaluate argument 2 "
14381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "exactly once.";
14391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_EQ(1, n2_) <<
14401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "The predicate assertion didn't evaluate argument 3 "
14411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "exactly once.";
14421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_EQ(1, n3_) <<
14431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "The predicate assertion didn't evaluate argument 4 "
14441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "exactly once.";
14451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_EQ(1, n4_) <<
14461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "The predicate assertion didn't evaluate argument 5 "
14471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "exactly once.";
14481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
14491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    // Verifies that the control flow in the test function is expected.
14501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    if (expected_to_finish_ && !finished_) {
14511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      FAIL() << "The predicate assertion unexpactedly aborted the test.";
14521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    } else if (!expected_to_finish_ && finished_) {
14531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      FAIL() << "The failed predicate assertion didn't abort the test "
14541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                "as expected.";
14551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    }
14561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
14571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
14581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  // true iff the test function is expected to run to finish.
14591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static bool expected_to_finish_;
14601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
14611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  // true iff the test function did run to finish.
14621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static bool finished_;
14631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
14641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static int n1_;
14651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static int n2_;
14661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static int n3_;
14671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static int n4_;
14681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
14691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
14701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool Predicate4Test::expected_to_finish_;
14711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool Predicate4Test::finished_;
14721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint Predicate4Test::n1_;
14731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint Predicate4Test::n2_;
14741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint Predicate4Test::n3_;
14751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint Predicate4Test::n4_;
14761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
14771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate4Test EXPECT_PRED_FORMAT4Test;
14781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate4Test ASSERT_PRED_FORMAT4Test;
14791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate4Test EXPECT_PRED4Test;
14801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate4Test ASSERT_PRED4Test;
14811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
14821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED4 where the
14831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
14841be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED4Test, FunctionOnBuiltInTypeSuccess) {
14851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED4(PredFunction4Int,
14861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
14871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_,
14881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n3_,
14891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n4_);
14901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
14911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
14921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
14931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED4 where the
14941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
14951be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED4Test, FunctionOnUserTypeSuccess) {
14961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED4(PredFunction4Bool,
14971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
14981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_),
14991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n3_),
15001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n4_));
15011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
15021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
15031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
15041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED4 where the
15051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
15061be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED4Test, FunctorOnBuiltInTypeSuccess) {
15071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED4(PredFunctor4(),
15081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
15091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_,
15101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n3_,
15111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n4_);
15121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
15131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
15141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
15151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED4 where the
15161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
15171be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED4Test, FunctorOnUserTypeSuccess) {
15181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED4(PredFunctor4(),
15191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
15201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_),
15211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n3_),
15221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n4_));
15231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
15241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
15251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
15261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED4 where the
15271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
15281be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED4Test, FunctionOnBuiltInTypeFailure) {
15291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
15301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED4(PredFunction4Int,
15311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
15321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++,
15331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n3_++,
15341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n4_++);
15351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
15361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
15371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
15381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
15391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED4 where the
15401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
15411be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED4Test, FunctionOnUserTypeFailure) {
15421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
15431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED4(PredFunction4Bool,
15441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
15451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++),
15461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n3_++),
15471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n4_++));
15481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
15491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
15501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
15511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
15521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED4 where the
15531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
15541be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED4Test, FunctorOnBuiltInTypeFailure) {
15551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
15561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED4(PredFunctor4(),
15571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
15581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++,
15591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n3_++,
15601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n4_++);
15611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
15621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
15631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
15641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
15651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED4 where the
15661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
15671be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED4Test, FunctorOnUserTypeFailure) {
15681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
15691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED4(PredFunctor4(),
15701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
15711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++),
15721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n3_++),
15731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n4_++));
15741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
15751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
15761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
15771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
15781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED4 where the
15791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
15801be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED4Test, FunctionOnBuiltInTypeSuccess) {
15811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED4(PredFunction4Int,
15821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
15831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_,
15841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n3_,
15851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n4_);
15861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
15871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
15881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
15891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED4 where the
15901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
15911be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED4Test, FunctionOnUserTypeSuccess) {
15921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED4(PredFunction4Bool,
15931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
15941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_),
15951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n3_),
15961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n4_));
15971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
15981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
15991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
16001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED4 where the
16011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
16021be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED4Test, FunctorOnBuiltInTypeSuccess) {
16031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED4(PredFunctor4(),
16041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
16051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_,
16061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n3_,
16071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n4_);
16081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
16091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
16101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
16111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED4 where the
16121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
16131be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED4Test, FunctorOnUserTypeSuccess) {
16141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED4(PredFunctor4(),
16151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
16161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_),
16171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n3_),
16181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n4_));
16191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
16201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
16211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
16221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED4 where the
16231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
16241be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED4Test, FunctionOnBuiltInTypeFailure) {
16251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
16261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
16271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED4(PredFunction4Int,
16281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
16291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++,
16301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n3_++,
16311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n4_++);
16321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
16331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
16341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
16351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
16361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED4 where the
16371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
16381be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED4Test, FunctionOnUserTypeFailure) {
16391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
16401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
16411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED4(PredFunction4Bool,
16421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
16431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++),
16441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n3_++),
16451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n4_++));
16461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
16471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
16481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
16491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
16501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED4 where the
16511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
16521be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED4Test, FunctorOnBuiltInTypeFailure) {
16531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
16541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
16551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED4(PredFunctor4(),
16561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
16571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++,
16581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n3_++,
16591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n4_++);
16601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
16611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
16621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
16631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
16641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED4 where the
16651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
16661be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED4Test, FunctorOnUserTypeFailure) {
16671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
16681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
16691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED4(PredFunctor4(),
16701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
16711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++),
16721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n3_++),
16731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n4_++));
16741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
16751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
16761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
16771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
16781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT4 where the
16791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
16801be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnBuiltInTypeSuccess) {
16811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT4(PredFormatFunction4,
16821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
16831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_,
16841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n3_,
16851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n4_);
16861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
16871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
16881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
16891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT4 where the
16901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
16911be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnUserTypeSuccess) {
16921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT4(PredFormatFunction4,
16931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
16941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_),
16951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n3_),
16961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n4_));
16971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
16981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
16991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
17001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT4 where the
17011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
17021be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnBuiltInTypeSuccess) {
17031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT4(PredFormatFunctor4(),
17041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
17051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_,
17061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n3_,
17071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n4_);
17081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
17091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
17101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
17111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT4 where the
17121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
17131be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnUserTypeSuccess) {
17141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT4(PredFormatFunctor4(),
17151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
17161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_),
17171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n3_),
17181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n4_));
17191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
17201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
17211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
17221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT4 where the
17231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
17241be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnBuiltInTypeFailure) {
17251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
17261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT4(PredFormatFunction4,
17271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
17281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++,
17291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n3_++,
17301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n4_++);
17311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
17321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
17331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
17341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
17351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT4 where the
17361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
17371be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnUserTypeFailure) {
17381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
17391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT4(PredFormatFunction4,
17401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
17411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++),
17421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n3_++),
17431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n4_++));
17441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
17451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
17461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
17471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
17481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT4 where the
17491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
17501be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnBuiltInTypeFailure) {
17511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
17521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT4(PredFormatFunctor4(),
17531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
17541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++,
17551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n3_++,
17561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n4_++);
17571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
17581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
17591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
17601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
17611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT4 where the
17621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
17631be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnUserTypeFailure) {
17641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
17651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT4(PredFormatFunctor4(),
17661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
17671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++),
17681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n3_++),
17691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n4_++));
17701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
17711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
17721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
17731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
17741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT4 where the
17751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
17761be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnBuiltInTypeSuccess) {
17771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT4(PredFormatFunction4,
17781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
17791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_,
17801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n3_,
17811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n4_);
17821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
17831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
17841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
17851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT4 where the
17861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
17871be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnUserTypeSuccess) {
17881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT4(PredFormatFunction4,
17891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
17901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_),
17911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n3_),
17921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n4_));
17931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
17941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
17951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
17961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT4 where the
17971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
17981be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnBuiltInTypeSuccess) {
17991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT4(PredFormatFunctor4(),
18001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
18011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_,
18021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n3_,
18031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n4_);
18041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
18051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
18061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
18071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT4 where the
18081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
18091be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnUserTypeSuccess) {
18101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT4(PredFormatFunctor4(),
18111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
18121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_),
18131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n3_),
18141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n4_));
18151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
18161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
18171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
18181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT4 where the
18191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
18201be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnBuiltInTypeFailure) {
18211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
18221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
18231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT4(PredFormatFunction4,
18241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
18251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++,
18261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n3_++,
18271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n4_++);
18281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
18291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
18301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
18311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
18321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT4 where the
18331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
18341be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnUserTypeFailure) {
18351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
18361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
18371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT4(PredFormatFunction4,
18381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
18391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++),
18401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n3_++),
18411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n4_++));
18421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
18431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
18441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
18451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
18461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT4 where the
18471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
18481be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnBuiltInTypeFailure) {
18491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
18501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
18511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT4(PredFormatFunctor4(),
18521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
18531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++,
18541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n3_++,
18551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n4_++);
18561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
18571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
18581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
18591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
18601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT4 where the
18611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
18621be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnUserTypeFailure) {
18631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
18641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
18651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT4(PredFormatFunctor4(),
18661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
18671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++),
18681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n3_++),
18691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n4_++));
18701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
18711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
18721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
18731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Sample functions/functors for testing 5-ary predicate assertions.
18741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
18751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A 5-ary predicate function.
18761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T1, typename T2, typename T3, typename T4, typename T5>
18771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool PredFunction5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) {
18781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return v1 + v2 + v3 + v4 + v5 > 0;
18791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
18801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
18811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The following two functions are needed to circumvent a bug in
18821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// gcc 2.95.3, which sometimes has problem with the above template
18831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// function.
18841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool PredFunction5Int(int v1, int v2, int v3, int v4, int v5) {
18851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return v1 + v2 + v3 + v4 + v5 > 0;
18861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
18871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool PredFunction5Bool(Bool v1, Bool v2, Bool v3, Bool v4, Bool v5) {
18881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  return v1 + v2 + v3 + v4 + v5 > 0;
18891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
18901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
18911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A 5-ary predicate functor.
18921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct PredFunctor5 {
18931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  template <typename T1, typename T2, typename T3, typename T4, typename T5>
18941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  bool operator()(const T1& v1,
18951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                  const T2& v2,
18961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                  const T3& v3,
18971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                  const T4& v4,
18981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                  const T5& v5) {
18991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    return v1 + v2 + v3 + v4 + v5 > 0;
19001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
19011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
19021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
19031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A 5-ary predicate-formatter function.
19041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T1, typename T2, typename T3, typename T4, typename T5>
19051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatesting::AssertionResult PredFormatFunction5(const char* e1,
19061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const char* e2,
19071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const char* e3,
19081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const char* e4,
19091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const char* e5,
19101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const T1& v1,
19111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const T2& v2,
19121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const T3& v3,
19131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const T4& v4,
19141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                             const T5& v5) {
19151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  if (PredFunction5(v1, v2, v3, v4, v5))
19161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    return testing::AssertionSuccess();
19171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
191841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return testing::AssertionFailure()
191941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " + " << e5
19201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      << " is expected to be positive, but evaluates to "
19211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      << v1 + v2 + v3 + v4 + v5 << ".";
19221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
19231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
19241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A 5-ary predicate-formatter functor.
19251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct PredFormatFunctor5 {
19261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  template <typename T1, typename T2, typename T3, typename T4, typename T5>
19271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  testing::AssertionResult operator()(const char* e1,
19281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const char* e2,
19291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const char* e3,
19301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const char* e4,
19311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const char* e5,
19321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const T1& v1,
19331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const T2& v2,
19341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const T3& v3,
19351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const T4& v4,
19361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                                      const T5& v5) const {
19371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    return PredFormatFunction5(e1, e2, e3, e4, e5, v1, v2, v3, v4, v5);
19381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
19391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
19401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
19411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests for {EXPECT|ASSERT}_PRED_FORMAT5.
19421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
19431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass Predicate5Test : public testing::Test {
19441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania protected:
19451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  virtual void SetUp() {
19461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    expected_to_finish_ = true;
19471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = false;
19481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    n1_ = n2_ = n3_ = n4_ = n5_ = 0;
19491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
19501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
19511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  virtual void TearDown() {
19521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    // Verifies that each of the predicate's arguments was evaluated
19531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    // exactly once.
19541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_EQ(1, n1_) <<
19551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "The predicate assertion didn't evaluate argument 2 "
19561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "exactly once.";
19571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_EQ(1, n2_) <<
19581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "The predicate assertion didn't evaluate argument 3 "
19591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "exactly once.";
19601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_EQ(1, n3_) <<
19611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "The predicate assertion didn't evaluate argument 4 "
19621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "exactly once.";
19631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_EQ(1, n4_) <<
19641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "The predicate assertion didn't evaluate argument 5 "
19651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "exactly once.";
19661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_EQ(1, n5_) <<
19671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "The predicate assertion didn't evaluate argument 6 "
19681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania        "exactly once.";
19691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
19701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    // Verifies that the control flow in the test function is expected.
19711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    if (expected_to_finish_ && !finished_) {
19721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      FAIL() << "The predicate assertion unexpactedly aborted the test.";
19731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    } else if (!expected_to_finish_ && finished_) {
19741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania      FAIL() << "The failed predicate assertion didn't abort the test "
19751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                "as expected.";
19761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    }
19771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }
19781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
19791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  // true iff the test function is expected to run to finish.
19801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static bool expected_to_finish_;
19811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
19821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  // true iff the test function did run to finish.
19831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static bool finished_;
19841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
19851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static int n1_;
19861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static int n2_;
19871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static int n3_;
19881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static int n4_;
19891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  static int n5_;
19901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania};
19911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
19921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool Predicate5Test::expected_to_finish_;
19931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool Predicate5Test::finished_;
19941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint Predicate5Test::n1_;
19951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint Predicate5Test::n2_;
19961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint Predicate5Test::n3_;
19971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint Predicate5Test::n4_;
19981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaint Predicate5Test::n5_;
19991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
20001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate5Test EXPECT_PRED_FORMAT5Test;
20011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate5Test ASSERT_PRED_FORMAT5Test;
20021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate5Test EXPECT_PRED5Test;
20031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef Predicate5Test ASSERT_PRED5Test;
20041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
20051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED5 where the
20061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
20071be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED5Test, FunctionOnBuiltInTypeSuccess) {
20081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED5(PredFunction5Int,
20091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
20101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_,
20111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n3_,
20121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n4_,
20131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n5_);
20141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
20151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
20161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
20171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED5 where the
20181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
20191be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED5Test, FunctionOnUserTypeSuccess) {
20201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED5(PredFunction5Bool,
20211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
20221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_),
20231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n3_),
20241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n4_),
20251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n5_));
20261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
20271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
20281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
20291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED5 where the
20301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
20311be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED5Test, FunctorOnBuiltInTypeSuccess) {
20321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED5(PredFunctor5(),
20331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
20341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_,
20351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n3_,
20361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n4_,
20371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n5_);
20381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
20391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
20401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
20411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED5 where the
20421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
20431be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED5Test, FunctorOnUserTypeSuccess) {
20441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED5(PredFunctor5(),
20451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
20461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_),
20471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n3_),
20481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n4_),
20491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n5_));
20501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
20511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
20521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
20531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED5 where the
20541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
20551be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED5Test, FunctionOnBuiltInTypeFailure) {
20561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
20571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED5(PredFunction5Int,
20581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
20591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++,
20601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n3_++,
20611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n4_++,
20621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n5_++);
20631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
20641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
20651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
20661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
20671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED5 where the
20681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
20691be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED5Test, FunctionOnUserTypeFailure) {
20701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
20711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED5(PredFunction5Bool,
20721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
20731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++),
20741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n3_++),
20751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n4_++),
20761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n5_++));
20771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
20781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
20791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
20801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
20811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED5 where the
20821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
20831be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED5Test, FunctorOnBuiltInTypeFailure) {
20841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
20851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED5(PredFunctor5(),
20861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
20871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++,
20881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n3_++,
20891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n4_++,
20901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n5_++);
20911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
20921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
20931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
20941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
20951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED5 where the
20961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
20971be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED5Test, FunctorOnUserTypeFailure) {
20981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
20991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED5(PredFunctor5(),
21001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
21011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++),
21021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n3_++),
21031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n4_++),
21041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n5_++));
21051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
21061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
21071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
21081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
21091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED5 where the
21101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
21111be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED5Test, FunctionOnBuiltInTypeSuccess) {
21121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED5(PredFunction5Int,
21131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
21141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_,
21151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n3_,
21161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n4_,
21171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n5_);
21181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
21191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
21201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
21211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED5 where the
21221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
21231be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED5Test, FunctionOnUserTypeSuccess) {
21241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED5(PredFunction5Bool,
21251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
21261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_),
21271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n3_),
21281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n4_),
21291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n5_));
21301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
21311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
21321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
21331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED5 where the
21341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
21351be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED5Test, FunctorOnBuiltInTypeSuccess) {
21361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED5(PredFunctor5(),
21371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n1_,
21381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n2_,
21391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n3_,
21401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n4_,
21411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               ++n5_);
21421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
21431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
21441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
21451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED5 where the
21461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
21471be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED5Test, FunctorOnUserTypeSuccess) {
21481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED5(PredFunctor5(),
21491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n1_),
21501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n2_),
21511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n3_),
21521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n4_),
21531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania               Bool(++n5_));
21541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
21551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
21561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
21571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED5 where the
21581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
21591be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED5Test, FunctionOnBuiltInTypeFailure) {
21601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
21611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
21621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED5(PredFunction5Int,
21631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
21641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++,
21651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n3_++,
21661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n4_++,
21671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n5_++);
21681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
21691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
21701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
21711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
21721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED5 where the
21731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
21741be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED5Test, FunctionOnUserTypeFailure) {
21751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
21761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
21771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED5(PredFunction5Bool,
21781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
21791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++),
21801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n3_++),
21811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n4_++),
21821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n5_++));
21831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
21841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
21851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
21861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
21871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED5 where the
21881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
21891be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED5Test, FunctorOnBuiltInTypeFailure) {
21901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
21911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
21921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED5(PredFunctor5(),
21931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n1_++,
21941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n2_++,
21951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n3_++,
21961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n4_++,
21971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 n5_++);
21981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
21991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
22001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
22011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
22021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED5 where the
22031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
22041be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED5Test, FunctorOnUserTypeFailure) {
22051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
22061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
22071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED5(PredFunctor5(),
22081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n1_++),
22091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n2_++),
22101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n3_++),
22111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n4_++),
22121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                 Bool(n5_++));
22131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
22141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
22151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
22161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
22171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT5 where the
22181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
22191be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnBuiltInTypeSuccess) {
22201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT5(PredFormatFunction5,
22211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
22221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_,
22231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n3_,
22241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n4_,
22251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n5_);
22261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
22271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
22281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
22291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT5 where the
22301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
22311be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnUserTypeSuccess) {
22321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT5(PredFormatFunction5,
22331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
22341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_),
22351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n3_),
22361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n4_),
22371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n5_));
22381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
22391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
22401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
22411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT5 where the
22421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
22431be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnBuiltInTypeSuccess) {
22441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT5(PredFormatFunctor5(),
22451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
22461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_,
22471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n3_,
22481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n4_,
22491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n5_);
22501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
22511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
22521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
22531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful EXPECT_PRED_FORMAT5 where the
22541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
22551be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnUserTypeSuccess) {
22561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_PRED_FORMAT5(PredFormatFunctor5(),
22571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
22581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_),
22591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n3_),
22601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n4_),
22611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n5_));
22621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
22631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
22641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
22651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT5 where the
22661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
22671be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnBuiltInTypeFailure) {
22681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
22691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT5(PredFormatFunction5,
22701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
22711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++,
22721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n3_++,
22731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n4_++,
22741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n5_++);
22751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
22761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
22771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
22781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
22791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT5 where the
22801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
22811be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnUserTypeFailure) {
22821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
22831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT5(PredFormatFunction5,
22841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
22851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++),
22861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n3_++),
22871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n4_++),
22881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n5_++));
22891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
22901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
22911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
22921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
22931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT5 where the
22941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
22951be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnBuiltInTypeFailure) {
22961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
22971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT5(PredFormatFunctor5(),
22981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
22991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++,
23001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n3_++,
23011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n4_++,
23021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n5_++);
23031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
23041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
23051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
23061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
23071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed EXPECT_PRED_FORMAT5 where the
23081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
23091be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnUserTypeFailure) {
23101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_NONFATAL_FAILURE({  // NOLINT
23111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    EXPECT_PRED_FORMAT5(PredFormatFunctor5(),
23121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
23131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++),
23141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n3_++),
23151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n4_++),
23161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n5_++));
23171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
23181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
23191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
23201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
23211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT5 where the
23221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
23231be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnBuiltInTypeSuccess) {
23241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT5(PredFormatFunction5,
23251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
23261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_,
23271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n3_,
23281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n4_,
23291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n5_);
23301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
23311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
23321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
23331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT5 where the
23341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
23351be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnUserTypeSuccess) {
23361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT5(PredFormatFunction5,
23371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
23381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_),
23391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n3_),
23401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n4_),
23411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n5_));
23421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
23431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
23441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
23451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT5 where the
23461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
23471be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnBuiltInTypeSuccess) {
23481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT5(PredFormatFunctor5(),
23491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n1_,
23501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n2_,
23511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n3_,
23521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n4_,
23531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      ++n5_);
23541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
23551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
23561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
23571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a successful ASSERT_PRED_FORMAT5 where the
23581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
23591be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnUserTypeSuccess) {
23601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  ASSERT_PRED_FORMAT5(PredFormatFunctor5(),
23611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n1_),
23621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n2_),
23631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n3_),
23641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n4_),
23651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                      Bool(++n5_));
23661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  finished_ = true;
23671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
23681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
23691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT5 where the
23701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a built-in type (int).
23711be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnBuiltInTypeFailure) {
23721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
23731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
23741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT5(PredFormatFunction5,
23751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
23761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++,
23771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n3_++,
23781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n4_++,
23791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n5_++);
23801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
23811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
23821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
23831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
23841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT5 where the
23851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a function on a user-defined type (Bool).
23861be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnUserTypeFailure) {
23871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
23881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
23891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT5(PredFormatFunction5,
23901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
23911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++),
23921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n3_++),
23931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n4_++),
23941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n5_++));
23951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
23961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
23971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
23981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
23991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT5 where the
24001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a built-in type (int).
24011be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnBuiltInTypeFailure) {
24021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
24031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
24041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT5(PredFormatFunctor5(),
24051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n1_++,
24061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n2_++,
24071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n3_++,
24081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n4_++,
24091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        n5_++);
24101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
24111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
24121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
24131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania
24141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tests a failed ASSERT_PRED_FORMAT5 where the
24151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// predicate-formatter is a functor on a user-defined type (Bool).
24161be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaTEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnUserTypeFailure) {
24171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  expected_to_finish_ = false;
24181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  EXPECT_FATAL_FAILURE({  // NOLINT
24191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    ASSERT_PRED_FORMAT5(PredFormatFunctor5(),
24201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n1_++),
24211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n2_++),
24221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n3_++),
24231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n4_++),
24241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania                        Bool(n5_++));
24251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania    finished_ = true;
24261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania  }, "");
24271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}
2428