11be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Copyright 2006, Google Inc. 21be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// All rights reserved. 31be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 41be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Redistribution and use in source and binary forms, with or without 51be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// modification, are permitted provided that the following conditions are 61be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// met: 71be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 81be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// * Redistributions of source code must retain the above copyright 91be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// notice, this list of conditions and the following disclaimer. 101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// * Redistributions in binary form must reproduce the above 111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// copyright notice, this list of conditions and the following disclaimer 121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// in the documentation and/or other materials provided with the 131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// distribution. 141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// * Neither the name of Google Inc. nor the names of its 151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// contributors may be used to endorse or promote products derived from 161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// this software without specific prior written permission. 171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// This file is AUTOMATICALLY GENERATED on 09/24/2010 by command 311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND! 321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Implements a family of generic predicate assertion macros. 341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ 361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ 371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Makes sure this header is not included before gtest.h. 391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ 4041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# error Do not include gtest_pred_impl.h directly. Include gtest.h instead. 411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_INCLUDE_GTEST_GTEST_H_ 421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This header implements a family of generic predicate assertion 441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// macros: 451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ASSERT_PRED_FORMAT1(pred_format, v1) 471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ASSERT_PRED_FORMAT2(pred_format, v1, v2) 481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ... 491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// where pred_format is a function or functor that takes n (in the 511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// case of ASSERT_PRED_FORMATn) values and their source expression 521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// text, and returns a testing::AssertionResult. See the definition 531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// of ASSERT_EQ in gtest.h for an example. 541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// If you don't care about formatting, you can use the more 561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// restrictive version: 571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ASSERT_PRED1(pred, v1) 591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ASSERT_PRED2(pred, v1, v2) 601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ... 611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// where pred is an n-ary function or functor that returns bool, 631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// and the values v1, v2, ..., must support the << operator for 641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// streaming to std::ostream. 651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// We also define the EXPECT_* variations. 671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// For now we only support predicates whose arity is at most 5. 691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Please email googletestframework@googlegroups.com if you need 701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// support for higher arities. 711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_ASSERT_ is the basic statement to which all of the assertions 731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// in this file reduce. Don't use this in your code. 741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_ASSERT_(expression, on_failure) \ 761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (const ::testing::AssertionResult gtest_ar = (expression)) \ 781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ; \ 791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania else \ 801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania on_failure(gtest_ar.failure_message()) 811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Helper function for implementing {EXPECT|ASSERT}_PRED1. Don't use 841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// this in your code. 851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename Pred, 861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typename T1> 871be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaAssertionResult AssertPred1Helper(const char* pred_text, 881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e1, 891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Pred pred, 901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T1& v1) { 911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (pred(v1)) return AssertionSuccess(); 921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 9341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return AssertionFailure() << pred_text << "(" 9441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << e1 << ") evaluates to false, where" 9541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "\n" << e1 << " evaluates to " << v1; 961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1. 991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Don't use this in your code. 1001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\ 1011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_ASSERT_(pred_format(#v1, v1),\ 1021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania on_failure) 1031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Internal macro for implementing {EXPECT|ASSERT}_PRED1. Don't use 1051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// this in your code. 1061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_PRED1_(pred, v1, on_failure)\ 1071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \ 1081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #v1, \ 1091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania pred, \ 1101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania v1), on_failure) 1111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Unary predicate assertion macros. 1131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define EXPECT_PRED_FORMAT1(pred_format, v1) \ 1141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_) 1151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define EXPECT_PRED1(pred, v1) \ 1161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_) 1171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define ASSERT_PRED_FORMAT1(pred_format, v1) \ 1181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_) 1191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define ASSERT_PRED1(pred, v1) \ 1201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_) 1211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Helper function for implementing {EXPECT|ASSERT}_PRED2. Don't use 1251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// this in your code. 1261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename Pred, 1271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typename T1, 1281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typename T2> 1291be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaAssertionResult AssertPred2Helper(const char* pred_text, 1301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e1, 1311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e2, 1321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Pred pred, 1331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T1& v1, 1341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T2& v2) { 1351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (pred(v1, v2)) return AssertionSuccess(); 1361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 13741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return AssertionFailure() << pred_text << "(" 13841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << e1 << ", " 13941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << e2 << ") evaluates to false, where" 14041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "\n" << e1 << " evaluates to " << v1 14141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "\n" << e2 << " evaluates to " << v2; 1421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 1431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2. 1451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Don't use this in your code. 1461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\ 1471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2),\ 1481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania on_failure) 1491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Internal macro for implementing {EXPECT|ASSERT}_PRED2. Don't use 1511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// this in your code. 1521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_PRED2_(pred, v1, v2, on_failure)\ 1531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \ 1541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #v1, \ 1551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #v2, \ 1561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania pred, \ 1571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania v1, \ 1581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania v2), on_failure) 1591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Binary predicate assertion macros. 1611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \ 1621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_) 1631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define EXPECT_PRED2(pred, v1, v2) \ 1641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_) 1651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \ 1661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_) 1671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define ASSERT_PRED2(pred, v1, v2) \ 1681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_) 1691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Helper function for implementing {EXPECT|ASSERT}_PRED3. Don't use 1731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// this in your code. 1741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename Pred, 1751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typename T1, 1761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typename T2, 1771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typename T3> 1781be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaAssertionResult AssertPred3Helper(const char* pred_text, 1791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e1, 1801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e2, 1811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e3, 1821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Pred pred, 1831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T1& v1, 1841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T2& v2, 1851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T3& v3) { 1861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (pred(v1, v2, v3)) return AssertionSuccess(); 1871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 18841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return AssertionFailure() << pred_text << "(" 18941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << e1 << ", " 19041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << e2 << ", " 19141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << e3 << ") evaluates to false, where" 19241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "\n" << e1 << " evaluates to " << v1 19341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "\n" << e2 << " evaluates to " << v2 19441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "\n" << e3 << " evaluates to " << v3; 1951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 1961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3. 1981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Don't use this in your code. 1991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\ 2001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3),\ 2011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania on_failure) 2021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Internal macro for implementing {EXPECT|ASSERT}_PRED3. Don't use 2041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// this in your code. 2051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\ 2061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \ 2071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #v1, \ 2081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #v2, \ 2091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #v3, \ 2101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania pred, \ 2111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania v1, \ 2121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania v2, \ 2131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania v3), on_failure) 2141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Ternary predicate assertion macros. 2161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \ 2171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_) 2181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define EXPECT_PRED3(pred, v1, v2, v3) \ 2191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_) 2201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \ 2211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_) 2221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define ASSERT_PRED3(pred, v1, v2, v3) \ 2231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_) 2241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Helper function for implementing {EXPECT|ASSERT}_PRED4. Don't use 2281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// this in your code. 2291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename Pred, 2301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typename T1, 2311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typename T2, 2321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typename T3, 2331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typename T4> 2341be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaAssertionResult AssertPred4Helper(const char* pred_text, 2351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e1, 2361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e2, 2371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e3, 2381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e4, 2391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Pred pred, 2401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T1& v1, 2411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T2& v2, 2421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T3& v3, 2431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T4& v4) { 2441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (pred(v1, v2, v3, v4)) return AssertionSuccess(); 2451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 24641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return AssertionFailure() << pred_text << "(" 24741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << e1 << ", " 24841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << e2 << ", " 24941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << e3 << ", " 25041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << e4 << ") evaluates to false, where" 25141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "\n" << e1 << " evaluates to " << v1 25241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "\n" << e2 << " evaluates to " << v2 25341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "\n" << e3 << " evaluates to " << v3 25441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "\n" << e4 << " evaluates to " << v4; 2551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 2561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4. 2581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Don't use this in your code. 2591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\ 2601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4),\ 2611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania on_failure) 2621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Internal macro for implementing {EXPECT|ASSERT}_PRED4. Don't use 2641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// this in your code. 2651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\ 2661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \ 2671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #v1, \ 2681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #v2, \ 2691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #v3, \ 2701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #v4, \ 2711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania pred, \ 2721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania v1, \ 2731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania v2, \ 2741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania v3, \ 2751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania v4), on_failure) 2761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 4-ary predicate assertion macros. 2781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ 2791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) 2801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define EXPECT_PRED4(pred, v1, v2, v3, v4) \ 2811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) 2821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ 2831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) 2841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define ASSERT_PRED4(pred, v1, v2, v3, v4) \ 2851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) 2861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Helper function for implementing {EXPECT|ASSERT}_PRED5. Don't use 2901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// this in your code. 2911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename Pred, 2921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typename T1, 2931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typename T2, 2941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typename T3, 2951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typename T4, 2961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typename T5> 2971be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaAssertionResult AssertPred5Helper(const char* pred_text, 2981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e1, 2991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e2, 3001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e3, 3011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e4, 3021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* e5, 3031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Pred pred, 3041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T1& v1, 3051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T2& v2, 3061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T3& v3, 3071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T4& v4, 3081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T5& v5) { 3091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); 3101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 31141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return AssertionFailure() << pred_text << "(" 31241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << e1 << ", " 31341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << e2 << ", " 31441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << e3 << ", " 31541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << e4 << ", " 31641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << e5 << ") evaluates to false, where" 31741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "\n" << e1 << " evaluates to " << v1 31841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "\n" << e2 << " evaluates to " << v2 31941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "\n" << e3 << " evaluates to " << v3 32041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "\n" << e4 << " evaluates to " << v4 32141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "\n" << e5 << " evaluates to " << v5; 3221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 3231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5. 3251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Don't use this in your code. 3261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ 3271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5),\ 3281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania on_failure) 3291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Internal macro for implementing {EXPECT|ASSERT}_PRED5. Don't use 3311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// this in your code. 3321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ 3331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \ 3341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #v1, \ 3351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #v2, \ 3361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #v3, \ 3371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #v4, \ 3381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #v5, \ 3391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania pred, \ 3401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania v1, \ 3411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania v2, \ 3421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania v3, \ 3431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania v4, \ 3441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania v5), on_failure) 3451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 5-ary predicate assertion macros. 3471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ 3481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) 3491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \ 3501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) 3511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ 3521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) 3531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \ 3541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) 3551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ 359