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