source: gtest-1.7.0/test/gtest_pred_impl_unittest.cc@ 12761

Last change on this file since 12761 was 12746, checked in by hock@…, 11 years ago

integrated the Google Testing Framework (gtest)

and wrote an Hello World test, to ensure the framework is working..

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