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