gtest_pred_impl.h revision e0865dd9199e8fffd5c2f95a68de6c1851f77c15
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
30e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian// This file is AUTOMATICALLY GENERATED on 10/02/2008 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_
40d201456903f3ecae1f7794edfab0d5678e64226shiqian#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
93d201456903f3ecae1f7794edfab0d5678e64226shiqian  Message msg;
94d201456903f3ecae1f7794edfab0d5678e64226shiqian  msg << pred_text << "("
95d201456903f3ecae1f7794edfab0d5678e64226shiqian      << e1 << ") evaluates to false, where"
96d201456903f3ecae1f7794edfab0d5678e64226shiqian      << "\n" << e1 << " evaluates to " << v1;
97d201456903f3ecae1f7794edfab0d5678e64226shiqian  return AssertionFailure(msg);
98d201456903f3ecae1f7794edfab0d5678e64226shiqian}
99d201456903f3ecae1f7794edfab0d5678e64226shiqian
100d201456903f3ecae1f7794edfab0d5678e64226shiqian// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1.
101d201456903f3ecae1f7794edfab0d5678e64226shiqian// Don't use this in your code.
102e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\
103e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_ASSERT_(pred_format(#v1, v1),\
104e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                on_failure)
105d201456903f3ecae1f7794edfab0d5678e64226shiqian
106d201456903f3ecae1f7794edfab0d5678e64226shiqian// Internal macro for implementing {EXPECT|ASSERT}_PRED1.  Don't use
107d201456903f3ecae1f7794edfab0d5678e64226shiqian// this in your code.
108e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian#define GTEST_PRED1_(pred, v1, on_failure)\
109e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \
110e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             #v1, \
111e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             pred, \
112e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             v1), on_failure)
113d201456903f3ecae1f7794edfab0d5678e64226shiqian
114d201456903f3ecae1f7794edfab0d5678e64226shiqian// Unary predicate assertion macros.
115d201456903f3ecae1f7794edfab0d5678e64226shiqian#define EXPECT_PRED_FORMAT1(pred_format, v1) \
116e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_)
117d201456903f3ecae1f7794edfab0d5678e64226shiqian#define EXPECT_PRED1(pred, v1) \
118e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_)
119d201456903f3ecae1f7794edfab0d5678e64226shiqian#define ASSERT_PRED_FORMAT1(pred_format, v1) \
120e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_)
121d201456903f3ecae1f7794edfab0d5678e64226shiqian#define ASSERT_PRED1(pred, v1) \
122e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_)
123d201456903f3ecae1f7794edfab0d5678e64226shiqian
124d201456903f3ecae1f7794edfab0d5678e64226shiqian
125d201456903f3ecae1f7794edfab0d5678e64226shiqian
126d201456903f3ecae1f7794edfab0d5678e64226shiqian// Helper function for implementing {EXPECT|ASSERT}_PRED2.  Don't use
127d201456903f3ecae1f7794edfab0d5678e64226shiqian// this in your code.
128d201456903f3ecae1f7794edfab0d5678e64226shiqiantemplate <typename Pred,
129d201456903f3ecae1f7794edfab0d5678e64226shiqian          typename T1,
130d201456903f3ecae1f7794edfab0d5678e64226shiqian          typename T2>
131d201456903f3ecae1f7794edfab0d5678e64226shiqianAssertionResult AssertPred2Helper(const char* pred_text,
132d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const char* e1,
133d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const char* e2,
134d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  Pred pred,
135d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const T1& v1,
136d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const T2& v2) {
137d201456903f3ecae1f7794edfab0d5678e64226shiqian  if (pred(v1, v2)) return AssertionSuccess();
138d201456903f3ecae1f7794edfab0d5678e64226shiqian
139d201456903f3ecae1f7794edfab0d5678e64226shiqian  Message msg;
140d201456903f3ecae1f7794edfab0d5678e64226shiqian  msg << pred_text << "("
141d201456903f3ecae1f7794edfab0d5678e64226shiqian      << e1 << ", "
142d201456903f3ecae1f7794edfab0d5678e64226shiqian      << e2 << ") evaluates to false, where"
143d201456903f3ecae1f7794edfab0d5678e64226shiqian      << "\n" << e1 << " evaluates to " << v1
144d201456903f3ecae1f7794edfab0d5678e64226shiqian      << "\n" << e2 << " evaluates to " << v2;
145d201456903f3ecae1f7794edfab0d5678e64226shiqian  return AssertionFailure(msg);
146d201456903f3ecae1f7794edfab0d5678e64226shiqian}
147d201456903f3ecae1f7794edfab0d5678e64226shiqian
148d201456903f3ecae1f7794edfab0d5678e64226shiqian// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2.
149d201456903f3ecae1f7794edfab0d5678e64226shiqian// Don't use this in your code.
150e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\
151e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2),\
152e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                on_failure)
153d201456903f3ecae1f7794edfab0d5678e64226shiqian
154d201456903f3ecae1f7794edfab0d5678e64226shiqian// Internal macro for implementing {EXPECT|ASSERT}_PRED2.  Don't use
155d201456903f3ecae1f7794edfab0d5678e64226shiqian// this in your code.
156e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian#define GTEST_PRED2_(pred, v1, v2, on_failure)\
157e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \
158e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             #v1, \
159e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             #v2, \
160e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             pred, \
161e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             v1, \
162e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             v2), on_failure)
163d201456903f3ecae1f7794edfab0d5678e64226shiqian
164d201456903f3ecae1f7794edfab0d5678e64226shiqian// Binary predicate assertion macros.
165d201456903f3ecae1f7794edfab0d5678e64226shiqian#define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \
166e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_)
167d201456903f3ecae1f7794edfab0d5678e64226shiqian#define EXPECT_PRED2(pred, v1, v2) \
168e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_)
169d201456903f3ecae1f7794edfab0d5678e64226shiqian#define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \
170e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)
171d201456903f3ecae1f7794edfab0d5678e64226shiqian#define ASSERT_PRED2(pred, v1, v2) \
172e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_)
173d201456903f3ecae1f7794edfab0d5678e64226shiqian
174d201456903f3ecae1f7794edfab0d5678e64226shiqian
175d201456903f3ecae1f7794edfab0d5678e64226shiqian
176d201456903f3ecae1f7794edfab0d5678e64226shiqian// Helper function for implementing {EXPECT|ASSERT}_PRED3.  Don't use
177d201456903f3ecae1f7794edfab0d5678e64226shiqian// this in your code.
178d201456903f3ecae1f7794edfab0d5678e64226shiqiantemplate <typename Pred,
179d201456903f3ecae1f7794edfab0d5678e64226shiqian          typename T1,
180d201456903f3ecae1f7794edfab0d5678e64226shiqian          typename T2,
181d201456903f3ecae1f7794edfab0d5678e64226shiqian          typename T3>
182d201456903f3ecae1f7794edfab0d5678e64226shiqianAssertionResult AssertPred3Helper(const char* pred_text,
183d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const char* e1,
184d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const char* e2,
185d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const char* e3,
186d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  Pred pred,
187d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const T1& v1,
188d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const T2& v2,
189d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const T3& v3) {
190d201456903f3ecae1f7794edfab0d5678e64226shiqian  if (pred(v1, v2, v3)) return AssertionSuccess();
191d201456903f3ecae1f7794edfab0d5678e64226shiqian
192d201456903f3ecae1f7794edfab0d5678e64226shiqian  Message msg;
193d201456903f3ecae1f7794edfab0d5678e64226shiqian  msg << pred_text << "("
194d201456903f3ecae1f7794edfab0d5678e64226shiqian      << e1 << ", "
195d201456903f3ecae1f7794edfab0d5678e64226shiqian      << e2 << ", "
196d201456903f3ecae1f7794edfab0d5678e64226shiqian      << e3 << ") evaluates to false, where"
197d201456903f3ecae1f7794edfab0d5678e64226shiqian      << "\n" << e1 << " evaluates to " << v1
198d201456903f3ecae1f7794edfab0d5678e64226shiqian      << "\n" << e2 << " evaluates to " << v2
199d201456903f3ecae1f7794edfab0d5678e64226shiqian      << "\n" << e3 << " evaluates to " << v3;
200d201456903f3ecae1f7794edfab0d5678e64226shiqian  return AssertionFailure(msg);
201d201456903f3ecae1f7794edfab0d5678e64226shiqian}
202d201456903f3ecae1f7794edfab0d5678e64226shiqian
203d201456903f3ecae1f7794edfab0d5678e64226shiqian// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3.
204d201456903f3ecae1f7794edfab0d5678e64226shiqian// Don't use this in your code.
205e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\
206e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3),\
207e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                on_failure)
208d201456903f3ecae1f7794edfab0d5678e64226shiqian
209d201456903f3ecae1f7794edfab0d5678e64226shiqian// Internal macro for implementing {EXPECT|ASSERT}_PRED3.  Don't use
210d201456903f3ecae1f7794edfab0d5678e64226shiqian// this in your code.
211e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\
212e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \
213e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             #v1, \
214e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             #v2, \
215e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             #v3, \
216e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             pred, \
217e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             v1, \
218e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             v2, \
219e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             v3), on_failure)
220d201456903f3ecae1f7794edfab0d5678e64226shiqian
221d201456903f3ecae1f7794edfab0d5678e64226shiqian// Ternary predicate assertion macros.
222d201456903f3ecae1f7794edfab0d5678e64226shiqian#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \
223e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_)
224d201456903f3ecae1f7794edfab0d5678e64226shiqian#define EXPECT_PRED3(pred, v1, v2, v3) \
225e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_)
226d201456903f3ecae1f7794edfab0d5678e64226shiqian#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \
227e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_)
228d201456903f3ecae1f7794edfab0d5678e64226shiqian#define ASSERT_PRED3(pred, v1, v2, v3) \
229e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_)
230d201456903f3ecae1f7794edfab0d5678e64226shiqian
231d201456903f3ecae1f7794edfab0d5678e64226shiqian
232d201456903f3ecae1f7794edfab0d5678e64226shiqian
233d201456903f3ecae1f7794edfab0d5678e64226shiqian// Helper function for implementing {EXPECT|ASSERT}_PRED4.  Don't use
234d201456903f3ecae1f7794edfab0d5678e64226shiqian// this in your code.
235d201456903f3ecae1f7794edfab0d5678e64226shiqiantemplate <typename Pred,
236d201456903f3ecae1f7794edfab0d5678e64226shiqian          typename T1,
237d201456903f3ecae1f7794edfab0d5678e64226shiqian          typename T2,
238d201456903f3ecae1f7794edfab0d5678e64226shiqian          typename T3,
239d201456903f3ecae1f7794edfab0d5678e64226shiqian          typename T4>
240d201456903f3ecae1f7794edfab0d5678e64226shiqianAssertionResult AssertPred4Helper(const char* pred_text,
241d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const char* e1,
242d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const char* e2,
243d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const char* e3,
244d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const char* e4,
245d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  Pred pred,
246d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const T1& v1,
247d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const T2& v2,
248d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const T3& v3,
249d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const T4& v4) {
250d201456903f3ecae1f7794edfab0d5678e64226shiqian  if (pred(v1, v2, v3, v4)) return AssertionSuccess();
251d201456903f3ecae1f7794edfab0d5678e64226shiqian
252d201456903f3ecae1f7794edfab0d5678e64226shiqian  Message msg;
253d201456903f3ecae1f7794edfab0d5678e64226shiqian  msg << pred_text << "("
254d201456903f3ecae1f7794edfab0d5678e64226shiqian      << e1 << ", "
255d201456903f3ecae1f7794edfab0d5678e64226shiqian      << e2 << ", "
256d201456903f3ecae1f7794edfab0d5678e64226shiqian      << e3 << ", "
257d201456903f3ecae1f7794edfab0d5678e64226shiqian      << e4 << ") evaluates to false, where"
258d201456903f3ecae1f7794edfab0d5678e64226shiqian      << "\n" << e1 << " evaluates to " << v1
259d201456903f3ecae1f7794edfab0d5678e64226shiqian      << "\n" << e2 << " evaluates to " << v2
260d201456903f3ecae1f7794edfab0d5678e64226shiqian      << "\n" << e3 << " evaluates to " << v3
261d201456903f3ecae1f7794edfab0d5678e64226shiqian      << "\n" << e4 << " evaluates to " << v4;
262d201456903f3ecae1f7794edfab0d5678e64226shiqian  return AssertionFailure(msg);
263d201456903f3ecae1f7794edfab0d5678e64226shiqian}
264d201456903f3ecae1f7794edfab0d5678e64226shiqian
265d201456903f3ecae1f7794edfab0d5678e64226shiqian// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4.
266d201456903f3ecae1f7794edfab0d5678e64226shiqian// Don't use this in your code.
267e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\
268e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4),\
269e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                on_failure)
270d201456903f3ecae1f7794edfab0d5678e64226shiqian
271d201456903f3ecae1f7794edfab0d5678e64226shiqian// Internal macro for implementing {EXPECT|ASSERT}_PRED4.  Don't use
272d201456903f3ecae1f7794edfab0d5678e64226shiqian// this in your code.
273e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\
274e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \
275e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             #v1, \
276e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             #v2, \
277e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             #v3, \
278e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             #v4, \
279e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             pred, \
280e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             v1, \
281e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             v2, \
282e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             v3, \
283e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             v4), on_failure)
284d201456903f3ecae1f7794edfab0d5678e64226shiqian
285d201456903f3ecae1f7794edfab0d5678e64226shiqian// 4-ary predicate assertion macros.
286d201456903f3ecae1f7794edfab0d5678e64226shiqian#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \
287e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)
288d201456903f3ecae1f7794edfab0d5678e64226shiqian#define EXPECT_PRED4(pred, v1, v2, v3, v4) \
289e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)
290d201456903f3ecae1f7794edfab0d5678e64226shiqian#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \
291e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)
292d201456903f3ecae1f7794edfab0d5678e64226shiqian#define ASSERT_PRED4(pred, v1, v2, v3, v4) \
293e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)
294d201456903f3ecae1f7794edfab0d5678e64226shiqian
295d201456903f3ecae1f7794edfab0d5678e64226shiqian
296d201456903f3ecae1f7794edfab0d5678e64226shiqian
297d201456903f3ecae1f7794edfab0d5678e64226shiqian// Helper function for implementing {EXPECT|ASSERT}_PRED5.  Don't use
298d201456903f3ecae1f7794edfab0d5678e64226shiqian// this in your code.
299d201456903f3ecae1f7794edfab0d5678e64226shiqiantemplate <typename Pred,
300d201456903f3ecae1f7794edfab0d5678e64226shiqian          typename T1,
301d201456903f3ecae1f7794edfab0d5678e64226shiqian          typename T2,
302d201456903f3ecae1f7794edfab0d5678e64226shiqian          typename T3,
303d201456903f3ecae1f7794edfab0d5678e64226shiqian          typename T4,
304d201456903f3ecae1f7794edfab0d5678e64226shiqian          typename T5>
305d201456903f3ecae1f7794edfab0d5678e64226shiqianAssertionResult AssertPred5Helper(const char* pred_text,
306d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const char* e1,
307d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const char* e2,
308d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const char* e3,
309d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const char* e4,
310d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const char* e5,
311d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  Pred pred,
312d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const T1& v1,
313d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const T2& v2,
314d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const T3& v3,
315d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const T4& v4,
316d201456903f3ecae1f7794edfab0d5678e64226shiqian                                  const T5& v5) {
317d201456903f3ecae1f7794edfab0d5678e64226shiqian  if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess();
318d201456903f3ecae1f7794edfab0d5678e64226shiqian
319d201456903f3ecae1f7794edfab0d5678e64226shiqian  Message msg;
320d201456903f3ecae1f7794edfab0d5678e64226shiqian  msg << pred_text << "("
321d201456903f3ecae1f7794edfab0d5678e64226shiqian      << e1 << ", "
322d201456903f3ecae1f7794edfab0d5678e64226shiqian      << e2 << ", "
323d201456903f3ecae1f7794edfab0d5678e64226shiqian      << e3 << ", "
324d201456903f3ecae1f7794edfab0d5678e64226shiqian      << e4 << ", "
325d201456903f3ecae1f7794edfab0d5678e64226shiqian      << e5 << ") evaluates to false, where"
326d201456903f3ecae1f7794edfab0d5678e64226shiqian      << "\n" << e1 << " evaluates to " << v1
327d201456903f3ecae1f7794edfab0d5678e64226shiqian      << "\n" << e2 << " evaluates to " << v2
328d201456903f3ecae1f7794edfab0d5678e64226shiqian      << "\n" << e3 << " evaluates to " << v3
329d201456903f3ecae1f7794edfab0d5678e64226shiqian      << "\n" << e4 << " evaluates to " << v4
330d201456903f3ecae1f7794edfab0d5678e64226shiqian      << "\n" << e5 << " evaluates to " << v5;
331d201456903f3ecae1f7794edfab0d5678e64226shiqian  return AssertionFailure(msg);
332d201456903f3ecae1f7794edfab0d5678e64226shiqian}
333d201456903f3ecae1f7794edfab0d5678e64226shiqian
334d201456903f3ecae1f7794edfab0d5678e64226shiqian// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5.
335d201456903f3ecae1f7794edfab0d5678e64226shiqian// Don't use this in your code.
336e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\
337e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5),\
338e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                on_failure)
339d201456903f3ecae1f7794edfab0d5678e64226shiqian
340d201456903f3ecae1f7794edfab0d5678e64226shiqian// Internal macro for implementing {EXPECT|ASSERT}_PRED5.  Don't use
341d201456903f3ecae1f7794edfab0d5678e64226shiqian// this in your code.
342e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\
343e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \
344e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             #v1, \
345e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             #v2, \
346e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             #v3, \
347e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             #v4, \
348e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             #v5, \
349e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             pred, \
350e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             v1, \
351e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             v2, \
352e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             v3, \
353e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             v4, \
354e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian                                             v5), on_failure)
355d201456903f3ecae1f7794edfab0d5678e64226shiqian
356d201456903f3ecae1f7794edfab0d5678e64226shiqian// 5-ary predicate assertion macros.
357d201456903f3ecae1f7794edfab0d5678e64226shiqian#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \
358e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
359d201456903f3ecae1f7794edfab0d5678e64226shiqian#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \
360e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
361d201456903f3ecae1f7794edfab0d5678e64226shiqian#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \
362e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)
363d201456903f3ecae1f7794edfab0d5678e64226shiqian#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \
364e0865dd9199e8fffd5c2f95a68de6c1851f77c15shiqian  GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)
365d201456903f3ecae1f7794edfab0d5678e64226shiqian
366d201456903f3ecae1f7794edfab0d5678e64226shiqian
367d201456903f3ecae1f7794edfab0d5678e64226shiqian
368d201456903f3ecae1f7794edfab0d5678e64226shiqian#endif  // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
369