113481Sgiacomo.travaglini@arm.com// Copyright 2006, Google Inc. 213481Sgiacomo.travaglini@arm.com// All rights reserved. 313481Sgiacomo.travaglini@arm.com// 413481Sgiacomo.travaglini@arm.com// Redistribution and use in source and binary forms, with or without 513481Sgiacomo.travaglini@arm.com// modification, are permitted provided that the following conditions are 613481Sgiacomo.travaglini@arm.com// met: 713481Sgiacomo.travaglini@arm.com// 813481Sgiacomo.travaglini@arm.com// * Redistributions of source code must retain the above copyright 913481Sgiacomo.travaglini@arm.com// notice, this list of conditions and the following disclaimer. 1013481Sgiacomo.travaglini@arm.com// * Redistributions in binary form must reproduce the above 1113481Sgiacomo.travaglini@arm.com// copyright notice, this list of conditions and the following disclaimer 1213481Sgiacomo.travaglini@arm.com// in the documentation and/or other materials provided with the 1313481Sgiacomo.travaglini@arm.com// distribution. 1413481Sgiacomo.travaglini@arm.com// * Neither the name of Google Inc. nor the names of its 1513481Sgiacomo.travaglini@arm.com// contributors may be used to endorse or promote products derived from 1613481Sgiacomo.travaglini@arm.com// this software without specific prior written permission. 1713481Sgiacomo.travaglini@arm.com// 1813481Sgiacomo.travaglini@arm.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1913481Sgiacomo.travaglini@arm.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2013481Sgiacomo.travaglini@arm.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2113481Sgiacomo.travaglini@arm.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2213481Sgiacomo.travaglini@arm.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2313481Sgiacomo.travaglini@arm.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2413481Sgiacomo.travaglini@arm.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2513481Sgiacomo.travaglini@arm.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2613481Sgiacomo.travaglini@arm.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2713481Sgiacomo.travaglini@arm.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2813481Sgiacomo.travaglini@arm.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2913481Sgiacomo.travaglini@arm.com 3013481Sgiacomo.travaglini@arm.com// This file is AUTOMATICALLY GENERATED on 10/31/2011 by command 3113481Sgiacomo.travaglini@arm.com// 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND! 3213481Sgiacomo.travaglini@arm.com// 3313481Sgiacomo.travaglini@arm.com// Implements a family of generic predicate assertion macros. 3413481Sgiacomo.travaglini@arm.com 3513481Sgiacomo.travaglini@arm.com#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ 3613481Sgiacomo.travaglini@arm.com#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ 3713481Sgiacomo.travaglini@arm.com 3813481Sgiacomo.travaglini@arm.com// Makes sure this header is not included before gtest.h. 3913481Sgiacomo.travaglini@arm.com#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ 4013481Sgiacomo.travaglini@arm.com# error Do not include gtest_pred_impl.h directly. Include gtest.h instead. 4113481Sgiacomo.travaglini@arm.com#endif // GTEST_INCLUDE_GTEST_GTEST_H_ 4213481Sgiacomo.travaglini@arm.com 4313481Sgiacomo.travaglini@arm.com// This header implements a family of generic predicate assertion 4413481Sgiacomo.travaglini@arm.com// macros: 4513481Sgiacomo.travaglini@arm.com// 4613481Sgiacomo.travaglini@arm.com// ASSERT_PRED_FORMAT1(pred_format, v1) 4713481Sgiacomo.travaglini@arm.com// ASSERT_PRED_FORMAT2(pred_format, v1, v2) 4813481Sgiacomo.travaglini@arm.com// ... 4913481Sgiacomo.travaglini@arm.com// 5013481Sgiacomo.travaglini@arm.com// where pred_format is a function or functor that takes n (in the 5113481Sgiacomo.travaglini@arm.com// case of ASSERT_PRED_FORMATn) values and their source expression 5213481Sgiacomo.travaglini@arm.com// text, and returns a testing::AssertionResult. See the definition 5313481Sgiacomo.travaglini@arm.com// of ASSERT_EQ in gtest.h for an example. 5413481Sgiacomo.travaglini@arm.com// 5513481Sgiacomo.travaglini@arm.com// If you don't care about formatting, you can use the more 5613481Sgiacomo.travaglini@arm.com// restrictive version: 5713481Sgiacomo.travaglini@arm.com// 5813481Sgiacomo.travaglini@arm.com// ASSERT_PRED1(pred, v1) 5913481Sgiacomo.travaglini@arm.com// ASSERT_PRED2(pred, v1, v2) 6013481Sgiacomo.travaglini@arm.com// ... 6113481Sgiacomo.travaglini@arm.com// 6213481Sgiacomo.travaglini@arm.com// where pred is an n-ary function or functor that returns bool, 6313481Sgiacomo.travaglini@arm.com// and the values v1, v2, ..., must support the << operator for 6413481Sgiacomo.travaglini@arm.com// streaming to std::ostream. 6513481Sgiacomo.travaglini@arm.com// 6613481Sgiacomo.travaglini@arm.com// We also define the EXPECT_* variations. 6713481Sgiacomo.travaglini@arm.com// 6813481Sgiacomo.travaglini@arm.com// For now we only support predicates whose arity is at most 5. 6913481Sgiacomo.travaglini@arm.com// Please email googletestframework@googlegroups.com if you need 7013481Sgiacomo.travaglini@arm.com// support for higher arities. 7113481Sgiacomo.travaglini@arm.com 7213481Sgiacomo.travaglini@arm.com// GTEST_ASSERT_ is the basic statement to which all of the assertions 7313481Sgiacomo.travaglini@arm.com// in this file reduce. Don't use this in your code. 7413481Sgiacomo.travaglini@arm.com 7513481Sgiacomo.travaglini@arm.com#define GTEST_ASSERT_(expression, on_failure) \ 7613481Sgiacomo.travaglini@arm.com GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 7713481Sgiacomo.travaglini@arm.com if (const ::testing::AssertionResult gtest_ar = (expression)) \ 7813481Sgiacomo.travaglini@arm.com ; \ 7913481Sgiacomo.travaglini@arm.com else \ 8013481Sgiacomo.travaglini@arm.com on_failure(gtest_ar.failure_message()) 8113481Sgiacomo.travaglini@arm.com 8213481Sgiacomo.travaglini@arm.com 8313481Sgiacomo.travaglini@arm.com// Helper function for implementing {EXPECT|ASSERT}_PRED1. Don't use 8413481Sgiacomo.travaglini@arm.com// this in your code. 8513481Sgiacomo.travaglini@arm.comtemplate <typename Pred, 8613481Sgiacomo.travaglini@arm.com typename T1> 8713481Sgiacomo.travaglini@arm.comAssertionResult AssertPred1Helper(const char* pred_text, 8813481Sgiacomo.travaglini@arm.com const char* e1, 8913481Sgiacomo.travaglini@arm.com Pred pred, 9013481Sgiacomo.travaglini@arm.com const T1& v1) { 9113481Sgiacomo.travaglini@arm.com if (pred(v1)) return AssertionSuccess(); 9213481Sgiacomo.travaglini@arm.com 9313481Sgiacomo.travaglini@arm.com return AssertionFailure() << pred_text << "(" 9413481Sgiacomo.travaglini@arm.com << e1 << ") evaluates to false, where" 9513481Sgiacomo.travaglini@arm.com << "\n" << e1 << " evaluates to " << v1; 9613481Sgiacomo.travaglini@arm.com} 9713481Sgiacomo.travaglini@arm.com 9813481Sgiacomo.travaglini@arm.com// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1. 9913481Sgiacomo.travaglini@arm.com// Don't use this in your code. 10013481Sgiacomo.travaglini@arm.com#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\ 10113481Sgiacomo.travaglini@arm.com GTEST_ASSERT_(pred_format(#v1, v1), \ 10213481Sgiacomo.travaglini@arm.com on_failure) 10313481Sgiacomo.travaglini@arm.com 10413481Sgiacomo.travaglini@arm.com// Internal macro for implementing {EXPECT|ASSERT}_PRED1. Don't use 10513481Sgiacomo.travaglini@arm.com// this in your code. 10613481Sgiacomo.travaglini@arm.com#define GTEST_PRED1_(pred, v1, on_failure)\ 10713481Sgiacomo.travaglini@arm.com GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \ 10813481Sgiacomo.travaglini@arm.com #v1, \ 10913481Sgiacomo.travaglini@arm.com pred, \ 11013481Sgiacomo.travaglini@arm.com v1), on_failure) 11113481Sgiacomo.travaglini@arm.com 11213481Sgiacomo.travaglini@arm.com// Unary predicate assertion macros. 11313481Sgiacomo.travaglini@arm.com#define EXPECT_PRED_FORMAT1(pred_format, v1) \ 11413481Sgiacomo.travaglini@arm.com GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_) 11513481Sgiacomo.travaglini@arm.com#define EXPECT_PRED1(pred, v1) \ 11613481Sgiacomo.travaglini@arm.com GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_) 11713481Sgiacomo.travaglini@arm.com#define ASSERT_PRED_FORMAT1(pred_format, v1) \ 11813481Sgiacomo.travaglini@arm.com GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_) 11913481Sgiacomo.travaglini@arm.com#define ASSERT_PRED1(pred, v1) \ 12013481Sgiacomo.travaglini@arm.com GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_) 12113481Sgiacomo.travaglini@arm.com 12213481Sgiacomo.travaglini@arm.com 12313481Sgiacomo.travaglini@arm.com 12413481Sgiacomo.travaglini@arm.com// Helper function for implementing {EXPECT|ASSERT}_PRED2. Don't use 12513481Sgiacomo.travaglini@arm.com// this in your code. 12613481Sgiacomo.travaglini@arm.comtemplate <typename Pred, 12713481Sgiacomo.travaglini@arm.com typename T1, 12813481Sgiacomo.travaglini@arm.com typename T2> 12913481Sgiacomo.travaglini@arm.comAssertionResult AssertPred2Helper(const char* pred_text, 13013481Sgiacomo.travaglini@arm.com const char* e1, 13113481Sgiacomo.travaglini@arm.com const char* e2, 13213481Sgiacomo.travaglini@arm.com Pred pred, 13313481Sgiacomo.travaglini@arm.com const T1& v1, 13413481Sgiacomo.travaglini@arm.com const T2& v2) { 13513481Sgiacomo.travaglini@arm.com if (pred(v1, v2)) return AssertionSuccess(); 13613481Sgiacomo.travaglini@arm.com 13713481Sgiacomo.travaglini@arm.com return AssertionFailure() << pred_text << "(" 13813481Sgiacomo.travaglini@arm.com << e1 << ", " 13913481Sgiacomo.travaglini@arm.com << e2 << ") evaluates to false, where" 14013481Sgiacomo.travaglini@arm.com << "\n" << e1 << " evaluates to " << v1 14113481Sgiacomo.travaglini@arm.com << "\n" << e2 << " evaluates to " << v2; 14213481Sgiacomo.travaglini@arm.com} 14313481Sgiacomo.travaglini@arm.com 14413481Sgiacomo.travaglini@arm.com// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2. 14513481Sgiacomo.travaglini@arm.com// Don't use this in your code. 14613481Sgiacomo.travaglini@arm.com#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\ 14713481Sgiacomo.travaglini@arm.com GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \ 14813481Sgiacomo.travaglini@arm.com on_failure) 14913481Sgiacomo.travaglini@arm.com 15013481Sgiacomo.travaglini@arm.com// Internal macro for implementing {EXPECT|ASSERT}_PRED2. Don't use 15113481Sgiacomo.travaglini@arm.com// this in your code. 15213481Sgiacomo.travaglini@arm.com#define GTEST_PRED2_(pred, v1, v2, on_failure)\ 15313481Sgiacomo.travaglini@arm.com GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \ 15413481Sgiacomo.travaglini@arm.com #v1, \ 15513481Sgiacomo.travaglini@arm.com #v2, \ 15613481Sgiacomo.travaglini@arm.com pred, \ 15713481Sgiacomo.travaglini@arm.com v1, \ 15813481Sgiacomo.travaglini@arm.com v2), on_failure) 15913481Sgiacomo.travaglini@arm.com 16013481Sgiacomo.travaglini@arm.com// Binary predicate assertion macros. 16113481Sgiacomo.travaglini@arm.com#define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \ 16213481Sgiacomo.travaglini@arm.com GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_) 16313481Sgiacomo.travaglini@arm.com#define EXPECT_PRED2(pred, v1, v2) \ 16413481Sgiacomo.travaglini@arm.com GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_) 16513481Sgiacomo.travaglini@arm.com#define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \ 16613481Sgiacomo.travaglini@arm.com GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_) 16713481Sgiacomo.travaglini@arm.com#define ASSERT_PRED2(pred, v1, v2) \ 16813481Sgiacomo.travaglini@arm.com GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_) 16913481Sgiacomo.travaglini@arm.com 17013481Sgiacomo.travaglini@arm.com 17113481Sgiacomo.travaglini@arm.com 17213481Sgiacomo.travaglini@arm.com// Helper function for implementing {EXPECT|ASSERT}_PRED3. Don't use 17313481Sgiacomo.travaglini@arm.com// this in your code. 17413481Sgiacomo.travaglini@arm.comtemplate <typename Pred, 17513481Sgiacomo.travaglini@arm.com typename T1, 17613481Sgiacomo.travaglini@arm.com typename T2, 17713481Sgiacomo.travaglini@arm.com typename T3> 17813481Sgiacomo.travaglini@arm.comAssertionResult AssertPred3Helper(const char* pred_text, 17913481Sgiacomo.travaglini@arm.com const char* e1, 18013481Sgiacomo.travaglini@arm.com const char* e2, 18113481Sgiacomo.travaglini@arm.com const char* e3, 18213481Sgiacomo.travaglini@arm.com Pred pred, 18313481Sgiacomo.travaglini@arm.com const T1& v1, 18413481Sgiacomo.travaglini@arm.com const T2& v2, 18513481Sgiacomo.travaglini@arm.com const T3& v3) { 18613481Sgiacomo.travaglini@arm.com if (pred(v1, v2, v3)) return AssertionSuccess(); 18713481Sgiacomo.travaglini@arm.com 18813481Sgiacomo.travaglini@arm.com return AssertionFailure() << pred_text << "(" 18913481Sgiacomo.travaglini@arm.com << e1 << ", " 19013481Sgiacomo.travaglini@arm.com << e2 << ", " 19113481Sgiacomo.travaglini@arm.com << e3 << ") evaluates to false, where" 19213481Sgiacomo.travaglini@arm.com << "\n" << e1 << " evaluates to " << v1 19313481Sgiacomo.travaglini@arm.com << "\n" << e2 << " evaluates to " << v2 19413481Sgiacomo.travaglini@arm.com << "\n" << e3 << " evaluates to " << v3; 19513481Sgiacomo.travaglini@arm.com} 19613481Sgiacomo.travaglini@arm.com 19713481Sgiacomo.travaglini@arm.com// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3. 19813481Sgiacomo.travaglini@arm.com// Don't use this in your code. 19913481Sgiacomo.travaglini@arm.com#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\ 20013481Sgiacomo.travaglini@arm.com GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), \ 20113481Sgiacomo.travaglini@arm.com on_failure) 20213481Sgiacomo.travaglini@arm.com 20313481Sgiacomo.travaglini@arm.com// Internal macro for implementing {EXPECT|ASSERT}_PRED3. Don't use 20413481Sgiacomo.travaglini@arm.com// this in your code. 20513481Sgiacomo.travaglini@arm.com#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\ 20613481Sgiacomo.travaglini@arm.com GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \ 20713481Sgiacomo.travaglini@arm.com #v1, \ 20813481Sgiacomo.travaglini@arm.com #v2, \ 20913481Sgiacomo.travaglini@arm.com #v3, \ 21013481Sgiacomo.travaglini@arm.com pred, \ 21113481Sgiacomo.travaglini@arm.com v1, \ 21213481Sgiacomo.travaglini@arm.com v2, \ 21313481Sgiacomo.travaglini@arm.com v3), on_failure) 21413481Sgiacomo.travaglini@arm.com 21513481Sgiacomo.travaglini@arm.com// Ternary predicate assertion macros. 21613481Sgiacomo.travaglini@arm.com#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \ 21713481Sgiacomo.travaglini@arm.com GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_) 21813481Sgiacomo.travaglini@arm.com#define EXPECT_PRED3(pred, v1, v2, v3) \ 21913481Sgiacomo.travaglini@arm.com GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_) 22013481Sgiacomo.travaglini@arm.com#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \ 22113481Sgiacomo.travaglini@arm.com GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_) 22213481Sgiacomo.travaglini@arm.com#define ASSERT_PRED3(pred, v1, v2, v3) \ 22313481Sgiacomo.travaglini@arm.com GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_) 22413481Sgiacomo.travaglini@arm.com 22513481Sgiacomo.travaglini@arm.com 22613481Sgiacomo.travaglini@arm.com 22713481Sgiacomo.travaglini@arm.com// Helper function for implementing {EXPECT|ASSERT}_PRED4. Don't use 22813481Sgiacomo.travaglini@arm.com// this in your code. 22913481Sgiacomo.travaglini@arm.comtemplate <typename Pred, 23013481Sgiacomo.travaglini@arm.com typename T1, 23113481Sgiacomo.travaglini@arm.com typename T2, 23213481Sgiacomo.travaglini@arm.com typename T3, 23313481Sgiacomo.travaglini@arm.com typename T4> 23413481Sgiacomo.travaglini@arm.comAssertionResult AssertPred4Helper(const char* pred_text, 23513481Sgiacomo.travaglini@arm.com const char* e1, 23613481Sgiacomo.travaglini@arm.com const char* e2, 23713481Sgiacomo.travaglini@arm.com const char* e3, 23813481Sgiacomo.travaglini@arm.com const char* e4, 23913481Sgiacomo.travaglini@arm.com Pred pred, 24013481Sgiacomo.travaglini@arm.com const T1& v1, 24113481Sgiacomo.travaglini@arm.com const T2& v2, 24213481Sgiacomo.travaglini@arm.com const T3& v3, 24313481Sgiacomo.travaglini@arm.com const T4& v4) { 24413481Sgiacomo.travaglini@arm.com if (pred(v1, v2, v3, v4)) return AssertionSuccess(); 24513481Sgiacomo.travaglini@arm.com 24613481Sgiacomo.travaglini@arm.com return AssertionFailure() << pred_text << "(" 24713481Sgiacomo.travaglini@arm.com << e1 << ", " 24813481Sgiacomo.travaglini@arm.com << e2 << ", " 24913481Sgiacomo.travaglini@arm.com << e3 << ", " 25013481Sgiacomo.travaglini@arm.com << e4 << ") evaluates to false, where" 25113481Sgiacomo.travaglini@arm.com << "\n" << e1 << " evaluates to " << v1 25213481Sgiacomo.travaglini@arm.com << "\n" << e2 << " evaluates to " << v2 25313481Sgiacomo.travaglini@arm.com << "\n" << e3 << " evaluates to " << v3 25413481Sgiacomo.travaglini@arm.com << "\n" << e4 << " evaluates to " << v4; 25513481Sgiacomo.travaglini@arm.com} 25613481Sgiacomo.travaglini@arm.com 25713481Sgiacomo.travaglini@arm.com// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4. 25813481Sgiacomo.travaglini@arm.com// Don't use this in your code. 25913481Sgiacomo.travaglini@arm.com#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\ 26013481Sgiacomo.travaglini@arm.com GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), \ 26113481Sgiacomo.travaglini@arm.com on_failure) 26213481Sgiacomo.travaglini@arm.com 26313481Sgiacomo.travaglini@arm.com// Internal macro for implementing {EXPECT|ASSERT}_PRED4. Don't use 26413481Sgiacomo.travaglini@arm.com// this in your code. 26513481Sgiacomo.travaglini@arm.com#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\ 26613481Sgiacomo.travaglini@arm.com GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \ 26713481Sgiacomo.travaglini@arm.com #v1, \ 26813481Sgiacomo.travaglini@arm.com #v2, \ 26913481Sgiacomo.travaglini@arm.com #v3, \ 27013481Sgiacomo.travaglini@arm.com #v4, \ 27113481Sgiacomo.travaglini@arm.com pred, \ 27213481Sgiacomo.travaglini@arm.com v1, \ 27313481Sgiacomo.travaglini@arm.com v2, \ 27413481Sgiacomo.travaglini@arm.com v3, \ 27513481Sgiacomo.travaglini@arm.com v4), on_failure) 27613481Sgiacomo.travaglini@arm.com 27713481Sgiacomo.travaglini@arm.com// 4-ary predicate assertion macros. 27813481Sgiacomo.travaglini@arm.com#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ 27913481Sgiacomo.travaglini@arm.com GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) 28013481Sgiacomo.travaglini@arm.com#define EXPECT_PRED4(pred, v1, v2, v3, v4) \ 28113481Sgiacomo.travaglini@arm.com GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) 28213481Sgiacomo.travaglini@arm.com#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ 28313481Sgiacomo.travaglini@arm.com GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) 28413481Sgiacomo.travaglini@arm.com#define ASSERT_PRED4(pred, v1, v2, v3, v4) \ 28513481Sgiacomo.travaglini@arm.com GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) 28613481Sgiacomo.travaglini@arm.com 28713481Sgiacomo.travaglini@arm.com 28813481Sgiacomo.travaglini@arm.com 28913481Sgiacomo.travaglini@arm.com// Helper function for implementing {EXPECT|ASSERT}_PRED5. Don't use 29013481Sgiacomo.travaglini@arm.com// this in your code. 29113481Sgiacomo.travaglini@arm.comtemplate <typename Pred, 29213481Sgiacomo.travaglini@arm.com typename T1, 29313481Sgiacomo.travaglini@arm.com typename T2, 29413481Sgiacomo.travaglini@arm.com typename T3, 29513481Sgiacomo.travaglini@arm.com typename T4, 29613481Sgiacomo.travaglini@arm.com typename T5> 29713481Sgiacomo.travaglini@arm.comAssertionResult AssertPred5Helper(const char* pred_text, 29813481Sgiacomo.travaglini@arm.com const char* e1, 29913481Sgiacomo.travaglini@arm.com const char* e2, 30013481Sgiacomo.travaglini@arm.com const char* e3, 30113481Sgiacomo.travaglini@arm.com const char* e4, 30213481Sgiacomo.travaglini@arm.com const char* e5, 30313481Sgiacomo.travaglini@arm.com Pred pred, 30413481Sgiacomo.travaglini@arm.com const T1& v1, 30513481Sgiacomo.travaglini@arm.com const T2& v2, 30613481Sgiacomo.travaglini@arm.com const T3& v3, 30713481Sgiacomo.travaglini@arm.com const T4& v4, 30813481Sgiacomo.travaglini@arm.com const T5& v5) { 30913481Sgiacomo.travaglini@arm.com if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); 31013481Sgiacomo.travaglini@arm.com 31113481Sgiacomo.travaglini@arm.com return AssertionFailure() << pred_text << "(" 31213481Sgiacomo.travaglini@arm.com << e1 << ", " 31313481Sgiacomo.travaglini@arm.com << e2 << ", " 31413481Sgiacomo.travaglini@arm.com << e3 << ", " 31513481Sgiacomo.travaglini@arm.com << e4 << ", " 31613481Sgiacomo.travaglini@arm.com << e5 << ") evaluates to false, where" 31713481Sgiacomo.travaglini@arm.com << "\n" << e1 << " evaluates to " << v1 31813481Sgiacomo.travaglini@arm.com << "\n" << e2 << " evaluates to " << v2 31913481Sgiacomo.travaglini@arm.com << "\n" << e3 << " evaluates to " << v3 32013481Sgiacomo.travaglini@arm.com << "\n" << e4 << " evaluates to " << v4 32113481Sgiacomo.travaglini@arm.com << "\n" << e5 << " evaluates to " << v5; 32213481Sgiacomo.travaglini@arm.com} 32313481Sgiacomo.travaglini@arm.com 32413481Sgiacomo.travaglini@arm.com// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5. 32513481Sgiacomo.travaglini@arm.com// Don't use this in your code. 32613481Sgiacomo.travaglini@arm.com#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ 32713481Sgiacomo.travaglini@arm.com GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \ 32813481Sgiacomo.travaglini@arm.com on_failure) 32913481Sgiacomo.travaglini@arm.com 33013481Sgiacomo.travaglini@arm.com// Internal macro for implementing {EXPECT|ASSERT}_PRED5. Don't use 33113481Sgiacomo.travaglini@arm.com// this in your code. 33213481Sgiacomo.travaglini@arm.com#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ 33313481Sgiacomo.travaglini@arm.com GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \ 33413481Sgiacomo.travaglini@arm.com #v1, \ 33513481Sgiacomo.travaglini@arm.com #v2, \ 33613481Sgiacomo.travaglini@arm.com #v3, \ 33713481Sgiacomo.travaglini@arm.com #v4, \ 33813481Sgiacomo.travaglini@arm.com #v5, \ 33913481Sgiacomo.travaglini@arm.com pred, \ 34013481Sgiacomo.travaglini@arm.com v1, \ 34113481Sgiacomo.travaglini@arm.com v2, \ 34213481Sgiacomo.travaglini@arm.com v3, \ 34313481Sgiacomo.travaglini@arm.com v4, \ 34413481Sgiacomo.travaglini@arm.com v5), on_failure) 34513481Sgiacomo.travaglini@arm.com 34613481Sgiacomo.travaglini@arm.com// 5-ary predicate assertion macros. 34713481Sgiacomo.travaglini@arm.com#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ 34813481Sgiacomo.travaglini@arm.com GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) 34913481Sgiacomo.travaglini@arm.com#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \ 35013481Sgiacomo.travaglini@arm.com GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) 35113481Sgiacomo.travaglini@arm.com#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ 35213481Sgiacomo.travaglini@arm.com GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) 35313481Sgiacomo.travaglini@arm.com#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \ 35413481Sgiacomo.travaglini@arm.com GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) 35513481Sgiacomo.travaglini@arm.com 35613481Sgiacomo.travaglini@arm.com 35713481Sgiacomo.travaglini@arm.com 35813481Sgiacomo.travaglini@arm.com#endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ 359