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