17ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Copyright 2006, Google Inc. 27ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// All rights reserved. 37ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 47ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Redistribution and use in source and binary forms, with or without 57ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// modification, are permitted provided that the following conditions are 67ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// met: 77ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 87ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * Redistributions of source code must retain the above copyright 97ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// notice, this list of conditions and the following disclaimer. 107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * Redistributions in binary form must reproduce the above 117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// copyright notice, this list of conditions and the following disclaimer 127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// in the documentation and/or other materials provided with the 137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// distribution. 147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * Neither the name of Google Inc. nor the names of its 157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// contributors may be used to endorse or promote products derived from 167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this software without specific prior written permission. 177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 30b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// This file is AUTOMATICALLY GENERATED on 09/24/2010 by command 317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND! 327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Implements a family of generic predicate assertion macros. 347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ 367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ 377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Makes sure this header is not included before gtest.h. 397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ 40b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# error Do not include gtest_pred_impl.h directly. Include gtest.h instead. 417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_INCLUDE_GTEST_GTEST_H_ 427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// This header implements a family of generic predicate assertion 447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// macros: 457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_PRED_FORMAT1(pred_format, v1) 477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_PRED_FORMAT2(pred_format, v1, v2) 487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ... 497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// where pred_format is a function or functor that takes n (in the 517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// case of ASSERT_PRED_FORMATn) values and their source expression 527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// text, and returns a testing::AssertionResult. See the definition 537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// of ASSERT_EQ in gtest.h for an example. 547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// If you don't care about formatting, you can use the more 567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// restrictive version: 577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_PRED1(pred, v1) 597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_PRED2(pred, v1, v2) 607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ... 617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// where pred is an n-ary function or functor that returns bool, 637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// and the values v1, v2, ..., must support the << operator for 647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// streaming to std::ostream. 657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// We also define the EXPECT_* variations. 677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// For now we only support predicates whose arity is at most 5. 697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Please email googletestframework@googlegroups.com if you need 707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// support for higher arities. 717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// GTEST_ASSERT_ is the basic statement to which all of the assertions 737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// in this file reduce. Don't use this in your code. 747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_ASSERT_(expression, on_failure) \ 767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (const ::testing::AssertionResult gtest_ar = (expression)) \ 787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ; \ 797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman else \ 807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman on_failure(gtest_ar.failure_message()) 817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Helper function for implementing {EXPECT|ASSERT}_PRED1. Don't use 847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this in your code. 857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename Pred, 867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T1> 877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanAssertionResult AssertPred1Helper(const char* pred_text, 887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* e1, 897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Pred pred, 907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1& v1) { 917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (pred(v1)) return AssertionSuccess(); 927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 93b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return AssertionFailure() << pred_text << "(" 94b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << e1 << ") evaluates to false, where" 95b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "\n" << e1 << " evaluates to " << v1; 967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1. 997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Don't use this in your code. 1007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\ 1017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_ASSERT_(pred_format(#v1, v1),\ 1027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman on_failure) 1037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Internal macro for implementing {EXPECT|ASSERT}_PRED1. Don't use 1057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this in your code. 1067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_PRED1_(pred, v1, on_failure)\ 1077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \ 1087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman #v1, \ 1097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman pred, \ 1107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v1), on_failure) 1117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Unary predicate assertion macros. 1137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_PRED_FORMAT1(pred_format, v1) \ 1147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_) 1157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_PRED1(pred, v1) \ 1167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_) 1177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_PRED_FORMAT1(pred_format, v1) \ 1187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_) 1197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_PRED1(pred, v1) \ 1207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_) 1217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Helper function for implementing {EXPECT|ASSERT}_PRED2. Don't use 1257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this in your code. 1267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename Pred, 1277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T1, 1287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T2> 1297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanAssertionResult AssertPred2Helper(const char* pred_text, 1307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* e1, 1317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* e2, 1327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Pred pred, 1337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1& v1, 1347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2& v2) { 1357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (pred(v1, v2)) return AssertionSuccess(); 1367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 137b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return AssertionFailure() << pred_text << "(" 138b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << e1 << ", " 139b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << e2 << ") evaluates to false, where" 140b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "\n" << e1 << " evaluates to " << v1 141b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "\n" << e2 << " evaluates to " << v2; 1427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 1437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2. 1457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Don't use this in your code. 1467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\ 1477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2),\ 1487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman on_failure) 1497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Internal macro for implementing {EXPECT|ASSERT}_PRED2. Don't use 1517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this in your code. 1527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_PRED2_(pred, v1, v2, on_failure)\ 1537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \ 1547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman #v1, \ 1557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman #v2, \ 1567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman pred, \ 1577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v1, \ 1587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v2), on_failure) 1597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Binary predicate assertion macros. 1617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \ 1627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_) 1637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_PRED2(pred, v1, v2) \ 1647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_) 1657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \ 1667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_) 1677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_PRED2(pred, v1, v2) \ 1687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_) 1697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Helper function for implementing {EXPECT|ASSERT}_PRED3. Don't use 1737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this in your code. 1747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename Pred, 1757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T1, 1767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T2, 1777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T3> 1787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanAssertionResult AssertPred3Helper(const char* pred_text, 1797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* e1, 1807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* e2, 1817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* e3, 1827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Pred pred, 1837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1& v1, 1847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2& v2, 1857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3& v3) { 1867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (pred(v1, v2, v3)) return AssertionSuccess(); 1877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 188b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return AssertionFailure() << pred_text << "(" 189b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << e1 << ", " 190b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << e2 << ", " 191b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << e3 << ") evaluates to false, where" 192b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "\n" << e1 << " evaluates to " << v1 193b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "\n" << e2 << " evaluates to " << v2 194b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "\n" << e3 << " evaluates to " << v3; 1957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 1967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3. 1987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Don't use this in your code. 1997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\ 2007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3),\ 2017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman on_failure) 2027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Internal macro for implementing {EXPECT|ASSERT}_PRED3. Don't use 2047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this in your code. 2057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\ 2067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \ 2077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman #v1, \ 2087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman #v2, \ 2097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman #v3, \ 2107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman pred, \ 2117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v1, \ 2127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v2, \ 2137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v3), on_failure) 2147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Ternary predicate assertion macros. 2167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \ 2177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_) 2187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_PRED3(pred, v1, v2, v3) \ 2197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_) 2207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \ 2217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_) 2227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_PRED3(pred, v1, v2, v3) \ 2237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_) 2247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Helper function for implementing {EXPECT|ASSERT}_PRED4. Don't use 2287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this in your code. 2297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename Pred, 2307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T1, 2317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T2, 2327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T3, 2337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T4> 2347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanAssertionResult AssertPred4Helper(const char* pred_text, 2357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* e1, 2367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* e2, 2377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* e3, 2387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* e4, 2397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Pred pred, 2407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1& v1, 2417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2& v2, 2427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3& v3, 2437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4& v4) { 2447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (pred(v1, v2, v3, v4)) return AssertionSuccess(); 2457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 246b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return AssertionFailure() << pred_text << "(" 247b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << e1 << ", " 248b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << e2 << ", " 249b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << e3 << ", " 250b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << e4 << ") evaluates to false, where" 251b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "\n" << e1 << " evaluates to " << v1 252b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "\n" << e2 << " evaluates to " << v2 253b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "\n" << e3 << " evaluates to " << v3 254b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "\n" << e4 << " evaluates to " << v4; 2557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 2567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4. 2587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Don't use this in your code. 2597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\ 2607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4),\ 2617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman on_failure) 2627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Internal macro for implementing {EXPECT|ASSERT}_PRED4. Don't use 2647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this in your code. 2657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\ 2667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \ 2677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman #v1, \ 2687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman #v2, \ 2697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman #v3, \ 2707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman #v4, \ 2717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman pred, \ 2727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v1, \ 2737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v2, \ 2747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v3, \ 2757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v4), on_failure) 2767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 4-ary predicate assertion macros. 2787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ 2797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) 2807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_PRED4(pred, v1, v2, v3, v4) \ 2817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) 2827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ 2837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) 2847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_PRED4(pred, v1, v2, v3, v4) \ 2857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) 2867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Helper function for implementing {EXPECT|ASSERT}_PRED5. Don't use 2907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this in your code. 2917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename Pred, 2927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T1, 2937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T2, 2947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T3, 2957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T4, 2967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T5> 2977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanAssertionResult AssertPred5Helper(const char* pred_text, 2987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* e1, 2997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* e2, 3007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* e3, 3017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* e4, 3027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* e5, 3037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Pred pred, 3047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1& v1, 3057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2& v2, 3067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3& v3, 3077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4& v4, 3087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5& v5) { 3097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); 3107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 311b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return AssertionFailure() << pred_text << "(" 312b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << e1 << ", " 313b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << e2 << ", " 314b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << e3 << ", " 315b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << e4 << ", " 316b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << e5 << ") evaluates to false, where" 317b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "\n" << e1 << " evaluates to " << v1 318b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "\n" << e2 << " evaluates to " << v2 319b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "\n" << e3 << " evaluates to " << v3 320b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "\n" << e4 << " evaluates to " << v4 321b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "\n" << e5 << " evaluates to " << v5; 3227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 3237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5. 3257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Don't use this in your code. 3267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ 3277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5),\ 3287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman on_failure) 3297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Internal macro for implementing {EXPECT|ASSERT}_PRED5. Don't use 3317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this in your code. 3327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ 3337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \ 3347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman #v1, \ 3357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman #v2, \ 3367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman #v3, \ 3377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman #v4, \ 3387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman #v5, \ 3397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman pred, \ 3407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v1, \ 3417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v2, \ 3427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v3, \ 3437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v4, \ 3447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v5), on_failure) 3457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 5-ary predicate assertion macros. 3477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ 3487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) 3497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \ 3507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) 3517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ 3527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) 3537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \ 3547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) 3557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ 359