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