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