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