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