1*b89a7cc2SEnji Cooper // Copyright 2006, Google Inc. 2*b89a7cc2SEnji Cooper // All rights reserved. 3*b89a7cc2SEnji Cooper // 4*b89a7cc2SEnji Cooper // Redistribution and use in source and binary forms, with or without 5*b89a7cc2SEnji Cooper // modification, are permitted provided that the following conditions are 6*b89a7cc2SEnji Cooper // met: 7*b89a7cc2SEnji Cooper // 8*b89a7cc2SEnji Cooper // * Redistributions of source code must retain the above copyright 9*b89a7cc2SEnji Cooper // notice, this list of conditions and the following disclaimer. 10*b89a7cc2SEnji Cooper // * Redistributions in binary form must reproduce the above 11*b89a7cc2SEnji Cooper // copyright notice, this list of conditions and the following disclaimer 12*b89a7cc2SEnji Cooper // in the documentation and/or other materials provided with the 13*b89a7cc2SEnji Cooper // distribution. 14*b89a7cc2SEnji Cooper // * Neither the name of Google Inc. nor the names of its 15*b89a7cc2SEnji Cooper // contributors may be used to endorse or promote products derived from 16*b89a7cc2SEnji Cooper // this software without specific prior written permission. 17*b89a7cc2SEnji Cooper // 18*b89a7cc2SEnji Cooper // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19*b89a7cc2SEnji Cooper // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20*b89a7cc2SEnji Cooper // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21*b89a7cc2SEnji Cooper // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22*b89a7cc2SEnji Cooper // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23*b89a7cc2SEnji Cooper // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24*b89a7cc2SEnji Cooper // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25*b89a7cc2SEnji Cooper // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26*b89a7cc2SEnji Cooper // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27*b89a7cc2SEnji Cooper // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28*b89a7cc2SEnji Cooper // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29*b89a7cc2SEnji Cooper 30*b89a7cc2SEnji Cooper // This file is AUTOMATICALLY GENERATED on 01/02/2018 by command 31*b89a7cc2SEnji Cooper // 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND! 32*b89a7cc2SEnji Cooper 33*b89a7cc2SEnji Cooper // Regression test for gtest_pred_impl.h 34*b89a7cc2SEnji Cooper // 35*b89a7cc2SEnji Cooper // This file is generated by a script and quite long. If you intend to 36*b89a7cc2SEnji Cooper // learn how Google Test works by reading its unit tests, read 37*b89a7cc2SEnji Cooper // gtest_unittest.cc instead. 38*b89a7cc2SEnji Cooper // 39*b89a7cc2SEnji Cooper // This is intended as a regression test for the Google Test predicate 40*b89a7cc2SEnji Cooper // assertions. We compile it as part of the gtest_unittest target 41*b89a7cc2SEnji Cooper // only to keep the implementation tidy and compact, as it is quite 42*b89a7cc2SEnji Cooper // involved to set up the stage for testing Google Test using Google 43*b89a7cc2SEnji Cooper // Test itself. 44*b89a7cc2SEnji Cooper // 45*b89a7cc2SEnji Cooper // Currently, gtest_unittest takes ~11 seconds to run in the testing 46*b89a7cc2SEnji Cooper // daemon. In the future, if it grows too large and needs much more 47*b89a7cc2SEnji Cooper // time to finish, we should consider separating this file into a 48*b89a7cc2SEnji Cooper // stand-alone regression test. 49*b89a7cc2SEnji Cooper 50*b89a7cc2SEnji Cooper #include <iostream> 51*b89a7cc2SEnji Cooper 52*b89a7cc2SEnji Cooper #include "gtest/gtest.h" 53*b89a7cc2SEnji Cooper #include "gtest/gtest-spi.h" 54*b89a7cc2SEnji Cooper 55*b89a7cc2SEnji Cooper // A user-defined data type. 56*b89a7cc2SEnji Cooper struct Bool { 57*b89a7cc2SEnji Cooper explicit Bool(int val) : value(val != 0) {} 58*b89a7cc2SEnji Cooper 59*b89a7cc2SEnji Cooper bool operator>(int n) const { return value > Bool(n).value; } 60*b89a7cc2SEnji Cooper 61*b89a7cc2SEnji Cooper Bool operator+(const Bool& rhs) const { return Bool(value + rhs.value); } 62*b89a7cc2SEnji Cooper 63*b89a7cc2SEnji Cooper bool operator==(const Bool& rhs) const { return value == rhs.value; } 64*b89a7cc2SEnji Cooper 65*b89a7cc2SEnji Cooper bool value; 66*b89a7cc2SEnji Cooper }; 67*b89a7cc2SEnji Cooper 68*b89a7cc2SEnji Cooper // Enables Bool to be used in assertions. 69*b89a7cc2SEnji Cooper std::ostream& operator<<(std::ostream& os, const Bool& x) { 70*b89a7cc2SEnji Cooper return os << (x.value ? "true" : "false"); 71*b89a7cc2SEnji Cooper } 72*b89a7cc2SEnji Cooper 73*b89a7cc2SEnji Cooper // Sample functions/functors for testing unary predicate assertions. 74*b89a7cc2SEnji Cooper 75*b89a7cc2SEnji Cooper // A unary predicate function. 76*b89a7cc2SEnji Cooper template <typename T1> 77*b89a7cc2SEnji Cooper bool PredFunction1(T1 v1) { 78*b89a7cc2SEnji Cooper return v1 > 0; 79*b89a7cc2SEnji Cooper } 80*b89a7cc2SEnji Cooper 81*b89a7cc2SEnji Cooper // The following two functions are needed to circumvent a bug in 82*b89a7cc2SEnji Cooper // gcc 2.95.3, which sometimes has problem with the above template 83*b89a7cc2SEnji Cooper // function. 84*b89a7cc2SEnji Cooper bool PredFunction1Int(int v1) { 85*b89a7cc2SEnji Cooper return v1 > 0; 86*b89a7cc2SEnji Cooper } 87*b89a7cc2SEnji Cooper bool PredFunction1Bool(Bool v1) { 88*b89a7cc2SEnji Cooper return v1 > 0; 89*b89a7cc2SEnji Cooper } 90*b89a7cc2SEnji Cooper 91*b89a7cc2SEnji Cooper // A unary predicate functor. 92*b89a7cc2SEnji Cooper struct PredFunctor1 { 93*b89a7cc2SEnji Cooper template <typename T1> 94*b89a7cc2SEnji Cooper bool operator()(const T1& v1) { 95*b89a7cc2SEnji Cooper return v1 > 0; 96*b89a7cc2SEnji Cooper } 97*b89a7cc2SEnji Cooper }; 98*b89a7cc2SEnji Cooper 99*b89a7cc2SEnji Cooper // A unary predicate-formatter function. 100*b89a7cc2SEnji Cooper template <typename T1> 101*b89a7cc2SEnji Cooper testing::AssertionResult PredFormatFunction1(const char* e1, 102*b89a7cc2SEnji Cooper const T1& v1) { 103*b89a7cc2SEnji Cooper if (PredFunction1(v1)) 104*b89a7cc2SEnji Cooper return testing::AssertionSuccess(); 105*b89a7cc2SEnji Cooper 106*b89a7cc2SEnji Cooper return testing::AssertionFailure() 107*b89a7cc2SEnji Cooper << e1 108*b89a7cc2SEnji Cooper << " is expected to be positive, but evaluates to " 109*b89a7cc2SEnji Cooper << v1 << "."; 110*b89a7cc2SEnji Cooper } 111*b89a7cc2SEnji Cooper 112*b89a7cc2SEnji Cooper // A unary predicate-formatter functor. 113*b89a7cc2SEnji Cooper struct PredFormatFunctor1 { 114*b89a7cc2SEnji Cooper template <typename T1> 115*b89a7cc2SEnji Cooper testing::AssertionResult operator()(const char* e1, 116*b89a7cc2SEnji Cooper const T1& v1) const { 117*b89a7cc2SEnji Cooper return PredFormatFunction1(e1, v1); 118*b89a7cc2SEnji Cooper } 119*b89a7cc2SEnji Cooper }; 120*b89a7cc2SEnji Cooper 121*b89a7cc2SEnji Cooper // Tests for {EXPECT|ASSERT}_PRED_FORMAT1. 122*b89a7cc2SEnji Cooper 123*b89a7cc2SEnji Cooper class Predicate1Test : public testing::Test { 124*b89a7cc2SEnji Cooper protected: 125*b89a7cc2SEnji Cooper virtual void SetUp() { 126*b89a7cc2SEnji Cooper expected_to_finish_ = true; 127*b89a7cc2SEnji Cooper finished_ = false; 128*b89a7cc2SEnji Cooper n1_ = 0; 129*b89a7cc2SEnji Cooper } 130*b89a7cc2SEnji Cooper 131*b89a7cc2SEnji Cooper virtual void TearDown() { 132*b89a7cc2SEnji Cooper // Verifies that each of the predicate's arguments was evaluated 133*b89a7cc2SEnji Cooper // exactly once. 134*b89a7cc2SEnji Cooper EXPECT_EQ(1, n1_) << 135*b89a7cc2SEnji Cooper "The predicate assertion didn't evaluate argument 2 " 136*b89a7cc2SEnji Cooper "exactly once."; 137*b89a7cc2SEnji Cooper 138*b89a7cc2SEnji Cooper // Verifies that the control flow in the test function is expected. 139*b89a7cc2SEnji Cooper if (expected_to_finish_ && !finished_) { 140*b89a7cc2SEnji Cooper FAIL() << "The predicate assertion unexpactedly aborted the test."; 141*b89a7cc2SEnji Cooper } else if (!expected_to_finish_ && finished_) { 142*b89a7cc2SEnji Cooper FAIL() << "The failed predicate assertion didn't abort the test " 143*b89a7cc2SEnji Cooper "as expected."; 144*b89a7cc2SEnji Cooper } 145*b89a7cc2SEnji Cooper } 146*b89a7cc2SEnji Cooper 147*b89a7cc2SEnji Cooper // true iff the test function is expected to run to finish. 148*b89a7cc2SEnji Cooper static bool expected_to_finish_; 149*b89a7cc2SEnji Cooper 150*b89a7cc2SEnji Cooper // true iff the test function did run to finish. 151*b89a7cc2SEnji Cooper static bool finished_; 152*b89a7cc2SEnji Cooper 153*b89a7cc2SEnji Cooper static int n1_; 154*b89a7cc2SEnji Cooper }; 155*b89a7cc2SEnji Cooper 156*b89a7cc2SEnji Cooper bool Predicate1Test::expected_to_finish_; 157*b89a7cc2SEnji Cooper bool Predicate1Test::finished_; 158*b89a7cc2SEnji Cooper int Predicate1Test::n1_; 159*b89a7cc2SEnji Cooper 160*b89a7cc2SEnji Cooper typedef Predicate1Test EXPECT_PRED_FORMAT1Test; 161*b89a7cc2SEnji Cooper typedef Predicate1Test ASSERT_PRED_FORMAT1Test; 162*b89a7cc2SEnji Cooper typedef Predicate1Test EXPECT_PRED1Test; 163*b89a7cc2SEnji Cooper typedef Predicate1Test ASSERT_PRED1Test; 164*b89a7cc2SEnji Cooper 165*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED1 where the 166*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 167*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED1Test, FunctionOnBuiltInTypeSuccess) { 168*b89a7cc2SEnji Cooper EXPECT_PRED1(PredFunction1Int, 169*b89a7cc2SEnji Cooper ++n1_); 170*b89a7cc2SEnji Cooper finished_ = true; 171*b89a7cc2SEnji Cooper } 172*b89a7cc2SEnji Cooper 173*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED1 where the 174*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 175*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED1Test, FunctionOnUserTypeSuccess) { 176*b89a7cc2SEnji Cooper EXPECT_PRED1(PredFunction1Bool, 177*b89a7cc2SEnji Cooper Bool(++n1_)); 178*b89a7cc2SEnji Cooper finished_ = true; 179*b89a7cc2SEnji Cooper } 180*b89a7cc2SEnji Cooper 181*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED1 where the 182*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 183*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED1Test, FunctorOnBuiltInTypeSuccess) { 184*b89a7cc2SEnji Cooper EXPECT_PRED1(PredFunctor1(), 185*b89a7cc2SEnji Cooper ++n1_); 186*b89a7cc2SEnji Cooper finished_ = true; 187*b89a7cc2SEnji Cooper } 188*b89a7cc2SEnji Cooper 189*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED1 where the 190*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 191*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED1Test, FunctorOnUserTypeSuccess) { 192*b89a7cc2SEnji Cooper EXPECT_PRED1(PredFunctor1(), 193*b89a7cc2SEnji Cooper Bool(++n1_)); 194*b89a7cc2SEnji Cooper finished_ = true; 195*b89a7cc2SEnji Cooper } 196*b89a7cc2SEnji Cooper 197*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED1 where the 198*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 199*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED1Test, FunctionOnBuiltInTypeFailure) { 200*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 201*b89a7cc2SEnji Cooper EXPECT_PRED1(PredFunction1Int, 202*b89a7cc2SEnji Cooper n1_++); 203*b89a7cc2SEnji Cooper finished_ = true; 204*b89a7cc2SEnji Cooper }, ""); 205*b89a7cc2SEnji Cooper } 206*b89a7cc2SEnji Cooper 207*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED1 where the 208*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 209*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED1Test, FunctionOnUserTypeFailure) { 210*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 211*b89a7cc2SEnji Cooper EXPECT_PRED1(PredFunction1Bool, 212*b89a7cc2SEnji Cooper Bool(n1_++)); 213*b89a7cc2SEnji Cooper finished_ = true; 214*b89a7cc2SEnji Cooper }, ""); 215*b89a7cc2SEnji Cooper } 216*b89a7cc2SEnji Cooper 217*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED1 where the 218*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 219*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED1Test, FunctorOnBuiltInTypeFailure) { 220*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 221*b89a7cc2SEnji Cooper EXPECT_PRED1(PredFunctor1(), 222*b89a7cc2SEnji Cooper n1_++); 223*b89a7cc2SEnji Cooper finished_ = true; 224*b89a7cc2SEnji Cooper }, ""); 225*b89a7cc2SEnji Cooper } 226*b89a7cc2SEnji Cooper 227*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED1 where the 228*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 229*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED1Test, FunctorOnUserTypeFailure) { 230*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 231*b89a7cc2SEnji Cooper EXPECT_PRED1(PredFunctor1(), 232*b89a7cc2SEnji Cooper Bool(n1_++)); 233*b89a7cc2SEnji Cooper finished_ = true; 234*b89a7cc2SEnji Cooper }, ""); 235*b89a7cc2SEnji Cooper } 236*b89a7cc2SEnji Cooper 237*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED1 where the 238*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 239*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED1Test, FunctionOnBuiltInTypeSuccess) { 240*b89a7cc2SEnji Cooper ASSERT_PRED1(PredFunction1Int, 241*b89a7cc2SEnji Cooper ++n1_); 242*b89a7cc2SEnji Cooper finished_ = true; 243*b89a7cc2SEnji Cooper } 244*b89a7cc2SEnji Cooper 245*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED1 where the 246*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 247*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED1Test, FunctionOnUserTypeSuccess) { 248*b89a7cc2SEnji Cooper ASSERT_PRED1(PredFunction1Bool, 249*b89a7cc2SEnji Cooper Bool(++n1_)); 250*b89a7cc2SEnji Cooper finished_ = true; 251*b89a7cc2SEnji Cooper } 252*b89a7cc2SEnji Cooper 253*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED1 where the 254*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 255*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED1Test, FunctorOnBuiltInTypeSuccess) { 256*b89a7cc2SEnji Cooper ASSERT_PRED1(PredFunctor1(), 257*b89a7cc2SEnji Cooper ++n1_); 258*b89a7cc2SEnji Cooper finished_ = true; 259*b89a7cc2SEnji Cooper } 260*b89a7cc2SEnji Cooper 261*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED1 where the 262*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 263*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED1Test, FunctorOnUserTypeSuccess) { 264*b89a7cc2SEnji Cooper ASSERT_PRED1(PredFunctor1(), 265*b89a7cc2SEnji Cooper Bool(++n1_)); 266*b89a7cc2SEnji Cooper finished_ = true; 267*b89a7cc2SEnji Cooper } 268*b89a7cc2SEnji Cooper 269*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED1 where the 270*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 271*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED1Test, FunctionOnBuiltInTypeFailure) { 272*b89a7cc2SEnji Cooper expected_to_finish_ = false; 273*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 274*b89a7cc2SEnji Cooper ASSERT_PRED1(PredFunction1Int, 275*b89a7cc2SEnji Cooper n1_++); 276*b89a7cc2SEnji Cooper finished_ = true; 277*b89a7cc2SEnji Cooper }, ""); 278*b89a7cc2SEnji Cooper } 279*b89a7cc2SEnji Cooper 280*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED1 where the 281*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 282*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED1Test, FunctionOnUserTypeFailure) { 283*b89a7cc2SEnji Cooper expected_to_finish_ = false; 284*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 285*b89a7cc2SEnji Cooper ASSERT_PRED1(PredFunction1Bool, 286*b89a7cc2SEnji Cooper Bool(n1_++)); 287*b89a7cc2SEnji Cooper finished_ = true; 288*b89a7cc2SEnji Cooper }, ""); 289*b89a7cc2SEnji Cooper } 290*b89a7cc2SEnji Cooper 291*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED1 where the 292*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 293*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED1Test, FunctorOnBuiltInTypeFailure) { 294*b89a7cc2SEnji Cooper expected_to_finish_ = false; 295*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 296*b89a7cc2SEnji Cooper ASSERT_PRED1(PredFunctor1(), 297*b89a7cc2SEnji Cooper n1_++); 298*b89a7cc2SEnji Cooper finished_ = true; 299*b89a7cc2SEnji Cooper }, ""); 300*b89a7cc2SEnji Cooper } 301*b89a7cc2SEnji Cooper 302*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED1 where the 303*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 304*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED1Test, FunctorOnUserTypeFailure) { 305*b89a7cc2SEnji Cooper expected_to_finish_ = false; 306*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 307*b89a7cc2SEnji Cooper ASSERT_PRED1(PredFunctor1(), 308*b89a7cc2SEnji Cooper Bool(n1_++)); 309*b89a7cc2SEnji Cooper finished_ = true; 310*b89a7cc2SEnji Cooper }, ""); 311*b89a7cc2SEnji Cooper } 312*b89a7cc2SEnji Cooper 313*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT1 where the 314*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 315*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnBuiltInTypeSuccess) { 316*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT1(PredFormatFunction1, 317*b89a7cc2SEnji Cooper ++n1_); 318*b89a7cc2SEnji Cooper finished_ = true; 319*b89a7cc2SEnji Cooper } 320*b89a7cc2SEnji Cooper 321*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT1 where the 322*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 323*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnUserTypeSuccess) { 324*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT1(PredFormatFunction1, 325*b89a7cc2SEnji Cooper Bool(++n1_)); 326*b89a7cc2SEnji Cooper finished_ = true; 327*b89a7cc2SEnji Cooper } 328*b89a7cc2SEnji Cooper 329*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT1 where the 330*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 331*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnBuiltInTypeSuccess) { 332*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT1(PredFormatFunctor1(), 333*b89a7cc2SEnji Cooper ++n1_); 334*b89a7cc2SEnji Cooper finished_ = true; 335*b89a7cc2SEnji Cooper } 336*b89a7cc2SEnji Cooper 337*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT1 where the 338*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 339*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnUserTypeSuccess) { 340*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT1(PredFormatFunctor1(), 341*b89a7cc2SEnji Cooper Bool(++n1_)); 342*b89a7cc2SEnji Cooper finished_ = true; 343*b89a7cc2SEnji Cooper } 344*b89a7cc2SEnji Cooper 345*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT1 where the 346*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 347*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnBuiltInTypeFailure) { 348*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 349*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT1(PredFormatFunction1, 350*b89a7cc2SEnji Cooper n1_++); 351*b89a7cc2SEnji Cooper finished_ = true; 352*b89a7cc2SEnji Cooper }, ""); 353*b89a7cc2SEnji Cooper } 354*b89a7cc2SEnji Cooper 355*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT1 where the 356*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 357*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnUserTypeFailure) { 358*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 359*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT1(PredFormatFunction1, 360*b89a7cc2SEnji Cooper Bool(n1_++)); 361*b89a7cc2SEnji Cooper finished_ = true; 362*b89a7cc2SEnji Cooper }, ""); 363*b89a7cc2SEnji Cooper } 364*b89a7cc2SEnji Cooper 365*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT1 where the 366*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 367*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnBuiltInTypeFailure) { 368*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 369*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT1(PredFormatFunctor1(), 370*b89a7cc2SEnji Cooper n1_++); 371*b89a7cc2SEnji Cooper finished_ = true; 372*b89a7cc2SEnji Cooper }, ""); 373*b89a7cc2SEnji Cooper } 374*b89a7cc2SEnji Cooper 375*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT1 where the 376*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 377*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnUserTypeFailure) { 378*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 379*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT1(PredFormatFunctor1(), 380*b89a7cc2SEnji Cooper Bool(n1_++)); 381*b89a7cc2SEnji Cooper finished_ = true; 382*b89a7cc2SEnji Cooper }, ""); 383*b89a7cc2SEnji Cooper } 384*b89a7cc2SEnji Cooper 385*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT1 where the 386*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 387*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnBuiltInTypeSuccess) { 388*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT1(PredFormatFunction1, 389*b89a7cc2SEnji Cooper ++n1_); 390*b89a7cc2SEnji Cooper finished_ = true; 391*b89a7cc2SEnji Cooper } 392*b89a7cc2SEnji Cooper 393*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT1 where the 394*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 395*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnUserTypeSuccess) { 396*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT1(PredFormatFunction1, 397*b89a7cc2SEnji Cooper Bool(++n1_)); 398*b89a7cc2SEnji Cooper finished_ = true; 399*b89a7cc2SEnji Cooper } 400*b89a7cc2SEnji Cooper 401*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT1 where the 402*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 403*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnBuiltInTypeSuccess) { 404*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT1(PredFormatFunctor1(), 405*b89a7cc2SEnji Cooper ++n1_); 406*b89a7cc2SEnji Cooper finished_ = true; 407*b89a7cc2SEnji Cooper } 408*b89a7cc2SEnji Cooper 409*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT1 where the 410*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 411*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnUserTypeSuccess) { 412*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT1(PredFormatFunctor1(), 413*b89a7cc2SEnji Cooper Bool(++n1_)); 414*b89a7cc2SEnji Cooper finished_ = true; 415*b89a7cc2SEnji Cooper } 416*b89a7cc2SEnji Cooper 417*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT1 where the 418*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 419*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnBuiltInTypeFailure) { 420*b89a7cc2SEnji Cooper expected_to_finish_ = false; 421*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 422*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT1(PredFormatFunction1, 423*b89a7cc2SEnji Cooper n1_++); 424*b89a7cc2SEnji Cooper finished_ = true; 425*b89a7cc2SEnji Cooper }, ""); 426*b89a7cc2SEnji Cooper } 427*b89a7cc2SEnji Cooper 428*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT1 where the 429*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 430*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnUserTypeFailure) { 431*b89a7cc2SEnji Cooper expected_to_finish_ = false; 432*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 433*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT1(PredFormatFunction1, 434*b89a7cc2SEnji Cooper Bool(n1_++)); 435*b89a7cc2SEnji Cooper finished_ = true; 436*b89a7cc2SEnji Cooper }, ""); 437*b89a7cc2SEnji Cooper } 438*b89a7cc2SEnji Cooper 439*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT1 where the 440*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 441*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnBuiltInTypeFailure) { 442*b89a7cc2SEnji Cooper expected_to_finish_ = false; 443*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 444*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT1(PredFormatFunctor1(), 445*b89a7cc2SEnji Cooper n1_++); 446*b89a7cc2SEnji Cooper finished_ = true; 447*b89a7cc2SEnji Cooper }, ""); 448*b89a7cc2SEnji Cooper } 449*b89a7cc2SEnji Cooper 450*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT1 where the 451*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 452*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnUserTypeFailure) { 453*b89a7cc2SEnji Cooper expected_to_finish_ = false; 454*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 455*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT1(PredFormatFunctor1(), 456*b89a7cc2SEnji Cooper Bool(n1_++)); 457*b89a7cc2SEnji Cooper finished_ = true; 458*b89a7cc2SEnji Cooper }, ""); 459*b89a7cc2SEnji Cooper } 460*b89a7cc2SEnji Cooper // Sample functions/functors for testing binary predicate assertions. 461*b89a7cc2SEnji Cooper 462*b89a7cc2SEnji Cooper // A binary predicate function. 463*b89a7cc2SEnji Cooper template <typename T1, typename T2> 464*b89a7cc2SEnji Cooper bool PredFunction2(T1 v1, T2 v2) { 465*b89a7cc2SEnji Cooper return v1 + v2 > 0; 466*b89a7cc2SEnji Cooper } 467*b89a7cc2SEnji Cooper 468*b89a7cc2SEnji Cooper // The following two functions are needed to circumvent a bug in 469*b89a7cc2SEnji Cooper // gcc 2.95.3, which sometimes has problem with the above template 470*b89a7cc2SEnji Cooper // function. 471*b89a7cc2SEnji Cooper bool PredFunction2Int(int v1, int v2) { 472*b89a7cc2SEnji Cooper return v1 + v2 > 0; 473*b89a7cc2SEnji Cooper } 474*b89a7cc2SEnji Cooper bool PredFunction2Bool(Bool v1, Bool v2) { 475*b89a7cc2SEnji Cooper return v1 + v2 > 0; 476*b89a7cc2SEnji Cooper } 477*b89a7cc2SEnji Cooper 478*b89a7cc2SEnji Cooper // A binary predicate functor. 479*b89a7cc2SEnji Cooper struct PredFunctor2 { 480*b89a7cc2SEnji Cooper template <typename T1, typename T2> 481*b89a7cc2SEnji Cooper bool operator()(const T1& v1, 482*b89a7cc2SEnji Cooper const T2& v2) { 483*b89a7cc2SEnji Cooper return v1 + v2 > 0; 484*b89a7cc2SEnji Cooper } 485*b89a7cc2SEnji Cooper }; 486*b89a7cc2SEnji Cooper 487*b89a7cc2SEnji Cooper // A binary predicate-formatter function. 488*b89a7cc2SEnji Cooper template <typename T1, typename T2> 489*b89a7cc2SEnji Cooper testing::AssertionResult PredFormatFunction2(const char* e1, 490*b89a7cc2SEnji Cooper const char* e2, 491*b89a7cc2SEnji Cooper const T1& v1, 492*b89a7cc2SEnji Cooper const T2& v2) { 493*b89a7cc2SEnji Cooper if (PredFunction2(v1, v2)) 494*b89a7cc2SEnji Cooper return testing::AssertionSuccess(); 495*b89a7cc2SEnji Cooper 496*b89a7cc2SEnji Cooper return testing::AssertionFailure() 497*b89a7cc2SEnji Cooper << e1 << " + " << e2 498*b89a7cc2SEnji Cooper << " is expected to be positive, but evaluates to " 499*b89a7cc2SEnji Cooper << v1 + v2 << "."; 500*b89a7cc2SEnji Cooper } 501*b89a7cc2SEnji Cooper 502*b89a7cc2SEnji Cooper // A binary predicate-formatter functor. 503*b89a7cc2SEnji Cooper struct PredFormatFunctor2 { 504*b89a7cc2SEnji Cooper template <typename T1, typename T2> 505*b89a7cc2SEnji Cooper testing::AssertionResult operator()(const char* e1, 506*b89a7cc2SEnji Cooper const char* e2, 507*b89a7cc2SEnji Cooper const T1& v1, 508*b89a7cc2SEnji Cooper const T2& v2) const { 509*b89a7cc2SEnji Cooper return PredFormatFunction2(e1, e2, v1, v2); 510*b89a7cc2SEnji Cooper } 511*b89a7cc2SEnji Cooper }; 512*b89a7cc2SEnji Cooper 513*b89a7cc2SEnji Cooper // Tests for {EXPECT|ASSERT}_PRED_FORMAT2. 514*b89a7cc2SEnji Cooper 515*b89a7cc2SEnji Cooper class Predicate2Test : public testing::Test { 516*b89a7cc2SEnji Cooper protected: 517*b89a7cc2SEnji Cooper virtual void SetUp() { 518*b89a7cc2SEnji Cooper expected_to_finish_ = true; 519*b89a7cc2SEnji Cooper finished_ = false; 520*b89a7cc2SEnji Cooper n1_ = n2_ = 0; 521*b89a7cc2SEnji Cooper } 522*b89a7cc2SEnji Cooper 523*b89a7cc2SEnji Cooper virtual void TearDown() { 524*b89a7cc2SEnji Cooper // Verifies that each of the predicate's arguments was evaluated 525*b89a7cc2SEnji Cooper // exactly once. 526*b89a7cc2SEnji Cooper EXPECT_EQ(1, n1_) << 527*b89a7cc2SEnji Cooper "The predicate assertion didn't evaluate argument 2 " 528*b89a7cc2SEnji Cooper "exactly once."; 529*b89a7cc2SEnji Cooper EXPECT_EQ(1, n2_) << 530*b89a7cc2SEnji Cooper "The predicate assertion didn't evaluate argument 3 " 531*b89a7cc2SEnji Cooper "exactly once."; 532*b89a7cc2SEnji Cooper 533*b89a7cc2SEnji Cooper // Verifies that the control flow in the test function is expected. 534*b89a7cc2SEnji Cooper if (expected_to_finish_ && !finished_) { 535*b89a7cc2SEnji Cooper FAIL() << "The predicate assertion unexpactedly aborted the test."; 536*b89a7cc2SEnji Cooper } else if (!expected_to_finish_ && finished_) { 537*b89a7cc2SEnji Cooper FAIL() << "The failed predicate assertion didn't abort the test " 538*b89a7cc2SEnji Cooper "as expected."; 539*b89a7cc2SEnji Cooper } 540*b89a7cc2SEnji Cooper } 541*b89a7cc2SEnji Cooper 542*b89a7cc2SEnji Cooper // true iff the test function is expected to run to finish. 543*b89a7cc2SEnji Cooper static bool expected_to_finish_; 544*b89a7cc2SEnji Cooper 545*b89a7cc2SEnji Cooper // true iff the test function did run to finish. 546*b89a7cc2SEnji Cooper static bool finished_; 547*b89a7cc2SEnji Cooper 548*b89a7cc2SEnji Cooper static int n1_; 549*b89a7cc2SEnji Cooper static int n2_; 550*b89a7cc2SEnji Cooper }; 551*b89a7cc2SEnji Cooper 552*b89a7cc2SEnji Cooper bool Predicate2Test::expected_to_finish_; 553*b89a7cc2SEnji Cooper bool Predicate2Test::finished_; 554*b89a7cc2SEnji Cooper int Predicate2Test::n1_; 555*b89a7cc2SEnji Cooper int Predicate2Test::n2_; 556*b89a7cc2SEnji Cooper 557*b89a7cc2SEnji Cooper typedef Predicate2Test EXPECT_PRED_FORMAT2Test; 558*b89a7cc2SEnji Cooper typedef Predicate2Test ASSERT_PRED_FORMAT2Test; 559*b89a7cc2SEnji Cooper typedef Predicate2Test EXPECT_PRED2Test; 560*b89a7cc2SEnji Cooper typedef Predicate2Test ASSERT_PRED2Test; 561*b89a7cc2SEnji Cooper 562*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED2 where the 563*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 564*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED2Test, FunctionOnBuiltInTypeSuccess) { 565*b89a7cc2SEnji Cooper EXPECT_PRED2(PredFunction2Int, 566*b89a7cc2SEnji Cooper ++n1_, 567*b89a7cc2SEnji Cooper ++n2_); 568*b89a7cc2SEnji Cooper finished_ = true; 569*b89a7cc2SEnji Cooper } 570*b89a7cc2SEnji Cooper 571*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED2 where the 572*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 573*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED2Test, FunctionOnUserTypeSuccess) { 574*b89a7cc2SEnji Cooper EXPECT_PRED2(PredFunction2Bool, 575*b89a7cc2SEnji Cooper Bool(++n1_), 576*b89a7cc2SEnji Cooper Bool(++n2_)); 577*b89a7cc2SEnji Cooper finished_ = true; 578*b89a7cc2SEnji Cooper } 579*b89a7cc2SEnji Cooper 580*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED2 where the 581*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 582*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED2Test, FunctorOnBuiltInTypeSuccess) { 583*b89a7cc2SEnji Cooper EXPECT_PRED2(PredFunctor2(), 584*b89a7cc2SEnji Cooper ++n1_, 585*b89a7cc2SEnji Cooper ++n2_); 586*b89a7cc2SEnji Cooper finished_ = true; 587*b89a7cc2SEnji Cooper } 588*b89a7cc2SEnji Cooper 589*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED2 where the 590*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 591*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED2Test, FunctorOnUserTypeSuccess) { 592*b89a7cc2SEnji Cooper EXPECT_PRED2(PredFunctor2(), 593*b89a7cc2SEnji Cooper Bool(++n1_), 594*b89a7cc2SEnji Cooper Bool(++n2_)); 595*b89a7cc2SEnji Cooper finished_ = true; 596*b89a7cc2SEnji Cooper } 597*b89a7cc2SEnji Cooper 598*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED2 where the 599*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 600*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED2Test, FunctionOnBuiltInTypeFailure) { 601*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 602*b89a7cc2SEnji Cooper EXPECT_PRED2(PredFunction2Int, 603*b89a7cc2SEnji Cooper n1_++, 604*b89a7cc2SEnji Cooper n2_++); 605*b89a7cc2SEnji Cooper finished_ = true; 606*b89a7cc2SEnji Cooper }, ""); 607*b89a7cc2SEnji Cooper } 608*b89a7cc2SEnji Cooper 609*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED2 where the 610*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 611*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED2Test, FunctionOnUserTypeFailure) { 612*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 613*b89a7cc2SEnji Cooper EXPECT_PRED2(PredFunction2Bool, 614*b89a7cc2SEnji Cooper Bool(n1_++), 615*b89a7cc2SEnji Cooper Bool(n2_++)); 616*b89a7cc2SEnji Cooper finished_ = true; 617*b89a7cc2SEnji Cooper }, ""); 618*b89a7cc2SEnji Cooper } 619*b89a7cc2SEnji Cooper 620*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED2 where the 621*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 622*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED2Test, FunctorOnBuiltInTypeFailure) { 623*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 624*b89a7cc2SEnji Cooper EXPECT_PRED2(PredFunctor2(), 625*b89a7cc2SEnji Cooper n1_++, 626*b89a7cc2SEnji Cooper n2_++); 627*b89a7cc2SEnji Cooper finished_ = true; 628*b89a7cc2SEnji Cooper }, ""); 629*b89a7cc2SEnji Cooper } 630*b89a7cc2SEnji Cooper 631*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED2 where the 632*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 633*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED2Test, FunctorOnUserTypeFailure) { 634*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 635*b89a7cc2SEnji Cooper EXPECT_PRED2(PredFunctor2(), 636*b89a7cc2SEnji Cooper Bool(n1_++), 637*b89a7cc2SEnji Cooper Bool(n2_++)); 638*b89a7cc2SEnji Cooper finished_ = true; 639*b89a7cc2SEnji Cooper }, ""); 640*b89a7cc2SEnji Cooper } 641*b89a7cc2SEnji Cooper 642*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED2 where the 643*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 644*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED2Test, FunctionOnBuiltInTypeSuccess) { 645*b89a7cc2SEnji Cooper ASSERT_PRED2(PredFunction2Int, 646*b89a7cc2SEnji Cooper ++n1_, 647*b89a7cc2SEnji Cooper ++n2_); 648*b89a7cc2SEnji Cooper finished_ = true; 649*b89a7cc2SEnji Cooper } 650*b89a7cc2SEnji Cooper 651*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED2 where the 652*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 653*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED2Test, FunctionOnUserTypeSuccess) { 654*b89a7cc2SEnji Cooper ASSERT_PRED2(PredFunction2Bool, 655*b89a7cc2SEnji Cooper Bool(++n1_), 656*b89a7cc2SEnji Cooper Bool(++n2_)); 657*b89a7cc2SEnji Cooper finished_ = true; 658*b89a7cc2SEnji Cooper } 659*b89a7cc2SEnji Cooper 660*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED2 where the 661*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 662*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED2Test, FunctorOnBuiltInTypeSuccess) { 663*b89a7cc2SEnji Cooper ASSERT_PRED2(PredFunctor2(), 664*b89a7cc2SEnji Cooper ++n1_, 665*b89a7cc2SEnji Cooper ++n2_); 666*b89a7cc2SEnji Cooper finished_ = true; 667*b89a7cc2SEnji Cooper } 668*b89a7cc2SEnji Cooper 669*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED2 where the 670*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 671*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED2Test, FunctorOnUserTypeSuccess) { 672*b89a7cc2SEnji Cooper ASSERT_PRED2(PredFunctor2(), 673*b89a7cc2SEnji Cooper Bool(++n1_), 674*b89a7cc2SEnji Cooper Bool(++n2_)); 675*b89a7cc2SEnji Cooper finished_ = true; 676*b89a7cc2SEnji Cooper } 677*b89a7cc2SEnji Cooper 678*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED2 where the 679*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 680*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED2Test, FunctionOnBuiltInTypeFailure) { 681*b89a7cc2SEnji Cooper expected_to_finish_ = false; 682*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 683*b89a7cc2SEnji Cooper ASSERT_PRED2(PredFunction2Int, 684*b89a7cc2SEnji Cooper n1_++, 685*b89a7cc2SEnji Cooper n2_++); 686*b89a7cc2SEnji Cooper finished_ = true; 687*b89a7cc2SEnji Cooper }, ""); 688*b89a7cc2SEnji Cooper } 689*b89a7cc2SEnji Cooper 690*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED2 where the 691*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 692*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED2Test, FunctionOnUserTypeFailure) { 693*b89a7cc2SEnji Cooper expected_to_finish_ = false; 694*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 695*b89a7cc2SEnji Cooper ASSERT_PRED2(PredFunction2Bool, 696*b89a7cc2SEnji Cooper Bool(n1_++), 697*b89a7cc2SEnji Cooper Bool(n2_++)); 698*b89a7cc2SEnji Cooper finished_ = true; 699*b89a7cc2SEnji Cooper }, ""); 700*b89a7cc2SEnji Cooper } 701*b89a7cc2SEnji Cooper 702*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED2 where the 703*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 704*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED2Test, FunctorOnBuiltInTypeFailure) { 705*b89a7cc2SEnji Cooper expected_to_finish_ = false; 706*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 707*b89a7cc2SEnji Cooper ASSERT_PRED2(PredFunctor2(), 708*b89a7cc2SEnji Cooper n1_++, 709*b89a7cc2SEnji Cooper n2_++); 710*b89a7cc2SEnji Cooper finished_ = true; 711*b89a7cc2SEnji Cooper }, ""); 712*b89a7cc2SEnji Cooper } 713*b89a7cc2SEnji Cooper 714*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED2 where the 715*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 716*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED2Test, FunctorOnUserTypeFailure) { 717*b89a7cc2SEnji Cooper expected_to_finish_ = false; 718*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 719*b89a7cc2SEnji Cooper ASSERT_PRED2(PredFunctor2(), 720*b89a7cc2SEnji Cooper Bool(n1_++), 721*b89a7cc2SEnji Cooper Bool(n2_++)); 722*b89a7cc2SEnji Cooper finished_ = true; 723*b89a7cc2SEnji Cooper }, ""); 724*b89a7cc2SEnji Cooper } 725*b89a7cc2SEnji Cooper 726*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT2 where the 727*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 728*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnBuiltInTypeSuccess) { 729*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT2(PredFormatFunction2, 730*b89a7cc2SEnji Cooper ++n1_, 731*b89a7cc2SEnji Cooper ++n2_); 732*b89a7cc2SEnji Cooper finished_ = true; 733*b89a7cc2SEnji Cooper } 734*b89a7cc2SEnji Cooper 735*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT2 where the 736*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 737*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnUserTypeSuccess) { 738*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT2(PredFormatFunction2, 739*b89a7cc2SEnji Cooper Bool(++n1_), 740*b89a7cc2SEnji Cooper Bool(++n2_)); 741*b89a7cc2SEnji Cooper finished_ = true; 742*b89a7cc2SEnji Cooper } 743*b89a7cc2SEnji Cooper 744*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT2 where the 745*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 746*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnBuiltInTypeSuccess) { 747*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT2(PredFormatFunctor2(), 748*b89a7cc2SEnji Cooper ++n1_, 749*b89a7cc2SEnji Cooper ++n2_); 750*b89a7cc2SEnji Cooper finished_ = true; 751*b89a7cc2SEnji Cooper } 752*b89a7cc2SEnji Cooper 753*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT2 where the 754*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 755*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnUserTypeSuccess) { 756*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT2(PredFormatFunctor2(), 757*b89a7cc2SEnji Cooper Bool(++n1_), 758*b89a7cc2SEnji Cooper Bool(++n2_)); 759*b89a7cc2SEnji Cooper finished_ = true; 760*b89a7cc2SEnji Cooper } 761*b89a7cc2SEnji Cooper 762*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT2 where the 763*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 764*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnBuiltInTypeFailure) { 765*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 766*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT2(PredFormatFunction2, 767*b89a7cc2SEnji Cooper n1_++, 768*b89a7cc2SEnji Cooper n2_++); 769*b89a7cc2SEnji Cooper finished_ = true; 770*b89a7cc2SEnji Cooper }, ""); 771*b89a7cc2SEnji Cooper } 772*b89a7cc2SEnji Cooper 773*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT2 where the 774*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 775*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnUserTypeFailure) { 776*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 777*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT2(PredFormatFunction2, 778*b89a7cc2SEnji Cooper Bool(n1_++), 779*b89a7cc2SEnji Cooper Bool(n2_++)); 780*b89a7cc2SEnji Cooper finished_ = true; 781*b89a7cc2SEnji Cooper }, ""); 782*b89a7cc2SEnji Cooper } 783*b89a7cc2SEnji Cooper 784*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT2 where the 785*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 786*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnBuiltInTypeFailure) { 787*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 788*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT2(PredFormatFunctor2(), 789*b89a7cc2SEnji Cooper n1_++, 790*b89a7cc2SEnji Cooper n2_++); 791*b89a7cc2SEnji Cooper finished_ = true; 792*b89a7cc2SEnji Cooper }, ""); 793*b89a7cc2SEnji Cooper } 794*b89a7cc2SEnji Cooper 795*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT2 where the 796*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 797*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnUserTypeFailure) { 798*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 799*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT2(PredFormatFunctor2(), 800*b89a7cc2SEnji Cooper Bool(n1_++), 801*b89a7cc2SEnji Cooper Bool(n2_++)); 802*b89a7cc2SEnji Cooper finished_ = true; 803*b89a7cc2SEnji Cooper }, ""); 804*b89a7cc2SEnji Cooper } 805*b89a7cc2SEnji Cooper 806*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT2 where the 807*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 808*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnBuiltInTypeSuccess) { 809*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT2(PredFormatFunction2, 810*b89a7cc2SEnji Cooper ++n1_, 811*b89a7cc2SEnji Cooper ++n2_); 812*b89a7cc2SEnji Cooper finished_ = true; 813*b89a7cc2SEnji Cooper } 814*b89a7cc2SEnji Cooper 815*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT2 where the 816*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 817*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnUserTypeSuccess) { 818*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT2(PredFormatFunction2, 819*b89a7cc2SEnji Cooper Bool(++n1_), 820*b89a7cc2SEnji Cooper Bool(++n2_)); 821*b89a7cc2SEnji Cooper finished_ = true; 822*b89a7cc2SEnji Cooper } 823*b89a7cc2SEnji Cooper 824*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT2 where the 825*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 826*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnBuiltInTypeSuccess) { 827*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT2(PredFormatFunctor2(), 828*b89a7cc2SEnji Cooper ++n1_, 829*b89a7cc2SEnji Cooper ++n2_); 830*b89a7cc2SEnji Cooper finished_ = true; 831*b89a7cc2SEnji Cooper } 832*b89a7cc2SEnji Cooper 833*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT2 where the 834*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 835*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnUserTypeSuccess) { 836*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT2(PredFormatFunctor2(), 837*b89a7cc2SEnji Cooper Bool(++n1_), 838*b89a7cc2SEnji Cooper Bool(++n2_)); 839*b89a7cc2SEnji Cooper finished_ = true; 840*b89a7cc2SEnji Cooper } 841*b89a7cc2SEnji Cooper 842*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT2 where the 843*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 844*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnBuiltInTypeFailure) { 845*b89a7cc2SEnji Cooper expected_to_finish_ = false; 846*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 847*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT2(PredFormatFunction2, 848*b89a7cc2SEnji Cooper n1_++, 849*b89a7cc2SEnji Cooper n2_++); 850*b89a7cc2SEnji Cooper finished_ = true; 851*b89a7cc2SEnji Cooper }, ""); 852*b89a7cc2SEnji Cooper } 853*b89a7cc2SEnji Cooper 854*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT2 where the 855*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 856*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnUserTypeFailure) { 857*b89a7cc2SEnji Cooper expected_to_finish_ = false; 858*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 859*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT2(PredFormatFunction2, 860*b89a7cc2SEnji Cooper Bool(n1_++), 861*b89a7cc2SEnji Cooper Bool(n2_++)); 862*b89a7cc2SEnji Cooper finished_ = true; 863*b89a7cc2SEnji Cooper }, ""); 864*b89a7cc2SEnji Cooper } 865*b89a7cc2SEnji Cooper 866*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT2 where the 867*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 868*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnBuiltInTypeFailure) { 869*b89a7cc2SEnji Cooper expected_to_finish_ = false; 870*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 871*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT2(PredFormatFunctor2(), 872*b89a7cc2SEnji Cooper n1_++, 873*b89a7cc2SEnji Cooper n2_++); 874*b89a7cc2SEnji Cooper finished_ = true; 875*b89a7cc2SEnji Cooper }, ""); 876*b89a7cc2SEnji Cooper } 877*b89a7cc2SEnji Cooper 878*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT2 where the 879*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 880*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnUserTypeFailure) { 881*b89a7cc2SEnji Cooper expected_to_finish_ = false; 882*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 883*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT2(PredFormatFunctor2(), 884*b89a7cc2SEnji Cooper Bool(n1_++), 885*b89a7cc2SEnji Cooper Bool(n2_++)); 886*b89a7cc2SEnji Cooper finished_ = true; 887*b89a7cc2SEnji Cooper }, ""); 888*b89a7cc2SEnji Cooper } 889*b89a7cc2SEnji Cooper // Sample functions/functors for testing ternary predicate assertions. 890*b89a7cc2SEnji Cooper 891*b89a7cc2SEnji Cooper // A ternary predicate function. 892*b89a7cc2SEnji Cooper template <typename T1, typename T2, typename T3> 893*b89a7cc2SEnji Cooper bool PredFunction3(T1 v1, T2 v2, T3 v3) { 894*b89a7cc2SEnji Cooper return v1 + v2 + v3 > 0; 895*b89a7cc2SEnji Cooper } 896*b89a7cc2SEnji Cooper 897*b89a7cc2SEnji Cooper // The following two functions are needed to circumvent a bug in 898*b89a7cc2SEnji Cooper // gcc 2.95.3, which sometimes has problem with the above template 899*b89a7cc2SEnji Cooper // function. 900*b89a7cc2SEnji Cooper bool PredFunction3Int(int v1, int v2, int v3) { 901*b89a7cc2SEnji Cooper return v1 + v2 + v3 > 0; 902*b89a7cc2SEnji Cooper } 903*b89a7cc2SEnji Cooper bool PredFunction3Bool(Bool v1, Bool v2, Bool v3) { 904*b89a7cc2SEnji Cooper return v1 + v2 + v3 > 0; 905*b89a7cc2SEnji Cooper } 906*b89a7cc2SEnji Cooper 907*b89a7cc2SEnji Cooper // A ternary predicate functor. 908*b89a7cc2SEnji Cooper struct PredFunctor3 { 909*b89a7cc2SEnji Cooper template <typename T1, typename T2, typename T3> 910*b89a7cc2SEnji Cooper bool operator()(const T1& v1, 911*b89a7cc2SEnji Cooper const T2& v2, 912*b89a7cc2SEnji Cooper const T3& v3) { 913*b89a7cc2SEnji Cooper return v1 + v2 + v3 > 0; 914*b89a7cc2SEnji Cooper } 915*b89a7cc2SEnji Cooper }; 916*b89a7cc2SEnji Cooper 917*b89a7cc2SEnji Cooper // A ternary predicate-formatter function. 918*b89a7cc2SEnji Cooper template <typename T1, typename T2, typename T3> 919*b89a7cc2SEnji Cooper testing::AssertionResult PredFormatFunction3(const char* e1, 920*b89a7cc2SEnji Cooper const char* e2, 921*b89a7cc2SEnji Cooper const char* e3, 922*b89a7cc2SEnji Cooper const T1& v1, 923*b89a7cc2SEnji Cooper const T2& v2, 924*b89a7cc2SEnji Cooper const T3& v3) { 925*b89a7cc2SEnji Cooper if (PredFunction3(v1, v2, v3)) 926*b89a7cc2SEnji Cooper return testing::AssertionSuccess(); 927*b89a7cc2SEnji Cooper 928*b89a7cc2SEnji Cooper return testing::AssertionFailure() 929*b89a7cc2SEnji Cooper << e1 << " + " << e2 << " + " << e3 930*b89a7cc2SEnji Cooper << " is expected to be positive, but evaluates to " 931*b89a7cc2SEnji Cooper << v1 + v2 + v3 << "."; 932*b89a7cc2SEnji Cooper } 933*b89a7cc2SEnji Cooper 934*b89a7cc2SEnji Cooper // A ternary predicate-formatter functor. 935*b89a7cc2SEnji Cooper struct PredFormatFunctor3 { 936*b89a7cc2SEnji Cooper template <typename T1, typename T2, typename T3> 937*b89a7cc2SEnji Cooper testing::AssertionResult operator()(const char* e1, 938*b89a7cc2SEnji Cooper const char* e2, 939*b89a7cc2SEnji Cooper const char* e3, 940*b89a7cc2SEnji Cooper const T1& v1, 941*b89a7cc2SEnji Cooper const T2& v2, 942*b89a7cc2SEnji Cooper const T3& v3) const { 943*b89a7cc2SEnji Cooper return PredFormatFunction3(e1, e2, e3, v1, v2, v3); 944*b89a7cc2SEnji Cooper } 945*b89a7cc2SEnji Cooper }; 946*b89a7cc2SEnji Cooper 947*b89a7cc2SEnji Cooper // Tests for {EXPECT|ASSERT}_PRED_FORMAT3. 948*b89a7cc2SEnji Cooper 949*b89a7cc2SEnji Cooper class Predicate3Test : public testing::Test { 950*b89a7cc2SEnji Cooper protected: 951*b89a7cc2SEnji Cooper virtual void SetUp() { 952*b89a7cc2SEnji Cooper expected_to_finish_ = true; 953*b89a7cc2SEnji Cooper finished_ = false; 954*b89a7cc2SEnji Cooper n1_ = n2_ = n3_ = 0; 955*b89a7cc2SEnji Cooper } 956*b89a7cc2SEnji Cooper 957*b89a7cc2SEnji Cooper virtual void TearDown() { 958*b89a7cc2SEnji Cooper // Verifies that each of the predicate's arguments was evaluated 959*b89a7cc2SEnji Cooper // exactly once. 960*b89a7cc2SEnji Cooper EXPECT_EQ(1, n1_) << 961*b89a7cc2SEnji Cooper "The predicate assertion didn't evaluate argument 2 " 962*b89a7cc2SEnji Cooper "exactly once."; 963*b89a7cc2SEnji Cooper EXPECT_EQ(1, n2_) << 964*b89a7cc2SEnji Cooper "The predicate assertion didn't evaluate argument 3 " 965*b89a7cc2SEnji Cooper "exactly once."; 966*b89a7cc2SEnji Cooper EXPECT_EQ(1, n3_) << 967*b89a7cc2SEnji Cooper "The predicate assertion didn't evaluate argument 4 " 968*b89a7cc2SEnji Cooper "exactly once."; 969*b89a7cc2SEnji Cooper 970*b89a7cc2SEnji Cooper // Verifies that the control flow in the test function is expected. 971*b89a7cc2SEnji Cooper if (expected_to_finish_ && !finished_) { 972*b89a7cc2SEnji Cooper FAIL() << "The predicate assertion unexpactedly aborted the test."; 973*b89a7cc2SEnji Cooper } else if (!expected_to_finish_ && finished_) { 974*b89a7cc2SEnji Cooper FAIL() << "The failed predicate assertion didn't abort the test " 975*b89a7cc2SEnji Cooper "as expected."; 976*b89a7cc2SEnji Cooper } 977*b89a7cc2SEnji Cooper } 978*b89a7cc2SEnji Cooper 979*b89a7cc2SEnji Cooper // true iff the test function is expected to run to finish. 980*b89a7cc2SEnji Cooper static bool expected_to_finish_; 981*b89a7cc2SEnji Cooper 982*b89a7cc2SEnji Cooper // true iff the test function did run to finish. 983*b89a7cc2SEnji Cooper static bool finished_; 984*b89a7cc2SEnji Cooper 985*b89a7cc2SEnji Cooper static int n1_; 986*b89a7cc2SEnji Cooper static int n2_; 987*b89a7cc2SEnji Cooper static int n3_; 988*b89a7cc2SEnji Cooper }; 989*b89a7cc2SEnji Cooper 990*b89a7cc2SEnji Cooper bool Predicate3Test::expected_to_finish_; 991*b89a7cc2SEnji Cooper bool Predicate3Test::finished_; 992*b89a7cc2SEnji Cooper int Predicate3Test::n1_; 993*b89a7cc2SEnji Cooper int Predicate3Test::n2_; 994*b89a7cc2SEnji Cooper int Predicate3Test::n3_; 995*b89a7cc2SEnji Cooper 996*b89a7cc2SEnji Cooper typedef Predicate3Test EXPECT_PRED_FORMAT3Test; 997*b89a7cc2SEnji Cooper typedef Predicate3Test ASSERT_PRED_FORMAT3Test; 998*b89a7cc2SEnji Cooper typedef Predicate3Test EXPECT_PRED3Test; 999*b89a7cc2SEnji Cooper typedef Predicate3Test ASSERT_PRED3Test; 1000*b89a7cc2SEnji Cooper 1001*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED3 where the 1002*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1003*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED3Test, FunctionOnBuiltInTypeSuccess) { 1004*b89a7cc2SEnji Cooper EXPECT_PRED3(PredFunction3Int, 1005*b89a7cc2SEnji Cooper ++n1_, 1006*b89a7cc2SEnji Cooper ++n2_, 1007*b89a7cc2SEnji Cooper ++n3_); 1008*b89a7cc2SEnji Cooper finished_ = true; 1009*b89a7cc2SEnji Cooper } 1010*b89a7cc2SEnji Cooper 1011*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED3 where the 1012*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1013*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED3Test, FunctionOnUserTypeSuccess) { 1014*b89a7cc2SEnji Cooper EXPECT_PRED3(PredFunction3Bool, 1015*b89a7cc2SEnji Cooper Bool(++n1_), 1016*b89a7cc2SEnji Cooper Bool(++n2_), 1017*b89a7cc2SEnji Cooper Bool(++n3_)); 1018*b89a7cc2SEnji Cooper finished_ = true; 1019*b89a7cc2SEnji Cooper } 1020*b89a7cc2SEnji Cooper 1021*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED3 where the 1022*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1023*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED3Test, FunctorOnBuiltInTypeSuccess) { 1024*b89a7cc2SEnji Cooper EXPECT_PRED3(PredFunctor3(), 1025*b89a7cc2SEnji Cooper ++n1_, 1026*b89a7cc2SEnji Cooper ++n2_, 1027*b89a7cc2SEnji Cooper ++n3_); 1028*b89a7cc2SEnji Cooper finished_ = true; 1029*b89a7cc2SEnji Cooper } 1030*b89a7cc2SEnji Cooper 1031*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED3 where the 1032*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1033*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED3Test, FunctorOnUserTypeSuccess) { 1034*b89a7cc2SEnji Cooper EXPECT_PRED3(PredFunctor3(), 1035*b89a7cc2SEnji Cooper Bool(++n1_), 1036*b89a7cc2SEnji Cooper Bool(++n2_), 1037*b89a7cc2SEnji Cooper Bool(++n3_)); 1038*b89a7cc2SEnji Cooper finished_ = true; 1039*b89a7cc2SEnji Cooper } 1040*b89a7cc2SEnji Cooper 1041*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED3 where the 1042*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1043*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED3Test, FunctionOnBuiltInTypeFailure) { 1044*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1045*b89a7cc2SEnji Cooper EXPECT_PRED3(PredFunction3Int, 1046*b89a7cc2SEnji Cooper n1_++, 1047*b89a7cc2SEnji Cooper n2_++, 1048*b89a7cc2SEnji Cooper n3_++); 1049*b89a7cc2SEnji Cooper finished_ = true; 1050*b89a7cc2SEnji Cooper }, ""); 1051*b89a7cc2SEnji Cooper } 1052*b89a7cc2SEnji Cooper 1053*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED3 where the 1054*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1055*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED3Test, FunctionOnUserTypeFailure) { 1056*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1057*b89a7cc2SEnji Cooper EXPECT_PRED3(PredFunction3Bool, 1058*b89a7cc2SEnji Cooper Bool(n1_++), 1059*b89a7cc2SEnji Cooper Bool(n2_++), 1060*b89a7cc2SEnji Cooper Bool(n3_++)); 1061*b89a7cc2SEnji Cooper finished_ = true; 1062*b89a7cc2SEnji Cooper }, ""); 1063*b89a7cc2SEnji Cooper } 1064*b89a7cc2SEnji Cooper 1065*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED3 where the 1066*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1067*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED3Test, FunctorOnBuiltInTypeFailure) { 1068*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1069*b89a7cc2SEnji Cooper EXPECT_PRED3(PredFunctor3(), 1070*b89a7cc2SEnji Cooper n1_++, 1071*b89a7cc2SEnji Cooper n2_++, 1072*b89a7cc2SEnji Cooper n3_++); 1073*b89a7cc2SEnji Cooper finished_ = true; 1074*b89a7cc2SEnji Cooper }, ""); 1075*b89a7cc2SEnji Cooper } 1076*b89a7cc2SEnji Cooper 1077*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED3 where the 1078*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1079*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED3Test, FunctorOnUserTypeFailure) { 1080*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1081*b89a7cc2SEnji Cooper EXPECT_PRED3(PredFunctor3(), 1082*b89a7cc2SEnji Cooper Bool(n1_++), 1083*b89a7cc2SEnji Cooper Bool(n2_++), 1084*b89a7cc2SEnji Cooper Bool(n3_++)); 1085*b89a7cc2SEnji Cooper finished_ = true; 1086*b89a7cc2SEnji Cooper }, ""); 1087*b89a7cc2SEnji Cooper } 1088*b89a7cc2SEnji Cooper 1089*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED3 where the 1090*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1091*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED3Test, FunctionOnBuiltInTypeSuccess) { 1092*b89a7cc2SEnji Cooper ASSERT_PRED3(PredFunction3Int, 1093*b89a7cc2SEnji Cooper ++n1_, 1094*b89a7cc2SEnji Cooper ++n2_, 1095*b89a7cc2SEnji Cooper ++n3_); 1096*b89a7cc2SEnji Cooper finished_ = true; 1097*b89a7cc2SEnji Cooper } 1098*b89a7cc2SEnji Cooper 1099*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED3 where the 1100*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1101*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED3Test, FunctionOnUserTypeSuccess) { 1102*b89a7cc2SEnji Cooper ASSERT_PRED3(PredFunction3Bool, 1103*b89a7cc2SEnji Cooper Bool(++n1_), 1104*b89a7cc2SEnji Cooper Bool(++n2_), 1105*b89a7cc2SEnji Cooper Bool(++n3_)); 1106*b89a7cc2SEnji Cooper finished_ = true; 1107*b89a7cc2SEnji Cooper } 1108*b89a7cc2SEnji Cooper 1109*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED3 where the 1110*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1111*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED3Test, FunctorOnBuiltInTypeSuccess) { 1112*b89a7cc2SEnji Cooper ASSERT_PRED3(PredFunctor3(), 1113*b89a7cc2SEnji Cooper ++n1_, 1114*b89a7cc2SEnji Cooper ++n2_, 1115*b89a7cc2SEnji Cooper ++n3_); 1116*b89a7cc2SEnji Cooper finished_ = true; 1117*b89a7cc2SEnji Cooper } 1118*b89a7cc2SEnji Cooper 1119*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED3 where the 1120*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1121*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED3Test, FunctorOnUserTypeSuccess) { 1122*b89a7cc2SEnji Cooper ASSERT_PRED3(PredFunctor3(), 1123*b89a7cc2SEnji Cooper Bool(++n1_), 1124*b89a7cc2SEnji Cooper Bool(++n2_), 1125*b89a7cc2SEnji Cooper Bool(++n3_)); 1126*b89a7cc2SEnji Cooper finished_ = true; 1127*b89a7cc2SEnji Cooper } 1128*b89a7cc2SEnji Cooper 1129*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED3 where the 1130*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1131*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED3Test, FunctionOnBuiltInTypeFailure) { 1132*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1133*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1134*b89a7cc2SEnji Cooper ASSERT_PRED3(PredFunction3Int, 1135*b89a7cc2SEnji Cooper n1_++, 1136*b89a7cc2SEnji Cooper n2_++, 1137*b89a7cc2SEnji Cooper n3_++); 1138*b89a7cc2SEnji Cooper finished_ = true; 1139*b89a7cc2SEnji Cooper }, ""); 1140*b89a7cc2SEnji Cooper } 1141*b89a7cc2SEnji Cooper 1142*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED3 where the 1143*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1144*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED3Test, FunctionOnUserTypeFailure) { 1145*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1146*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1147*b89a7cc2SEnji Cooper ASSERT_PRED3(PredFunction3Bool, 1148*b89a7cc2SEnji Cooper Bool(n1_++), 1149*b89a7cc2SEnji Cooper Bool(n2_++), 1150*b89a7cc2SEnji Cooper Bool(n3_++)); 1151*b89a7cc2SEnji Cooper finished_ = true; 1152*b89a7cc2SEnji Cooper }, ""); 1153*b89a7cc2SEnji Cooper } 1154*b89a7cc2SEnji Cooper 1155*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED3 where the 1156*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1157*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED3Test, FunctorOnBuiltInTypeFailure) { 1158*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1159*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1160*b89a7cc2SEnji Cooper ASSERT_PRED3(PredFunctor3(), 1161*b89a7cc2SEnji Cooper n1_++, 1162*b89a7cc2SEnji Cooper n2_++, 1163*b89a7cc2SEnji Cooper n3_++); 1164*b89a7cc2SEnji Cooper finished_ = true; 1165*b89a7cc2SEnji Cooper }, ""); 1166*b89a7cc2SEnji Cooper } 1167*b89a7cc2SEnji Cooper 1168*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED3 where the 1169*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1170*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED3Test, FunctorOnUserTypeFailure) { 1171*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1172*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1173*b89a7cc2SEnji Cooper ASSERT_PRED3(PredFunctor3(), 1174*b89a7cc2SEnji Cooper Bool(n1_++), 1175*b89a7cc2SEnji Cooper Bool(n2_++), 1176*b89a7cc2SEnji Cooper Bool(n3_++)); 1177*b89a7cc2SEnji Cooper finished_ = true; 1178*b89a7cc2SEnji Cooper }, ""); 1179*b89a7cc2SEnji Cooper } 1180*b89a7cc2SEnji Cooper 1181*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT3 where the 1182*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1183*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnBuiltInTypeSuccess) { 1184*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT3(PredFormatFunction3, 1185*b89a7cc2SEnji Cooper ++n1_, 1186*b89a7cc2SEnji Cooper ++n2_, 1187*b89a7cc2SEnji Cooper ++n3_); 1188*b89a7cc2SEnji Cooper finished_ = true; 1189*b89a7cc2SEnji Cooper } 1190*b89a7cc2SEnji Cooper 1191*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT3 where the 1192*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1193*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnUserTypeSuccess) { 1194*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT3(PredFormatFunction3, 1195*b89a7cc2SEnji Cooper Bool(++n1_), 1196*b89a7cc2SEnji Cooper Bool(++n2_), 1197*b89a7cc2SEnji Cooper Bool(++n3_)); 1198*b89a7cc2SEnji Cooper finished_ = true; 1199*b89a7cc2SEnji Cooper } 1200*b89a7cc2SEnji Cooper 1201*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT3 where the 1202*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1203*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnBuiltInTypeSuccess) { 1204*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT3(PredFormatFunctor3(), 1205*b89a7cc2SEnji Cooper ++n1_, 1206*b89a7cc2SEnji Cooper ++n2_, 1207*b89a7cc2SEnji Cooper ++n3_); 1208*b89a7cc2SEnji Cooper finished_ = true; 1209*b89a7cc2SEnji Cooper } 1210*b89a7cc2SEnji Cooper 1211*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT3 where the 1212*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1213*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnUserTypeSuccess) { 1214*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT3(PredFormatFunctor3(), 1215*b89a7cc2SEnji Cooper Bool(++n1_), 1216*b89a7cc2SEnji Cooper Bool(++n2_), 1217*b89a7cc2SEnji Cooper Bool(++n3_)); 1218*b89a7cc2SEnji Cooper finished_ = true; 1219*b89a7cc2SEnji Cooper } 1220*b89a7cc2SEnji Cooper 1221*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT3 where the 1222*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1223*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnBuiltInTypeFailure) { 1224*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1225*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT3(PredFormatFunction3, 1226*b89a7cc2SEnji Cooper n1_++, 1227*b89a7cc2SEnji Cooper n2_++, 1228*b89a7cc2SEnji Cooper n3_++); 1229*b89a7cc2SEnji Cooper finished_ = true; 1230*b89a7cc2SEnji Cooper }, ""); 1231*b89a7cc2SEnji Cooper } 1232*b89a7cc2SEnji Cooper 1233*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT3 where the 1234*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1235*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnUserTypeFailure) { 1236*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1237*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT3(PredFormatFunction3, 1238*b89a7cc2SEnji Cooper Bool(n1_++), 1239*b89a7cc2SEnji Cooper Bool(n2_++), 1240*b89a7cc2SEnji Cooper Bool(n3_++)); 1241*b89a7cc2SEnji Cooper finished_ = true; 1242*b89a7cc2SEnji Cooper }, ""); 1243*b89a7cc2SEnji Cooper } 1244*b89a7cc2SEnji Cooper 1245*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT3 where the 1246*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1247*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnBuiltInTypeFailure) { 1248*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1249*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT3(PredFormatFunctor3(), 1250*b89a7cc2SEnji Cooper n1_++, 1251*b89a7cc2SEnji Cooper n2_++, 1252*b89a7cc2SEnji Cooper n3_++); 1253*b89a7cc2SEnji Cooper finished_ = true; 1254*b89a7cc2SEnji Cooper }, ""); 1255*b89a7cc2SEnji Cooper } 1256*b89a7cc2SEnji Cooper 1257*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT3 where the 1258*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1259*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnUserTypeFailure) { 1260*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1261*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT3(PredFormatFunctor3(), 1262*b89a7cc2SEnji Cooper Bool(n1_++), 1263*b89a7cc2SEnji Cooper Bool(n2_++), 1264*b89a7cc2SEnji Cooper Bool(n3_++)); 1265*b89a7cc2SEnji Cooper finished_ = true; 1266*b89a7cc2SEnji Cooper }, ""); 1267*b89a7cc2SEnji Cooper } 1268*b89a7cc2SEnji Cooper 1269*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT3 where the 1270*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1271*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnBuiltInTypeSuccess) { 1272*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT3(PredFormatFunction3, 1273*b89a7cc2SEnji Cooper ++n1_, 1274*b89a7cc2SEnji Cooper ++n2_, 1275*b89a7cc2SEnji Cooper ++n3_); 1276*b89a7cc2SEnji Cooper finished_ = true; 1277*b89a7cc2SEnji Cooper } 1278*b89a7cc2SEnji Cooper 1279*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT3 where the 1280*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1281*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnUserTypeSuccess) { 1282*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT3(PredFormatFunction3, 1283*b89a7cc2SEnji Cooper Bool(++n1_), 1284*b89a7cc2SEnji Cooper Bool(++n2_), 1285*b89a7cc2SEnji Cooper Bool(++n3_)); 1286*b89a7cc2SEnji Cooper finished_ = true; 1287*b89a7cc2SEnji Cooper } 1288*b89a7cc2SEnji Cooper 1289*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT3 where the 1290*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1291*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnBuiltInTypeSuccess) { 1292*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT3(PredFormatFunctor3(), 1293*b89a7cc2SEnji Cooper ++n1_, 1294*b89a7cc2SEnji Cooper ++n2_, 1295*b89a7cc2SEnji Cooper ++n3_); 1296*b89a7cc2SEnji Cooper finished_ = true; 1297*b89a7cc2SEnji Cooper } 1298*b89a7cc2SEnji Cooper 1299*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT3 where the 1300*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1301*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnUserTypeSuccess) { 1302*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT3(PredFormatFunctor3(), 1303*b89a7cc2SEnji Cooper Bool(++n1_), 1304*b89a7cc2SEnji Cooper Bool(++n2_), 1305*b89a7cc2SEnji Cooper Bool(++n3_)); 1306*b89a7cc2SEnji Cooper finished_ = true; 1307*b89a7cc2SEnji Cooper } 1308*b89a7cc2SEnji Cooper 1309*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT3 where the 1310*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1311*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnBuiltInTypeFailure) { 1312*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1313*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1314*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT3(PredFormatFunction3, 1315*b89a7cc2SEnji Cooper n1_++, 1316*b89a7cc2SEnji Cooper n2_++, 1317*b89a7cc2SEnji Cooper n3_++); 1318*b89a7cc2SEnji Cooper finished_ = true; 1319*b89a7cc2SEnji Cooper }, ""); 1320*b89a7cc2SEnji Cooper } 1321*b89a7cc2SEnji Cooper 1322*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT3 where the 1323*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1324*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnUserTypeFailure) { 1325*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1326*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1327*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT3(PredFormatFunction3, 1328*b89a7cc2SEnji Cooper Bool(n1_++), 1329*b89a7cc2SEnji Cooper Bool(n2_++), 1330*b89a7cc2SEnji Cooper Bool(n3_++)); 1331*b89a7cc2SEnji Cooper finished_ = true; 1332*b89a7cc2SEnji Cooper }, ""); 1333*b89a7cc2SEnji Cooper } 1334*b89a7cc2SEnji Cooper 1335*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT3 where the 1336*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1337*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnBuiltInTypeFailure) { 1338*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1339*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1340*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT3(PredFormatFunctor3(), 1341*b89a7cc2SEnji Cooper n1_++, 1342*b89a7cc2SEnji Cooper n2_++, 1343*b89a7cc2SEnji Cooper n3_++); 1344*b89a7cc2SEnji Cooper finished_ = true; 1345*b89a7cc2SEnji Cooper }, ""); 1346*b89a7cc2SEnji Cooper } 1347*b89a7cc2SEnji Cooper 1348*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT3 where the 1349*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1350*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnUserTypeFailure) { 1351*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1352*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1353*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT3(PredFormatFunctor3(), 1354*b89a7cc2SEnji Cooper Bool(n1_++), 1355*b89a7cc2SEnji Cooper Bool(n2_++), 1356*b89a7cc2SEnji Cooper Bool(n3_++)); 1357*b89a7cc2SEnji Cooper finished_ = true; 1358*b89a7cc2SEnji Cooper }, ""); 1359*b89a7cc2SEnji Cooper } 1360*b89a7cc2SEnji Cooper // Sample functions/functors for testing 4-ary predicate assertions. 1361*b89a7cc2SEnji Cooper 1362*b89a7cc2SEnji Cooper // A 4-ary predicate function. 1363*b89a7cc2SEnji Cooper template <typename T1, typename T2, typename T3, typename T4> 1364*b89a7cc2SEnji Cooper bool PredFunction4(T1 v1, T2 v2, T3 v3, T4 v4) { 1365*b89a7cc2SEnji Cooper return v1 + v2 + v3 + v4 > 0; 1366*b89a7cc2SEnji Cooper } 1367*b89a7cc2SEnji Cooper 1368*b89a7cc2SEnji Cooper // The following two functions are needed to circumvent a bug in 1369*b89a7cc2SEnji Cooper // gcc 2.95.3, which sometimes has problem with the above template 1370*b89a7cc2SEnji Cooper // function. 1371*b89a7cc2SEnji Cooper bool PredFunction4Int(int v1, int v2, int v3, int v4) { 1372*b89a7cc2SEnji Cooper return v1 + v2 + v3 + v4 > 0; 1373*b89a7cc2SEnji Cooper } 1374*b89a7cc2SEnji Cooper bool PredFunction4Bool(Bool v1, Bool v2, Bool v3, Bool v4) { 1375*b89a7cc2SEnji Cooper return v1 + v2 + v3 + v4 > 0; 1376*b89a7cc2SEnji Cooper } 1377*b89a7cc2SEnji Cooper 1378*b89a7cc2SEnji Cooper // A 4-ary predicate functor. 1379*b89a7cc2SEnji Cooper struct PredFunctor4 { 1380*b89a7cc2SEnji Cooper template <typename T1, typename T2, typename T3, typename T4> 1381*b89a7cc2SEnji Cooper bool operator()(const T1& v1, 1382*b89a7cc2SEnji Cooper const T2& v2, 1383*b89a7cc2SEnji Cooper const T3& v3, 1384*b89a7cc2SEnji Cooper const T4& v4) { 1385*b89a7cc2SEnji Cooper return v1 + v2 + v3 + v4 > 0; 1386*b89a7cc2SEnji Cooper } 1387*b89a7cc2SEnji Cooper }; 1388*b89a7cc2SEnji Cooper 1389*b89a7cc2SEnji Cooper // A 4-ary predicate-formatter function. 1390*b89a7cc2SEnji Cooper template <typename T1, typename T2, typename T3, typename T4> 1391*b89a7cc2SEnji Cooper testing::AssertionResult PredFormatFunction4(const char* e1, 1392*b89a7cc2SEnji Cooper const char* e2, 1393*b89a7cc2SEnji Cooper const char* e3, 1394*b89a7cc2SEnji Cooper const char* e4, 1395*b89a7cc2SEnji Cooper const T1& v1, 1396*b89a7cc2SEnji Cooper const T2& v2, 1397*b89a7cc2SEnji Cooper const T3& v3, 1398*b89a7cc2SEnji Cooper const T4& v4) { 1399*b89a7cc2SEnji Cooper if (PredFunction4(v1, v2, v3, v4)) 1400*b89a7cc2SEnji Cooper return testing::AssertionSuccess(); 1401*b89a7cc2SEnji Cooper 1402*b89a7cc2SEnji Cooper return testing::AssertionFailure() 1403*b89a7cc2SEnji Cooper << e1 << " + " << e2 << " + " << e3 << " + " << e4 1404*b89a7cc2SEnji Cooper << " is expected to be positive, but evaluates to " 1405*b89a7cc2SEnji Cooper << v1 + v2 + v3 + v4 << "."; 1406*b89a7cc2SEnji Cooper } 1407*b89a7cc2SEnji Cooper 1408*b89a7cc2SEnji Cooper // A 4-ary predicate-formatter functor. 1409*b89a7cc2SEnji Cooper struct PredFormatFunctor4 { 1410*b89a7cc2SEnji Cooper template <typename T1, typename T2, typename T3, typename T4> 1411*b89a7cc2SEnji Cooper testing::AssertionResult operator()(const char* e1, 1412*b89a7cc2SEnji Cooper const char* e2, 1413*b89a7cc2SEnji Cooper const char* e3, 1414*b89a7cc2SEnji Cooper const char* e4, 1415*b89a7cc2SEnji Cooper const T1& v1, 1416*b89a7cc2SEnji Cooper const T2& v2, 1417*b89a7cc2SEnji Cooper const T3& v3, 1418*b89a7cc2SEnji Cooper const T4& v4) const { 1419*b89a7cc2SEnji Cooper return PredFormatFunction4(e1, e2, e3, e4, v1, v2, v3, v4); 1420*b89a7cc2SEnji Cooper } 1421*b89a7cc2SEnji Cooper }; 1422*b89a7cc2SEnji Cooper 1423*b89a7cc2SEnji Cooper // Tests for {EXPECT|ASSERT}_PRED_FORMAT4. 1424*b89a7cc2SEnji Cooper 1425*b89a7cc2SEnji Cooper class Predicate4Test : public testing::Test { 1426*b89a7cc2SEnji Cooper protected: 1427*b89a7cc2SEnji Cooper virtual void SetUp() { 1428*b89a7cc2SEnji Cooper expected_to_finish_ = true; 1429*b89a7cc2SEnji Cooper finished_ = false; 1430*b89a7cc2SEnji Cooper n1_ = n2_ = n3_ = n4_ = 0; 1431*b89a7cc2SEnji Cooper } 1432*b89a7cc2SEnji Cooper 1433*b89a7cc2SEnji Cooper virtual void TearDown() { 1434*b89a7cc2SEnji Cooper // Verifies that each of the predicate's arguments was evaluated 1435*b89a7cc2SEnji Cooper // exactly once. 1436*b89a7cc2SEnji Cooper EXPECT_EQ(1, n1_) << 1437*b89a7cc2SEnji Cooper "The predicate assertion didn't evaluate argument 2 " 1438*b89a7cc2SEnji Cooper "exactly once."; 1439*b89a7cc2SEnji Cooper EXPECT_EQ(1, n2_) << 1440*b89a7cc2SEnji Cooper "The predicate assertion didn't evaluate argument 3 " 1441*b89a7cc2SEnji Cooper "exactly once."; 1442*b89a7cc2SEnji Cooper EXPECT_EQ(1, n3_) << 1443*b89a7cc2SEnji Cooper "The predicate assertion didn't evaluate argument 4 " 1444*b89a7cc2SEnji Cooper "exactly once."; 1445*b89a7cc2SEnji Cooper EXPECT_EQ(1, n4_) << 1446*b89a7cc2SEnji Cooper "The predicate assertion didn't evaluate argument 5 " 1447*b89a7cc2SEnji Cooper "exactly once."; 1448*b89a7cc2SEnji Cooper 1449*b89a7cc2SEnji Cooper // Verifies that the control flow in the test function is expected. 1450*b89a7cc2SEnji Cooper if (expected_to_finish_ && !finished_) { 1451*b89a7cc2SEnji Cooper FAIL() << "The predicate assertion unexpactedly aborted the test."; 1452*b89a7cc2SEnji Cooper } else if (!expected_to_finish_ && finished_) { 1453*b89a7cc2SEnji Cooper FAIL() << "The failed predicate assertion didn't abort the test " 1454*b89a7cc2SEnji Cooper "as expected."; 1455*b89a7cc2SEnji Cooper } 1456*b89a7cc2SEnji Cooper } 1457*b89a7cc2SEnji Cooper 1458*b89a7cc2SEnji Cooper // true iff the test function is expected to run to finish. 1459*b89a7cc2SEnji Cooper static bool expected_to_finish_; 1460*b89a7cc2SEnji Cooper 1461*b89a7cc2SEnji Cooper // true iff the test function did run to finish. 1462*b89a7cc2SEnji Cooper static bool finished_; 1463*b89a7cc2SEnji Cooper 1464*b89a7cc2SEnji Cooper static int n1_; 1465*b89a7cc2SEnji Cooper static int n2_; 1466*b89a7cc2SEnji Cooper static int n3_; 1467*b89a7cc2SEnji Cooper static int n4_; 1468*b89a7cc2SEnji Cooper }; 1469*b89a7cc2SEnji Cooper 1470*b89a7cc2SEnji Cooper bool Predicate4Test::expected_to_finish_; 1471*b89a7cc2SEnji Cooper bool Predicate4Test::finished_; 1472*b89a7cc2SEnji Cooper int Predicate4Test::n1_; 1473*b89a7cc2SEnji Cooper int Predicate4Test::n2_; 1474*b89a7cc2SEnji Cooper int Predicate4Test::n3_; 1475*b89a7cc2SEnji Cooper int Predicate4Test::n4_; 1476*b89a7cc2SEnji Cooper 1477*b89a7cc2SEnji Cooper typedef Predicate4Test EXPECT_PRED_FORMAT4Test; 1478*b89a7cc2SEnji Cooper typedef Predicate4Test ASSERT_PRED_FORMAT4Test; 1479*b89a7cc2SEnji Cooper typedef Predicate4Test EXPECT_PRED4Test; 1480*b89a7cc2SEnji Cooper typedef Predicate4Test ASSERT_PRED4Test; 1481*b89a7cc2SEnji Cooper 1482*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED4 where the 1483*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1484*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED4Test, FunctionOnBuiltInTypeSuccess) { 1485*b89a7cc2SEnji Cooper EXPECT_PRED4(PredFunction4Int, 1486*b89a7cc2SEnji Cooper ++n1_, 1487*b89a7cc2SEnji Cooper ++n2_, 1488*b89a7cc2SEnji Cooper ++n3_, 1489*b89a7cc2SEnji Cooper ++n4_); 1490*b89a7cc2SEnji Cooper finished_ = true; 1491*b89a7cc2SEnji Cooper } 1492*b89a7cc2SEnji Cooper 1493*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED4 where the 1494*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1495*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED4Test, FunctionOnUserTypeSuccess) { 1496*b89a7cc2SEnji Cooper EXPECT_PRED4(PredFunction4Bool, 1497*b89a7cc2SEnji Cooper Bool(++n1_), 1498*b89a7cc2SEnji Cooper Bool(++n2_), 1499*b89a7cc2SEnji Cooper Bool(++n3_), 1500*b89a7cc2SEnji Cooper Bool(++n4_)); 1501*b89a7cc2SEnji Cooper finished_ = true; 1502*b89a7cc2SEnji Cooper } 1503*b89a7cc2SEnji Cooper 1504*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED4 where the 1505*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1506*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED4Test, FunctorOnBuiltInTypeSuccess) { 1507*b89a7cc2SEnji Cooper EXPECT_PRED4(PredFunctor4(), 1508*b89a7cc2SEnji Cooper ++n1_, 1509*b89a7cc2SEnji Cooper ++n2_, 1510*b89a7cc2SEnji Cooper ++n3_, 1511*b89a7cc2SEnji Cooper ++n4_); 1512*b89a7cc2SEnji Cooper finished_ = true; 1513*b89a7cc2SEnji Cooper } 1514*b89a7cc2SEnji Cooper 1515*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED4 where the 1516*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1517*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED4Test, FunctorOnUserTypeSuccess) { 1518*b89a7cc2SEnji Cooper EXPECT_PRED4(PredFunctor4(), 1519*b89a7cc2SEnji Cooper Bool(++n1_), 1520*b89a7cc2SEnji Cooper Bool(++n2_), 1521*b89a7cc2SEnji Cooper Bool(++n3_), 1522*b89a7cc2SEnji Cooper Bool(++n4_)); 1523*b89a7cc2SEnji Cooper finished_ = true; 1524*b89a7cc2SEnji Cooper } 1525*b89a7cc2SEnji Cooper 1526*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED4 where the 1527*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1528*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED4Test, FunctionOnBuiltInTypeFailure) { 1529*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1530*b89a7cc2SEnji Cooper EXPECT_PRED4(PredFunction4Int, 1531*b89a7cc2SEnji Cooper n1_++, 1532*b89a7cc2SEnji Cooper n2_++, 1533*b89a7cc2SEnji Cooper n3_++, 1534*b89a7cc2SEnji Cooper n4_++); 1535*b89a7cc2SEnji Cooper finished_ = true; 1536*b89a7cc2SEnji Cooper }, ""); 1537*b89a7cc2SEnji Cooper } 1538*b89a7cc2SEnji Cooper 1539*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED4 where the 1540*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1541*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED4Test, FunctionOnUserTypeFailure) { 1542*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1543*b89a7cc2SEnji Cooper EXPECT_PRED4(PredFunction4Bool, 1544*b89a7cc2SEnji Cooper Bool(n1_++), 1545*b89a7cc2SEnji Cooper Bool(n2_++), 1546*b89a7cc2SEnji Cooper Bool(n3_++), 1547*b89a7cc2SEnji Cooper Bool(n4_++)); 1548*b89a7cc2SEnji Cooper finished_ = true; 1549*b89a7cc2SEnji Cooper }, ""); 1550*b89a7cc2SEnji Cooper } 1551*b89a7cc2SEnji Cooper 1552*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED4 where the 1553*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1554*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED4Test, FunctorOnBuiltInTypeFailure) { 1555*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1556*b89a7cc2SEnji Cooper EXPECT_PRED4(PredFunctor4(), 1557*b89a7cc2SEnji Cooper n1_++, 1558*b89a7cc2SEnji Cooper n2_++, 1559*b89a7cc2SEnji Cooper n3_++, 1560*b89a7cc2SEnji Cooper n4_++); 1561*b89a7cc2SEnji Cooper finished_ = true; 1562*b89a7cc2SEnji Cooper }, ""); 1563*b89a7cc2SEnji Cooper } 1564*b89a7cc2SEnji Cooper 1565*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED4 where the 1566*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1567*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED4Test, FunctorOnUserTypeFailure) { 1568*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1569*b89a7cc2SEnji Cooper EXPECT_PRED4(PredFunctor4(), 1570*b89a7cc2SEnji Cooper Bool(n1_++), 1571*b89a7cc2SEnji Cooper Bool(n2_++), 1572*b89a7cc2SEnji Cooper Bool(n3_++), 1573*b89a7cc2SEnji Cooper Bool(n4_++)); 1574*b89a7cc2SEnji Cooper finished_ = true; 1575*b89a7cc2SEnji Cooper }, ""); 1576*b89a7cc2SEnji Cooper } 1577*b89a7cc2SEnji Cooper 1578*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED4 where the 1579*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1580*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED4Test, FunctionOnBuiltInTypeSuccess) { 1581*b89a7cc2SEnji Cooper ASSERT_PRED4(PredFunction4Int, 1582*b89a7cc2SEnji Cooper ++n1_, 1583*b89a7cc2SEnji Cooper ++n2_, 1584*b89a7cc2SEnji Cooper ++n3_, 1585*b89a7cc2SEnji Cooper ++n4_); 1586*b89a7cc2SEnji Cooper finished_ = true; 1587*b89a7cc2SEnji Cooper } 1588*b89a7cc2SEnji Cooper 1589*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED4 where the 1590*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1591*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED4Test, FunctionOnUserTypeSuccess) { 1592*b89a7cc2SEnji Cooper ASSERT_PRED4(PredFunction4Bool, 1593*b89a7cc2SEnji Cooper Bool(++n1_), 1594*b89a7cc2SEnji Cooper Bool(++n2_), 1595*b89a7cc2SEnji Cooper Bool(++n3_), 1596*b89a7cc2SEnji Cooper Bool(++n4_)); 1597*b89a7cc2SEnji Cooper finished_ = true; 1598*b89a7cc2SEnji Cooper } 1599*b89a7cc2SEnji Cooper 1600*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED4 where the 1601*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1602*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED4Test, FunctorOnBuiltInTypeSuccess) { 1603*b89a7cc2SEnji Cooper ASSERT_PRED4(PredFunctor4(), 1604*b89a7cc2SEnji Cooper ++n1_, 1605*b89a7cc2SEnji Cooper ++n2_, 1606*b89a7cc2SEnji Cooper ++n3_, 1607*b89a7cc2SEnji Cooper ++n4_); 1608*b89a7cc2SEnji Cooper finished_ = true; 1609*b89a7cc2SEnji Cooper } 1610*b89a7cc2SEnji Cooper 1611*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED4 where the 1612*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1613*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED4Test, FunctorOnUserTypeSuccess) { 1614*b89a7cc2SEnji Cooper ASSERT_PRED4(PredFunctor4(), 1615*b89a7cc2SEnji Cooper Bool(++n1_), 1616*b89a7cc2SEnji Cooper Bool(++n2_), 1617*b89a7cc2SEnji Cooper Bool(++n3_), 1618*b89a7cc2SEnji Cooper Bool(++n4_)); 1619*b89a7cc2SEnji Cooper finished_ = true; 1620*b89a7cc2SEnji Cooper } 1621*b89a7cc2SEnji Cooper 1622*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED4 where the 1623*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1624*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED4Test, FunctionOnBuiltInTypeFailure) { 1625*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1626*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1627*b89a7cc2SEnji Cooper ASSERT_PRED4(PredFunction4Int, 1628*b89a7cc2SEnji Cooper n1_++, 1629*b89a7cc2SEnji Cooper n2_++, 1630*b89a7cc2SEnji Cooper n3_++, 1631*b89a7cc2SEnji Cooper n4_++); 1632*b89a7cc2SEnji Cooper finished_ = true; 1633*b89a7cc2SEnji Cooper }, ""); 1634*b89a7cc2SEnji Cooper } 1635*b89a7cc2SEnji Cooper 1636*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED4 where the 1637*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1638*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED4Test, FunctionOnUserTypeFailure) { 1639*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1640*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1641*b89a7cc2SEnji Cooper ASSERT_PRED4(PredFunction4Bool, 1642*b89a7cc2SEnji Cooper Bool(n1_++), 1643*b89a7cc2SEnji Cooper Bool(n2_++), 1644*b89a7cc2SEnji Cooper Bool(n3_++), 1645*b89a7cc2SEnji Cooper Bool(n4_++)); 1646*b89a7cc2SEnji Cooper finished_ = true; 1647*b89a7cc2SEnji Cooper }, ""); 1648*b89a7cc2SEnji Cooper } 1649*b89a7cc2SEnji Cooper 1650*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED4 where the 1651*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1652*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED4Test, FunctorOnBuiltInTypeFailure) { 1653*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1654*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1655*b89a7cc2SEnji Cooper ASSERT_PRED4(PredFunctor4(), 1656*b89a7cc2SEnji Cooper n1_++, 1657*b89a7cc2SEnji Cooper n2_++, 1658*b89a7cc2SEnji Cooper n3_++, 1659*b89a7cc2SEnji Cooper n4_++); 1660*b89a7cc2SEnji Cooper finished_ = true; 1661*b89a7cc2SEnji Cooper }, ""); 1662*b89a7cc2SEnji Cooper } 1663*b89a7cc2SEnji Cooper 1664*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED4 where the 1665*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1666*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED4Test, FunctorOnUserTypeFailure) { 1667*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1668*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1669*b89a7cc2SEnji Cooper ASSERT_PRED4(PredFunctor4(), 1670*b89a7cc2SEnji Cooper Bool(n1_++), 1671*b89a7cc2SEnji Cooper Bool(n2_++), 1672*b89a7cc2SEnji Cooper Bool(n3_++), 1673*b89a7cc2SEnji Cooper Bool(n4_++)); 1674*b89a7cc2SEnji Cooper finished_ = true; 1675*b89a7cc2SEnji Cooper }, ""); 1676*b89a7cc2SEnji Cooper } 1677*b89a7cc2SEnji Cooper 1678*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT4 where the 1679*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1680*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnBuiltInTypeSuccess) { 1681*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT4(PredFormatFunction4, 1682*b89a7cc2SEnji Cooper ++n1_, 1683*b89a7cc2SEnji Cooper ++n2_, 1684*b89a7cc2SEnji Cooper ++n3_, 1685*b89a7cc2SEnji Cooper ++n4_); 1686*b89a7cc2SEnji Cooper finished_ = true; 1687*b89a7cc2SEnji Cooper } 1688*b89a7cc2SEnji Cooper 1689*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT4 where the 1690*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1691*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnUserTypeSuccess) { 1692*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT4(PredFormatFunction4, 1693*b89a7cc2SEnji Cooper Bool(++n1_), 1694*b89a7cc2SEnji Cooper Bool(++n2_), 1695*b89a7cc2SEnji Cooper Bool(++n3_), 1696*b89a7cc2SEnji Cooper Bool(++n4_)); 1697*b89a7cc2SEnji Cooper finished_ = true; 1698*b89a7cc2SEnji Cooper } 1699*b89a7cc2SEnji Cooper 1700*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT4 where the 1701*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1702*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnBuiltInTypeSuccess) { 1703*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT4(PredFormatFunctor4(), 1704*b89a7cc2SEnji Cooper ++n1_, 1705*b89a7cc2SEnji Cooper ++n2_, 1706*b89a7cc2SEnji Cooper ++n3_, 1707*b89a7cc2SEnji Cooper ++n4_); 1708*b89a7cc2SEnji Cooper finished_ = true; 1709*b89a7cc2SEnji Cooper } 1710*b89a7cc2SEnji Cooper 1711*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT4 where the 1712*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1713*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnUserTypeSuccess) { 1714*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT4(PredFormatFunctor4(), 1715*b89a7cc2SEnji Cooper Bool(++n1_), 1716*b89a7cc2SEnji Cooper Bool(++n2_), 1717*b89a7cc2SEnji Cooper Bool(++n3_), 1718*b89a7cc2SEnji Cooper Bool(++n4_)); 1719*b89a7cc2SEnji Cooper finished_ = true; 1720*b89a7cc2SEnji Cooper } 1721*b89a7cc2SEnji Cooper 1722*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT4 where the 1723*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1724*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnBuiltInTypeFailure) { 1725*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1726*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT4(PredFormatFunction4, 1727*b89a7cc2SEnji Cooper n1_++, 1728*b89a7cc2SEnji Cooper n2_++, 1729*b89a7cc2SEnji Cooper n3_++, 1730*b89a7cc2SEnji Cooper n4_++); 1731*b89a7cc2SEnji Cooper finished_ = true; 1732*b89a7cc2SEnji Cooper }, ""); 1733*b89a7cc2SEnji Cooper } 1734*b89a7cc2SEnji Cooper 1735*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT4 where the 1736*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1737*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnUserTypeFailure) { 1738*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1739*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT4(PredFormatFunction4, 1740*b89a7cc2SEnji Cooper Bool(n1_++), 1741*b89a7cc2SEnji Cooper Bool(n2_++), 1742*b89a7cc2SEnji Cooper Bool(n3_++), 1743*b89a7cc2SEnji Cooper Bool(n4_++)); 1744*b89a7cc2SEnji Cooper finished_ = true; 1745*b89a7cc2SEnji Cooper }, ""); 1746*b89a7cc2SEnji Cooper } 1747*b89a7cc2SEnji Cooper 1748*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT4 where the 1749*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1750*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnBuiltInTypeFailure) { 1751*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1752*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT4(PredFormatFunctor4(), 1753*b89a7cc2SEnji Cooper n1_++, 1754*b89a7cc2SEnji Cooper n2_++, 1755*b89a7cc2SEnji Cooper n3_++, 1756*b89a7cc2SEnji Cooper n4_++); 1757*b89a7cc2SEnji Cooper finished_ = true; 1758*b89a7cc2SEnji Cooper }, ""); 1759*b89a7cc2SEnji Cooper } 1760*b89a7cc2SEnji Cooper 1761*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT4 where the 1762*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1763*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnUserTypeFailure) { 1764*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 1765*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT4(PredFormatFunctor4(), 1766*b89a7cc2SEnji Cooper Bool(n1_++), 1767*b89a7cc2SEnji Cooper Bool(n2_++), 1768*b89a7cc2SEnji Cooper Bool(n3_++), 1769*b89a7cc2SEnji Cooper Bool(n4_++)); 1770*b89a7cc2SEnji Cooper finished_ = true; 1771*b89a7cc2SEnji Cooper }, ""); 1772*b89a7cc2SEnji Cooper } 1773*b89a7cc2SEnji Cooper 1774*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT4 where the 1775*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1776*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnBuiltInTypeSuccess) { 1777*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT4(PredFormatFunction4, 1778*b89a7cc2SEnji Cooper ++n1_, 1779*b89a7cc2SEnji Cooper ++n2_, 1780*b89a7cc2SEnji Cooper ++n3_, 1781*b89a7cc2SEnji Cooper ++n4_); 1782*b89a7cc2SEnji Cooper finished_ = true; 1783*b89a7cc2SEnji Cooper } 1784*b89a7cc2SEnji Cooper 1785*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT4 where the 1786*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1787*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnUserTypeSuccess) { 1788*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT4(PredFormatFunction4, 1789*b89a7cc2SEnji Cooper Bool(++n1_), 1790*b89a7cc2SEnji Cooper Bool(++n2_), 1791*b89a7cc2SEnji Cooper Bool(++n3_), 1792*b89a7cc2SEnji Cooper Bool(++n4_)); 1793*b89a7cc2SEnji Cooper finished_ = true; 1794*b89a7cc2SEnji Cooper } 1795*b89a7cc2SEnji Cooper 1796*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT4 where the 1797*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1798*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnBuiltInTypeSuccess) { 1799*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT4(PredFormatFunctor4(), 1800*b89a7cc2SEnji Cooper ++n1_, 1801*b89a7cc2SEnji Cooper ++n2_, 1802*b89a7cc2SEnji Cooper ++n3_, 1803*b89a7cc2SEnji Cooper ++n4_); 1804*b89a7cc2SEnji Cooper finished_ = true; 1805*b89a7cc2SEnji Cooper } 1806*b89a7cc2SEnji Cooper 1807*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT4 where the 1808*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1809*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnUserTypeSuccess) { 1810*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT4(PredFormatFunctor4(), 1811*b89a7cc2SEnji Cooper Bool(++n1_), 1812*b89a7cc2SEnji Cooper Bool(++n2_), 1813*b89a7cc2SEnji Cooper Bool(++n3_), 1814*b89a7cc2SEnji Cooper Bool(++n4_)); 1815*b89a7cc2SEnji Cooper finished_ = true; 1816*b89a7cc2SEnji Cooper } 1817*b89a7cc2SEnji Cooper 1818*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT4 where the 1819*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 1820*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnBuiltInTypeFailure) { 1821*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1822*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1823*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT4(PredFormatFunction4, 1824*b89a7cc2SEnji Cooper n1_++, 1825*b89a7cc2SEnji Cooper n2_++, 1826*b89a7cc2SEnji Cooper n3_++, 1827*b89a7cc2SEnji Cooper n4_++); 1828*b89a7cc2SEnji Cooper finished_ = true; 1829*b89a7cc2SEnji Cooper }, ""); 1830*b89a7cc2SEnji Cooper } 1831*b89a7cc2SEnji Cooper 1832*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT4 where the 1833*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 1834*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnUserTypeFailure) { 1835*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1836*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1837*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT4(PredFormatFunction4, 1838*b89a7cc2SEnji Cooper Bool(n1_++), 1839*b89a7cc2SEnji Cooper Bool(n2_++), 1840*b89a7cc2SEnji Cooper Bool(n3_++), 1841*b89a7cc2SEnji Cooper Bool(n4_++)); 1842*b89a7cc2SEnji Cooper finished_ = true; 1843*b89a7cc2SEnji Cooper }, ""); 1844*b89a7cc2SEnji Cooper } 1845*b89a7cc2SEnji Cooper 1846*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT4 where the 1847*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 1848*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnBuiltInTypeFailure) { 1849*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1850*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1851*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT4(PredFormatFunctor4(), 1852*b89a7cc2SEnji Cooper n1_++, 1853*b89a7cc2SEnji Cooper n2_++, 1854*b89a7cc2SEnji Cooper n3_++, 1855*b89a7cc2SEnji Cooper n4_++); 1856*b89a7cc2SEnji Cooper finished_ = true; 1857*b89a7cc2SEnji Cooper }, ""); 1858*b89a7cc2SEnji Cooper } 1859*b89a7cc2SEnji Cooper 1860*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT4 where the 1861*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 1862*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnUserTypeFailure) { 1863*b89a7cc2SEnji Cooper expected_to_finish_ = false; 1864*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 1865*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT4(PredFormatFunctor4(), 1866*b89a7cc2SEnji Cooper Bool(n1_++), 1867*b89a7cc2SEnji Cooper Bool(n2_++), 1868*b89a7cc2SEnji Cooper Bool(n3_++), 1869*b89a7cc2SEnji Cooper Bool(n4_++)); 1870*b89a7cc2SEnji Cooper finished_ = true; 1871*b89a7cc2SEnji Cooper }, ""); 1872*b89a7cc2SEnji Cooper } 1873*b89a7cc2SEnji Cooper // Sample functions/functors for testing 5-ary predicate assertions. 1874*b89a7cc2SEnji Cooper 1875*b89a7cc2SEnji Cooper // A 5-ary predicate function. 1876*b89a7cc2SEnji Cooper template <typename T1, typename T2, typename T3, typename T4, typename T5> 1877*b89a7cc2SEnji Cooper bool PredFunction5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) { 1878*b89a7cc2SEnji Cooper return v1 + v2 + v3 + v4 + v5 > 0; 1879*b89a7cc2SEnji Cooper } 1880*b89a7cc2SEnji Cooper 1881*b89a7cc2SEnji Cooper // The following two functions are needed to circumvent a bug in 1882*b89a7cc2SEnji Cooper // gcc 2.95.3, which sometimes has problem with the above template 1883*b89a7cc2SEnji Cooper // function. 1884*b89a7cc2SEnji Cooper bool PredFunction5Int(int v1, int v2, int v3, int v4, int v5) { 1885*b89a7cc2SEnji Cooper return v1 + v2 + v3 + v4 + v5 > 0; 1886*b89a7cc2SEnji Cooper } 1887*b89a7cc2SEnji Cooper bool PredFunction5Bool(Bool v1, Bool v2, Bool v3, Bool v4, Bool v5) { 1888*b89a7cc2SEnji Cooper return v1 + v2 + v3 + v4 + v5 > 0; 1889*b89a7cc2SEnji Cooper } 1890*b89a7cc2SEnji Cooper 1891*b89a7cc2SEnji Cooper // A 5-ary predicate functor. 1892*b89a7cc2SEnji Cooper struct PredFunctor5 { 1893*b89a7cc2SEnji Cooper template <typename T1, typename T2, typename T3, typename T4, typename T5> 1894*b89a7cc2SEnji Cooper bool operator()(const T1& v1, 1895*b89a7cc2SEnji Cooper const T2& v2, 1896*b89a7cc2SEnji Cooper const T3& v3, 1897*b89a7cc2SEnji Cooper const T4& v4, 1898*b89a7cc2SEnji Cooper const T5& v5) { 1899*b89a7cc2SEnji Cooper return v1 + v2 + v3 + v4 + v5 > 0; 1900*b89a7cc2SEnji Cooper } 1901*b89a7cc2SEnji Cooper }; 1902*b89a7cc2SEnji Cooper 1903*b89a7cc2SEnji Cooper // A 5-ary predicate-formatter function. 1904*b89a7cc2SEnji Cooper template <typename T1, typename T2, typename T3, typename T4, typename T5> 1905*b89a7cc2SEnji Cooper testing::AssertionResult PredFormatFunction5(const char* e1, 1906*b89a7cc2SEnji Cooper const char* e2, 1907*b89a7cc2SEnji Cooper const char* e3, 1908*b89a7cc2SEnji Cooper const char* e4, 1909*b89a7cc2SEnji Cooper const char* e5, 1910*b89a7cc2SEnji Cooper const T1& v1, 1911*b89a7cc2SEnji Cooper const T2& v2, 1912*b89a7cc2SEnji Cooper const T3& v3, 1913*b89a7cc2SEnji Cooper const T4& v4, 1914*b89a7cc2SEnji Cooper const T5& v5) { 1915*b89a7cc2SEnji Cooper if (PredFunction5(v1, v2, v3, v4, v5)) 1916*b89a7cc2SEnji Cooper return testing::AssertionSuccess(); 1917*b89a7cc2SEnji Cooper 1918*b89a7cc2SEnji Cooper return testing::AssertionFailure() 1919*b89a7cc2SEnji Cooper << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " + " << e5 1920*b89a7cc2SEnji Cooper << " is expected to be positive, but evaluates to " 1921*b89a7cc2SEnji Cooper << v1 + v2 + v3 + v4 + v5 << "."; 1922*b89a7cc2SEnji Cooper } 1923*b89a7cc2SEnji Cooper 1924*b89a7cc2SEnji Cooper // A 5-ary predicate-formatter functor. 1925*b89a7cc2SEnji Cooper struct PredFormatFunctor5 { 1926*b89a7cc2SEnji Cooper template <typename T1, typename T2, typename T3, typename T4, typename T5> 1927*b89a7cc2SEnji Cooper testing::AssertionResult operator()(const char* e1, 1928*b89a7cc2SEnji Cooper const char* e2, 1929*b89a7cc2SEnji Cooper const char* e3, 1930*b89a7cc2SEnji Cooper const char* e4, 1931*b89a7cc2SEnji Cooper const char* e5, 1932*b89a7cc2SEnji Cooper const T1& v1, 1933*b89a7cc2SEnji Cooper const T2& v2, 1934*b89a7cc2SEnji Cooper const T3& v3, 1935*b89a7cc2SEnji Cooper const T4& v4, 1936*b89a7cc2SEnji Cooper const T5& v5) const { 1937*b89a7cc2SEnji Cooper return PredFormatFunction5(e1, e2, e3, e4, e5, v1, v2, v3, v4, v5); 1938*b89a7cc2SEnji Cooper } 1939*b89a7cc2SEnji Cooper }; 1940*b89a7cc2SEnji Cooper 1941*b89a7cc2SEnji Cooper // Tests for {EXPECT|ASSERT}_PRED_FORMAT5. 1942*b89a7cc2SEnji Cooper 1943*b89a7cc2SEnji Cooper class Predicate5Test : public testing::Test { 1944*b89a7cc2SEnji Cooper protected: 1945*b89a7cc2SEnji Cooper virtual void SetUp() { 1946*b89a7cc2SEnji Cooper expected_to_finish_ = true; 1947*b89a7cc2SEnji Cooper finished_ = false; 1948*b89a7cc2SEnji Cooper n1_ = n2_ = n3_ = n4_ = n5_ = 0; 1949*b89a7cc2SEnji Cooper } 1950*b89a7cc2SEnji Cooper 1951*b89a7cc2SEnji Cooper virtual void TearDown() { 1952*b89a7cc2SEnji Cooper // Verifies that each of the predicate's arguments was evaluated 1953*b89a7cc2SEnji Cooper // exactly once. 1954*b89a7cc2SEnji Cooper EXPECT_EQ(1, n1_) << 1955*b89a7cc2SEnji Cooper "The predicate assertion didn't evaluate argument 2 " 1956*b89a7cc2SEnji Cooper "exactly once."; 1957*b89a7cc2SEnji Cooper EXPECT_EQ(1, n2_) << 1958*b89a7cc2SEnji Cooper "The predicate assertion didn't evaluate argument 3 " 1959*b89a7cc2SEnji Cooper "exactly once."; 1960*b89a7cc2SEnji Cooper EXPECT_EQ(1, n3_) << 1961*b89a7cc2SEnji Cooper "The predicate assertion didn't evaluate argument 4 " 1962*b89a7cc2SEnji Cooper "exactly once."; 1963*b89a7cc2SEnji Cooper EXPECT_EQ(1, n4_) << 1964*b89a7cc2SEnji Cooper "The predicate assertion didn't evaluate argument 5 " 1965*b89a7cc2SEnji Cooper "exactly once."; 1966*b89a7cc2SEnji Cooper EXPECT_EQ(1, n5_) << 1967*b89a7cc2SEnji Cooper "The predicate assertion didn't evaluate argument 6 " 1968*b89a7cc2SEnji Cooper "exactly once."; 1969*b89a7cc2SEnji Cooper 1970*b89a7cc2SEnji Cooper // Verifies that the control flow in the test function is expected. 1971*b89a7cc2SEnji Cooper if (expected_to_finish_ && !finished_) { 1972*b89a7cc2SEnji Cooper FAIL() << "The predicate assertion unexpactedly aborted the test."; 1973*b89a7cc2SEnji Cooper } else if (!expected_to_finish_ && finished_) { 1974*b89a7cc2SEnji Cooper FAIL() << "The failed predicate assertion didn't abort the test " 1975*b89a7cc2SEnji Cooper "as expected."; 1976*b89a7cc2SEnji Cooper } 1977*b89a7cc2SEnji Cooper } 1978*b89a7cc2SEnji Cooper 1979*b89a7cc2SEnji Cooper // true iff the test function is expected to run to finish. 1980*b89a7cc2SEnji Cooper static bool expected_to_finish_; 1981*b89a7cc2SEnji Cooper 1982*b89a7cc2SEnji Cooper // true iff the test function did run to finish. 1983*b89a7cc2SEnji Cooper static bool finished_; 1984*b89a7cc2SEnji Cooper 1985*b89a7cc2SEnji Cooper static int n1_; 1986*b89a7cc2SEnji Cooper static int n2_; 1987*b89a7cc2SEnji Cooper static int n3_; 1988*b89a7cc2SEnji Cooper static int n4_; 1989*b89a7cc2SEnji Cooper static int n5_; 1990*b89a7cc2SEnji Cooper }; 1991*b89a7cc2SEnji Cooper 1992*b89a7cc2SEnji Cooper bool Predicate5Test::expected_to_finish_; 1993*b89a7cc2SEnji Cooper bool Predicate5Test::finished_; 1994*b89a7cc2SEnji Cooper int Predicate5Test::n1_; 1995*b89a7cc2SEnji Cooper int Predicate5Test::n2_; 1996*b89a7cc2SEnji Cooper int Predicate5Test::n3_; 1997*b89a7cc2SEnji Cooper int Predicate5Test::n4_; 1998*b89a7cc2SEnji Cooper int Predicate5Test::n5_; 1999*b89a7cc2SEnji Cooper 2000*b89a7cc2SEnji Cooper typedef Predicate5Test EXPECT_PRED_FORMAT5Test; 2001*b89a7cc2SEnji Cooper typedef Predicate5Test ASSERT_PRED_FORMAT5Test; 2002*b89a7cc2SEnji Cooper typedef Predicate5Test EXPECT_PRED5Test; 2003*b89a7cc2SEnji Cooper typedef Predicate5Test ASSERT_PRED5Test; 2004*b89a7cc2SEnji Cooper 2005*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED5 where the 2006*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 2007*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED5Test, FunctionOnBuiltInTypeSuccess) { 2008*b89a7cc2SEnji Cooper EXPECT_PRED5(PredFunction5Int, 2009*b89a7cc2SEnji Cooper ++n1_, 2010*b89a7cc2SEnji Cooper ++n2_, 2011*b89a7cc2SEnji Cooper ++n3_, 2012*b89a7cc2SEnji Cooper ++n4_, 2013*b89a7cc2SEnji Cooper ++n5_); 2014*b89a7cc2SEnji Cooper finished_ = true; 2015*b89a7cc2SEnji Cooper } 2016*b89a7cc2SEnji Cooper 2017*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED5 where the 2018*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 2019*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED5Test, FunctionOnUserTypeSuccess) { 2020*b89a7cc2SEnji Cooper EXPECT_PRED5(PredFunction5Bool, 2021*b89a7cc2SEnji Cooper Bool(++n1_), 2022*b89a7cc2SEnji Cooper Bool(++n2_), 2023*b89a7cc2SEnji Cooper Bool(++n3_), 2024*b89a7cc2SEnji Cooper Bool(++n4_), 2025*b89a7cc2SEnji Cooper Bool(++n5_)); 2026*b89a7cc2SEnji Cooper finished_ = true; 2027*b89a7cc2SEnji Cooper } 2028*b89a7cc2SEnji Cooper 2029*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED5 where the 2030*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 2031*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED5Test, FunctorOnBuiltInTypeSuccess) { 2032*b89a7cc2SEnji Cooper EXPECT_PRED5(PredFunctor5(), 2033*b89a7cc2SEnji Cooper ++n1_, 2034*b89a7cc2SEnji Cooper ++n2_, 2035*b89a7cc2SEnji Cooper ++n3_, 2036*b89a7cc2SEnji Cooper ++n4_, 2037*b89a7cc2SEnji Cooper ++n5_); 2038*b89a7cc2SEnji Cooper finished_ = true; 2039*b89a7cc2SEnji Cooper } 2040*b89a7cc2SEnji Cooper 2041*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED5 where the 2042*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 2043*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED5Test, FunctorOnUserTypeSuccess) { 2044*b89a7cc2SEnji Cooper EXPECT_PRED5(PredFunctor5(), 2045*b89a7cc2SEnji Cooper Bool(++n1_), 2046*b89a7cc2SEnji Cooper Bool(++n2_), 2047*b89a7cc2SEnji Cooper Bool(++n3_), 2048*b89a7cc2SEnji Cooper Bool(++n4_), 2049*b89a7cc2SEnji Cooper Bool(++n5_)); 2050*b89a7cc2SEnji Cooper finished_ = true; 2051*b89a7cc2SEnji Cooper } 2052*b89a7cc2SEnji Cooper 2053*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED5 where the 2054*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 2055*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED5Test, FunctionOnBuiltInTypeFailure) { 2056*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 2057*b89a7cc2SEnji Cooper EXPECT_PRED5(PredFunction5Int, 2058*b89a7cc2SEnji Cooper n1_++, 2059*b89a7cc2SEnji Cooper n2_++, 2060*b89a7cc2SEnji Cooper n3_++, 2061*b89a7cc2SEnji Cooper n4_++, 2062*b89a7cc2SEnji Cooper n5_++); 2063*b89a7cc2SEnji Cooper finished_ = true; 2064*b89a7cc2SEnji Cooper }, ""); 2065*b89a7cc2SEnji Cooper } 2066*b89a7cc2SEnji Cooper 2067*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED5 where the 2068*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 2069*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED5Test, FunctionOnUserTypeFailure) { 2070*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 2071*b89a7cc2SEnji Cooper EXPECT_PRED5(PredFunction5Bool, 2072*b89a7cc2SEnji Cooper Bool(n1_++), 2073*b89a7cc2SEnji Cooper Bool(n2_++), 2074*b89a7cc2SEnji Cooper Bool(n3_++), 2075*b89a7cc2SEnji Cooper Bool(n4_++), 2076*b89a7cc2SEnji Cooper Bool(n5_++)); 2077*b89a7cc2SEnji Cooper finished_ = true; 2078*b89a7cc2SEnji Cooper }, ""); 2079*b89a7cc2SEnji Cooper } 2080*b89a7cc2SEnji Cooper 2081*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED5 where the 2082*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 2083*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED5Test, FunctorOnBuiltInTypeFailure) { 2084*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 2085*b89a7cc2SEnji Cooper EXPECT_PRED5(PredFunctor5(), 2086*b89a7cc2SEnji Cooper n1_++, 2087*b89a7cc2SEnji Cooper n2_++, 2088*b89a7cc2SEnji Cooper n3_++, 2089*b89a7cc2SEnji Cooper n4_++, 2090*b89a7cc2SEnji Cooper n5_++); 2091*b89a7cc2SEnji Cooper finished_ = true; 2092*b89a7cc2SEnji Cooper }, ""); 2093*b89a7cc2SEnji Cooper } 2094*b89a7cc2SEnji Cooper 2095*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED5 where the 2096*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 2097*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED5Test, FunctorOnUserTypeFailure) { 2098*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 2099*b89a7cc2SEnji Cooper EXPECT_PRED5(PredFunctor5(), 2100*b89a7cc2SEnji Cooper Bool(n1_++), 2101*b89a7cc2SEnji Cooper Bool(n2_++), 2102*b89a7cc2SEnji Cooper Bool(n3_++), 2103*b89a7cc2SEnji Cooper Bool(n4_++), 2104*b89a7cc2SEnji Cooper Bool(n5_++)); 2105*b89a7cc2SEnji Cooper finished_ = true; 2106*b89a7cc2SEnji Cooper }, ""); 2107*b89a7cc2SEnji Cooper } 2108*b89a7cc2SEnji Cooper 2109*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED5 where the 2110*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 2111*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED5Test, FunctionOnBuiltInTypeSuccess) { 2112*b89a7cc2SEnji Cooper ASSERT_PRED5(PredFunction5Int, 2113*b89a7cc2SEnji Cooper ++n1_, 2114*b89a7cc2SEnji Cooper ++n2_, 2115*b89a7cc2SEnji Cooper ++n3_, 2116*b89a7cc2SEnji Cooper ++n4_, 2117*b89a7cc2SEnji Cooper ++n5_); 2118*b89a7cc2SEnji Cooper finished_ = true; 2119*b89a7cc2SEnji Cooper } 2120*b89a7cc2SEnji Cooper 2121*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED5 where the 2122*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 2123*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED5Test, FunctionOnUserTypeSuccess) { 2124*b89a7cc2SEnji Cooper ASSERT_PRED5(PredFunction5Bool, 2125*b89a7cc2SEnji Cooper Bool(++n1_), 2126*b89a7cc2SEnji Cooper Bool(++n2_), 2127*b89a7cc2SEnji Cooper Bool(++n3_), 2128*b89a7cc2SEnji Cooper Bool(++n4_), 2129*b89a7cc2SEnji Cooper Bool(++n5_)); 2130*b89a7cc2SEnji Cooper finished_ = true; 2131*b89a7cc2SEnji Cooper } 2132*b89a7cc2SEnji Cooper 2133*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED5 where the 2134*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 2135*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED5Test, FunctorOnBuiltInTypeSuccess) { 2136*b89a7cc2SEnji Cooper ASSERT_PRED5(PredFunctor5(), 2137*b89a7cc2SEnji Cooper ++n1_, 2138*b89a7cc2SEnji Cooper ++n2_, 2139*b89a7cc2SEnji Cooper ++n3_, 2140*b89a7cc2SEnji Cooper ++n4_, 2141*b89a7cc2SEnji Cooper ++n5_); 2142*b89a7cc2SEnji Cooper finished_ = true; 2143*b89a7cc2SEnji Cooper } 2144*b89a7cc2SEnji Cooper 2145*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED5 where the 2146*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 2147*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED5Test, FunctorOnUserTypeSuccess) { 2148*b89a7cc2SEnji Cooper ASSERT_PRED5(PredFunctor5(), 2149*b89a7cc2SEnji Cooper Bool(++n1_), 2150*b89a7cc2SEnji Cooper Bool(++n2_), 2151*b89a7cc2SEnji Cooper Bool(++n3_), 2152*b89a7cc2SEnji Cooper Bool(++n4_), 2153*b89a7cc2SEnji Cooper Bool(++n5_)); 2154*b89a7cc2SEnji Cooper finished_ = true; 2155*b89a7cc2SEnji Cooper } 2156*b89a7cc2SEnji Cooper 2157*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED5 where the 2158*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 2159*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED5Test, FunctionOnBuiltInTypeFailure) { 2160*b89a7cc2SEnji Cooper expected_to_finish_ = false; 2161*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 2162*b89a7cc2SEnji Cooper ASSERT_PRED5(PredFunction5Int, 2163*b89a7cc2SEnji Cooper n1_++, 2164*b89a7cc2SEnji Cooper n2_++, 2165*b89a7cc2SEnji Cooper n3_++, 2166*b89a7cc2SEnji Cooper n4_++, 2167*b89a7cc2SEnji Cooper n5_++); 2168*b89a7cc2SEnji Cooper finished_ = true; 2169*b89a7cc2SEnji Cooper }, ""); 2170*b89a7cc2SEnji Cooper } 2171*b89a7cc2SEnji Cooper 2172*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED5 where the 2173*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 2174*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED5Test, FunctionOnUserTypeFailure) { 2175*b89a7cc2SEnji Cooper expected_to_finish_ = false; 2176*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 2177*b89a7cc2SEnji Cooper ASSERT_PRED5(PredFunction5Bool, 2178*b89a7cc2SEnji Cooper Bool(n1_++), 2179*b89a7cc2SEnji Cooper Bool(n2_++), 2180*b89a7cc2SEnji Cooper Bool(n3_++), 2181*b89a7cc2SEnji Cooper Bool(n4_++), 2182*b89a7cc2SEnji Cooper Bool(n5_++)); 2183*b89a7cc2SEnji Cooper finished_ = true; 2184*b89a7cc2SEnji Cooper }, ""); 2185*b89a7cc2SEnji Cooper } 2186*b89a7cc2SEnji Cooper 2187*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED5 where the 2188*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 2189*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED5Test, FunctorOnBuiltInTypeFailure) { 2190*b89a7cc2SEnji Cooper expected_to_finish_ = false; 2191*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 2192*b89a7cc2SEnji Cooper ASSERT_PRED5(PredFunctor5(), 2193*b89a7cc2SEnji Cooper n1_++, 2194*b89a7cc2SEnji Cooper n2_++, 2195*b89a7cc2SEnji Cooper n3_++, 2196*b89a7cc2SEnji Cooper n4_++, 2197*b89a7cc2SEnji Cooper n5_++); 2198*b89a7cc2SEnji Cooper finished_ = true; 2199*b89a7cc2SEnji Cooper }, ""); 2200*b89a7cc2SEnji Cooper } 2201*b89a7cc2SEnji Cooper 2202*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED5 where the 2203*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 2204*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED5Test, FunctorOnUserTypeFailure) { 2205*b89a7cc2SEnji Cooper expected_to_finish_ = false; 2206*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 2207*b89a7cc2SEnji Cooper ASSERT_PRED5(PredFunctor5(), 2208*b89a7cc2SEnji Cooper Bool(n1_++), 2209*b89a7cc2SEnji Cooper Bool(n2_++), 2210*b89a7cc2SEnji Cooper Bool(n3_++), 2211*b89a7cc2SEnji Cooper Bool(n4_++), 2212*b89a7cc2SEnji Cooper Bool(n5_++)); 2213*b89a7cc2SEnji Cooper finished_ = true; 2214*b89a7cc2SEnji Cooper }, ""); 2215*b89a7cc2SEnji Cooper } 2216*b89a7cc2SEnji Cooper 2217*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT5 where the 2218*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 2219*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnBuiltInTypeSuccess) { 2220*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT5(PredFormatFunction5, 2221*b89a7cc2SEnji Cooper ++n1_, 2222*b89a7cc2SEnji Cooper ++n2_, 2223*b89a7cc2SEnji Cooper ++n3_, 2224*b89a7cc2SEnji Cooper ++n4_, 2225*b89a7cc2SEnji Cooper ++n5_); 2226*b89a7cc2SEnji Cooper finished_ = true; 2227*b89a7cc2SEnji Cooper } 2228*b89a7cc2SEnji Cooper 2229*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT5 where the 2230*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 2231*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnUserTypeSuccess) { 2232*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT5(PredFormatFunction5, 2233*b89a7cc2SEnji Cooper Bool(++n1_), 2234*b89a7cc2SEnji Cooper Bool(++n2_), 2235*b89a7cc2SEnji Cooper Bool(++n3_), 2236*b89a7cc2SEnji Cooper Bool(++n4_), 2237*b89a7cc2SEnji Cooper Bool(++n5_)); 2238*b89a7cc2SEnji Cooper finished_ = true; 2239*b89a7cc2SEnji Cooper } 2240*b89a7cc2SEnji Cooper 2241*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT5 where the 2242*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 2243*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnBuiltInTypeSuccess) { 2244*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT5(PredFormatFunctor5(), 2245*b89a7cc2SEnji Cooper ++n1_, 2246*b89a7cc2SEnji Cooper ++n2_, 2247*b89a7cc2SEnji Cooper ++n3_, 2248*b89a7cc2SEnji Cooper ++n4_, 2249*b89a7cc2SEnji Cooper ++n5_); 2250*b89a7cc2SEnji Cooper finished_ = true; 2251*b89a7cc2SEnji Cooper } 2252*b89a7cc2SEnji Cooper 2253*b89a7cc2SEnji Cooper // Tests a successful EXPECT_PRED_FORMAT5 where the 2254*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 2255*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnUserTypeSuccess) { 2256*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT5(PredFormatFunctor5(), 2257*b89a7cc2SEnji Cooper Bool(++n1_), 2258*b89a7cc2SEnji Cooper Bool(++n2_), 2259*b89a7cc2SEnji Cooper Bool(++n3_), 2260*b89a7cc2SEnji Cooper Bool(++n4_), 2261*b89a7cc2SEnji Cooper Bool(++n5_)); 2262*b89a7cc2SEnji Cooper finished_ = true; 2263*b89a7cc2SEnji Cooper } 2264*b89a7cc2SEnji Cooper 2265*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT5 where the 2266*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 2267*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnBuiltInTypeFailure) { 2268*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 2269*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT5(PredFormatFunction5, 2270*b89a7cc2SEnji Cooper n1_++, 2271*b89a7cc2SEnji Cooper n2_++, 2272*b89a7cc2SEnji Cooper n3_++, 2273*b89a7cc2SEnji Cooper n4_++, 2274*b89a7cc2SEnji Cooper n5_++); 2275*b89a7cc2SEnji Cooper finished_ = true; 2276*b89a7cc2SEnji Cooper }, ""); 2277*b89a7cc2SEnji Cooper } 2278*b89a7cc2SEnji Cooper 2279*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT5 where the 2280*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 2281*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnUserTypeFailure) { 2282*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 2283*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT5(PredFormatFunction5, 2284*b89a7cc2SEnji Cooper Bool(n1_++), 2285*b89a7cc2SEnji Cooper Bool(n2_++), 2286*b89a7cc2SEnji Cooper Bool(n3_++), 2287*b89a7cc2SEnji Cooper Bool(n4_++), 2288*b89a7cc2SEnji Cooper Bool(n5_++)); 2289*b89a7cc2SEnji Cooper finished_ = true; 2290*b89a7cc2SEnji Cooper }, ""); 2291*b89a7cc2SEnji Cooper } 2292*b89a7cc2SEnji Cooper 2293*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT5 where the 2294*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 2295*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnBuiltInTypeFailure) { 2296*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 2297*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT5(PredFormatFunctor5(), 2298*b89a7cc2SEnji Cooper n1_++, 2299*b89a7cc2SEnji Cooper n2_++, 2300*b89a7cc2SEnji Cooper n3_++, 2301*b89a7cc2SEnji Cooper n4_++, 2302*b89a7cc2SEnji Cooper n5_++); 2303*b89a7cc2SEnji Cooper finished_ = true; 2304*b89a7cc2SEnji Cooper }, ""); 2305*b89a7cc2SEnji Cooper } 2306*b89a7cc2SEnji Cooper 2307*b89a7cc2SEnji Cooper // Tests a failed EXPECT_PRED_FORMAT5 where the 2308*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 2309*b89a7cc2SEnji Cooper TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnUserTypeFailure) { 2310*b89a7cc2SEnji Cooper EXPECT_NONFATAL_FAILURE({ // NOLINT 2311*b89a7cc2SEnji Cooper EXPECT_PRED_FORMAT5(PredFormatFunctor5(), 2312*b89a7cc2SEnji Cooper Bool(n1_++), 2313*b89a7cc2SEnji Cooper Bool(n2_++), 2314*b89a7cc2SEnji Cooper Bool(n3_++), 2315*b89a7cc2SEnji Cooper Bool(n4_++), 2316*b89a7cc2SEnji Cooper Bool(n5_++)); 2317*b89a7cc2SEnji Cooper finished_ = true; 2318*b89a7cc2SEnji Cooper }, ""); 2319*b89a7cc2SEnji Cooper } 2320*b89a7cc2SEnji Cooper 2321*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT5 where the 2322*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 2323*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnBuiltInTypeSuccess) { 2324*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT5(PredFormatFunction5, 2325*b89a7cc2SEnji Cooper ++n1_, 2326*b89a7cc2SEnji Cooper ++n2_, 2327*b89a7cc2SEnji Cooper ++n3_, 2328*b89a7cc2SEnji Cooper ++n4_, 2329*b89a7cc2SEnji Cooper ++n5_); 2330*b89a7cc2SEnji Cooper finished_ = true; 2331*b89a7cc2SEnji Cooper } 2332*b89a7cc2SEnji Cooper 2333*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT5 where the 2334*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 2335*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnUserTypeSuccess) { 2336*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT5(PredFormatFunction5, 2337*b89a7cc2SEnji Cooper Bool(++n1_), 2338*b89a7cc2SEnji Cooper Bool(++n2_), 2339*b89a7cc2SEnji Cooper Bool(++n3_), 2340*b89a7cc2SEnji Cooper Bool(++n4_), 2341*b89a7cc2SEnji Cooper Bool(++n5_)); 2342*b89a7cc2SEnji Cooper finished_ = true; 2343*b89a7cc2SEnji Cooper } 2344*b89a7cc2SEnji Cooper 2345*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT5 where the 2346*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 2347*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnBuiltInTypeSuccess) { 2348*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT5(PredFormatFunctor5(), 2349*b89a7cc2SEnji Cooper ++n1_, 2350*b89a7cc2SEnji Cooper ++n2_, 2351*b89a7cc2SEnji Cooper ++n3_, 2352*b89a7cc2SEnji Cooper ++n4_, 2353*b89a7cc2SEnji Cooper ++n5_); 2354*b89a7cc2SEnji Cooper finished_ = true; 2355*b89a7cc2SEnji Cooper } 2356*b89a7cc2SEnji Cooper 2357*b89a7cc2SEnji Cooper // Tests a successful ASSERT_PRED_FORMAT5 where the 2358*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 2359*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnUserTypeSuccess) { 2360*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT5(PredFormatFunctor5(), 2361*b89a7cc2SEnji Cooper Bool(++n1_), 2362*b89a7cc2SEnji Cooper Bool(++n2_), 2363*b89a7cc2SEnji Cooper Bool(++n3_), 2364*b89a7cc2SEnji Cooper Bool(++n4_), 2365*b89a7cc2SEnji Cooper Bool(++n5_)); 2366*b89a7cc2SEnji Cooper finished_ = true; 2367*b89a7cc2SEnji Cooper } 2368*b89a7cc2SEnji Cooper 2369*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT5 where the 2370*b89a7cc2SEnji Cooper // predicate-formatter is a function on a built-in type (int). 2371*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnBuiltInTypeFailure) { 2372*b89a7cc2SEnji Cooper expected_to_finish_ = false; 2373*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 2374*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT5(PredFormatFunction5, 2375*b89a7cc2SEnji Cooper n1_++, 2376*b89a7cc2SEnji Cooper n2_++, 2377*b89a7cc2SEnji Cooper n3_++, 2378*b89a7cc2SEnji Cooper n4_++, 2379*b89a7cc2SEnji Cooper n5_++); 2380*b89a7cc2SEnji Cooper finished_ = true; 2381*b89a7cc2SEnji Cooper }, ""); 2382*b89a7cc2SEnji Cooper } 2383*b89a7cc2SEnji Cooper 2384*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT5 where the 2385*b89a7cc2SEnji Cooper // predicate-formatter is a function on a user-defined type (Bool). 2386*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnUserTypeFailure) { 2387*b89a7cc2SEnji Cooper expected_to_finish_ = false; 2388*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 2389*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT5(PredFormatFunction5, 2390*b89a7cc2SEnji Cooper Bool(n1_++), 2391*b89a7cc2SEnji Cooper Bool(n2_++), 2392*b89a7cc2SEnji Cooper Bool(n3_++), 2393*b89a7cc2SEnji Cooper Bool(n4_++), 2394*b89a7cc2SEnji Cooper Bool(n5_++)); 2395*b89a7cc2SEnji Cooper finished_ = true; 2396*b89a7cc2SEnji Cooper }, ""); 2397*b89a7cc2SEnji Cooper } 2398*b89a7cc2SEnji Cooper 2399*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT5 where the 2400*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a built-in type (int). 2401*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnBuiltInTypeFailure) { 2402*b89a7cc2SEnji Cooper expected_to_finish_ = false; 2403*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 2404*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT5(PredFormatFunctor5(), 2405*b89a7cc2SEnji Cooper n1_++, 2406*b89a7cc2SEnji Cooper n2_++, 2407*b89a7cc2SEnji Cooper n3_++, 2408*b89a7cc2SEnji Cooper n4_++, 2409*b89a7cc2SEnji Cooper n5_++); 2410*b89a7cc2SEnji Cooper finished_ = true; 2411*b89a7cc2SEnji Cooper }, ""); 2412*b89a7cc2SEnji Cooper } 2413*b89a7cc2SEnji Cooper 2414*b89a7cc2SEnji Cooper // Tests a failed ASSERT_PRED_FORMAT5 where the 2415*b89a7cc2SEnji Cooper // predicate-formatter is a functor on a user-defined type (Bool). 2416*b89a7cc2SEnji Cooper TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnUserTypeFailure) { 2417*b89a7cc2SEnji Cooper expected_to_finish_ = false; 2418*b89a7cc2SEnji Cooper EXPECT_FATAL_FAILURE({ // NOLINT 2419*b89a7cc2SEnji Cooper ASSERT_PRED_FORMAT5(PredFormatFunctor5(), 2420*b89a7cc2SEnji Cooper Bool(n1_++), 2421*b89a7cc2SEnji Cooper Bool(n2_++), 2422*b89a7cc2SEnji Cooper Bool(n3_++), 2423*b89a7cc2SEnji Cooper Bool(n4_++), 2424*b89a7cc2SEnji Cooper Bool(n5_++)); 2425*b89a7cc2SEnji Cooper finished_ = true; 2426*b89a7cc2SEnji Cooper }, ""); 2427*b89a7cc2SEnji Cooper } 2428