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