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