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