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