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