1dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Copyright 2006, Google Inc.
2dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// All rights reserved.
3dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
4dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Redistribution and use in source and binary forms, with or without
5dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// modification, are permitted provided that the following conditions are
6dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// met:
7dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
8dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//     * Redistributions of source code must retain the above copyright
9dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// notice, this list of conditions and the following disclaimer.
10dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//     * Redistributions in binary form must reproduce the above
11dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// copyright notice, this list of conditions and the following disclaimer
12dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// in the documentation and/or other materials provided with the
13dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// distribution.
14dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//     * Neither the name of Google Inc. nor the names of its
15dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// contributors may be used to endorse or promote products derived from
16dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this software without specific prior written permission.
17dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
18dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
3046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// This file is AUTOMATICALLY GENERATED on 10/31/2011 by command
31dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 'gen_gtest_pred_impl.py 5'.  DO NOT EDIT BY HAND!
32dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
33dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Implements a family of generic predicate assertion macros.
34dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
35dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
36dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
37dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
38dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Makes sure this header is not included before gtest.h.
39dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#ifndef GTEST_INCLUDE_GTEST_GTEST_H_
4046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# error Do not include gtest_pred_impl.h directly.  Include gtest.h instead.
41dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#endif  // GTEST_INCLUDE_GTEST_GTEST_H_
42dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
43dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// This header implements a family of generic predicate assertion
44dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// macros:
45dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
46dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//   ASSERT_PRED_FORMAT1(pred_format, v1)
47dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//   ASSERT_PRED_FORMAT2(pred_format, v1, v2)
48dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//   ...
49dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
50dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// where pred_format is a function or functor that takes n (in the
51dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// case of ASSERT_PRED_FORMATn) values and their source expression
52dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// text, and returns a testing::AssertionResult.  See the definition
53dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// of ASSERT_EQ in gtest.h for an example.
54dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
55dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// If you don't care about formatting, you can use the more
56dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// restrictive version:
57dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
58dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//   ASSERT_PRED1(pred, v1)
59dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//   ASSERT_PRED2(pred, v1, v2)
60dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//   ...
61dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
62dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// where pred is an n-ary function or functor that returns bool,
63dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// and the values v1, v2, ..., must support the << operator for
64dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// streaming to std::ostream.
65dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
66dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// We also define the EXPECT_* variations.
67dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
68dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// For now we only support predicates whose arity is at most 5.
69dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Please email googletestframework@googlegroups.com if you need
70dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// support for higher arities.
71dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
72dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// GTEST_ASSERT_ is the basic statement to which all of the assertions
73dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// in this file reduce.  Don't use this in your code.
74dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
75dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_ASSERT_(expression, on_failure) \
76dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
77dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  if (const ::testing::AssertionResult gtest_ar = (expression)) \
78dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter    ; \
79dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  else \
80dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter    on_failure(gtest_ar.failure_message())
81dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
82dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
83dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Helper function for implementing {EXPECT|ASSERT}_PRED1.  Don't use
84dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this in your code.
85dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename Pred,
86dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter          typename T1>
87dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterAssertionResult AssertPred1Helper(const char* pred_text,
88dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const char* e1,
89dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  Pred pred,
90dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const T1& v1) {
91dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  if (pred(v1)) return AssertionSuccess();
92dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
9346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  return AssertionFailure() << pred_text << "("
9446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << e1 << ") evaluates to false, where"
9546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << "\n" << e1 << " evaluates to " << v1;
96dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
97dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
98dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1.
99dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Don't use this in your code.
100dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\
10146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  GTEST_ASSERT_(pred_format(#v1, v1), \
102dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                on_failure)
103dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
104dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Internal macro for implementing {EXPECT|ASSERT}_PRED1.  Don't use
105dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this in your code.
106dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_PRED1_(pred, v1, on_failure)\
107dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \
108dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             #v1, \
109dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             pred, \
110dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             v1), on_failure)
111dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
112dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Unary predicate assertion macros.
113dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define EXPECT_PRED_FORMAT1(pred_format, v1) \
114dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_)
115dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define EXPECT_PRED1(pred, v1) \
116dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_)
117dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define ASSERT_PRED_FORMAT1(pred_format, v1) \
118dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_)
119dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define ASSERT_PRED1(pred, v1) \
120dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_)
121dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
122dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
123dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
124dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Helper function for implementing {EXPECT|ASSERT}_PRED2.  Don't use
125dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this in your code.
126dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename Pred,
127dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter          typename T1,
128dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter          typename T2>
129dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterAssertionResult AssertPred2Helper(const char* pred_text,
130dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const char* e1,
131dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const char* e2,
132dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  Pred pred,
133dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const T1& v1,
134dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const T2& v2) {
135dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  if (pred(v1, v2)) return AssertionSuccess();
136dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
13746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  return AssertionFailure() << pred_text << "("
13846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << e1 << ", "
13946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << e2 << ") evaluates to false, where"
14046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << "\n" << e1 << " evaluates to " << v1
14146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << "\n" << e2 << " evaluates to " << v2;
142dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
143dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
144dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2.
145dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Don't use this in your code.
146dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\
14746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \
148dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                on_failure)
149dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
150dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Internal macro for implementing {EXPECT|ASSERT}_PRED2.  Don't use
151dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this in your code.
152dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_PRED2_(pred, v1, v2, on_failure)\
153dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \
154dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             #v1, \
155dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             #v2, \
156dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             pred, \
157dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             v1, \
158dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             v2), on_failure)
159dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
160dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Binary predicate assertion macros.
161dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \
162dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_)
163dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define EXPECT_PRED2(pred, v1, v2) \
164dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_)
165dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \
166dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)
167dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define ASSERT_PRED2(pred, v1, v2) \
168dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_)
169dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
170dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
171dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
172dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Helper function for implementing {EXPECT|ASSERT}_PRED3.  Don't use
173dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this in your code.
174dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename Pred,
175dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter          typename T1,
176dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter          typename T2,
177dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter          typename T3>
178dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterAssertionResult AssertPred3Helper(const char* pred_text,
179dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const char* e1,
180dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const char* e2,
181dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const char* e3,
182dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  Pred pred,
183dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const T1& v1,
184dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const T2& v2,
185dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const T3& v3) {
186dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  if (pred(v1, v2, v3)) return AssertionSuccess();
187dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
18846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  return AssertionFailure() << pred_text << "("
18946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << e1 << ", "
19046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << e2 << ", "
19146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << e3 << ") evaluates to false, where"
19246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << "\n" << e1 << " evaluates to " << v1
19346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << "\n" << e2 << " evaluates to " << v2
19446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << "\n" << e3 << " evaluates to " << v3;
195dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
196dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
197dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3.
198dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Don't use this in your code.
199dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\
20046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), \
201dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                on_failure)
202dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
203dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Internal macro for implementing {EXPECT|ASSERT}_PRED3.  Don't use
204dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this in your code.
205dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\
206dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \
207dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             #v1, \
208dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             #v2, \
209dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             #v3, \
210dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             pred, \
211dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             v1, \
212dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             v2, \
213dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             v3), on_failure)
214dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
215dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Ternary predicate assertion macros.
216dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \
217dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_)
218dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define EXPECT_PRED3(pred, v1, v2, v3) \
219dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_)
220dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \
221dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_)
222dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define ASSERT_PRED3(pred, v1, v2, v3) \
223dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_)
224dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
225dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
226dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
227dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Helper function for implementing {EXPECT|ASSERT}_PRED4.  Don't use
228dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this in your code.
229dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename Pred,
230dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter          typename T1,
231dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter          typename T2,
232dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter          typename T3,
233dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter          typename T4>
234dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterAssertionResult AssertPred4Helper(const char* pred_text,
235dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const char* e1,
236dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const char* e2,
237dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const char* e3,
238dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const char* e4,
239dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  Pred pred,
240dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const T1& v1,
241dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const T2& v2,
242dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const T3& v3,
243dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const T4& v4) {
244dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  if (pred(v1, v2, v3, v4)) return AssertionSuccess();
245dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
24646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  return AssertionFailure() << pred_text << "("
24746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << e1 << ", "
24846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << e2 << ", "
24946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << e3 << ", "
25046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << e4 << ") evaluates to false, where"
25146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << "\n" << e1 << " evaluates to " << v1
25246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << "\n" << e2 << " evaluates to " << v2
25346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << "\n" << e3 << " evaluates to " << v3
25446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << "\n" << e4 << " evaluates to " << v4;
255dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
256dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
257dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4.
258dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Don't use this in your code.
259dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\
26046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), \
261dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                on_failure)
262dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
263dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Internal macro for implementing {EXPECT|ASSERT}_PRED4.  Don't use
264dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this in your code.
265dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\
266dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \
267dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             #v1, \
268dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             #v2, \
269dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             #v3, \
270dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             #v4, \
271dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             pred, \
272dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             v1, \
273dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             v2, \
274dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             v3, \
275dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             v4), on_failure)
276dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
277dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 4-ary predicate assertion macros.
278dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \
279dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)
280dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define EXPECT_PRED4(pred, v1, v2, v3, v4) \
281dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)
282dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \
283dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)
284dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define ASSERT_PRED4(pred, v1, v2, v3, v4) \
285dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)
286dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
287dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
288dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
289dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Helper function for implementing {EXPECT|ASSERT}_PRED5.  Don't use
290dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this in your code.
291dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename Pred,
292dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter          typename T1,
293dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter          typename T2,
294dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter          typename T3,
295dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter          typename T4,
296dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter          typename T5>
297dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterAssertionResult AssertPred5Helper(const char* pred_text,
298dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const char* e1,
299dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const char* e2,
300dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const char* e3,
301dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const char* e4,
302dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const char* e5,
303dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  Pred pred,
304dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const T1& v1,
305dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const T2& v2,
306dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const T3& v3,
307dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const T4& v4,
308dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                  const T5& v5) {
309dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess();
310dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
31146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  return AssertionFailure() << pred_text << "("
31246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << e1 << ", "
31346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << e2 << ", "
31446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << e3 << ", "
31546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << e4 << ", "
31646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << e5 << ") evaluates to false, where"
31746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << "\n" << e1 << " evaluates to " << v1
31846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << "\n" << e2 << " evaluates to " << v2
31946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << "\n" << e3 << " evaluates to " << v3
32046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << "\n" << e4 << " evaluates to " << v4
32146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan                            << "\n" << e5 << " evaluates to " << v5;
322dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
323dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
324dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5.
325dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Don't use this in your code.
326dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\
32746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \
328dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                on_failure)
329dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
330dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Internal macro for implementing {EXPECT|ASSERT}_PRED5.  Don't use
331dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this in your code.
332dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\
333dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \
334dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             #v1, \
335dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             #v2, \
336dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             #v3, \
337dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             #v4, \
338dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             #v5, \
339dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             pred, \
340dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             v1, \
341dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             v2, \
342dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             v3, \
343dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             v4, \
344dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                                             v5), on_failure)
345dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
346dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 5-ary predicate assertion macros.
347dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \
348dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
349dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \
350dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
351dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \
352dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)
353dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \
354dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)
355dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
356dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
357dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
358dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#endif  // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
359