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