113481Sgiacomo.travaglini@arm.com// Copyright 2006, Google Inc.
213481Sgiacomo.travaglini@arm.com// All rights reserved.
313481Sgiacomo.travaglini@arm.com//
413481Sgiacomo.travaglini@arm.com// Redistribution and use in source and binary forms, with or without
513481Sgiacomo.travaglini@arm.com// modification, are permitted provided that the following conditions are
613481Sgiacomo.travaglini@arm.com// met:
713481Sgiacomo.travaglini@arm.com//
813481Sgiacomo.travaglini@arm.com//     * Redistributions of source code must retain the above copyright
913481Sgiacomo.travaglini@arm.com// notice, this list of conditions and the following disclaimer.
1013481Sgiacomo.travaglini@arm.com//     * Redistributions in binary form must reproduce the above
1113481Sgiacomo.travaglini@arm.com// copyright notice, this list of conditions and the following disclaimer
1213481Sgiacomo.travaglini@arm.com// in the documentation and/or other materials provided with the
1313481Sgiacomo.travaglini@arm.com// distribution.
1413481Sgiacomo.travaglini@arm.com//     * Neither the name of Google Inc. nor the names of its
1513481Sgiacomo.travaglini@arm.com// contributors may be used to endorse or promote products derived from
1613481Sgiacomo.travaglini@arm.com// this software without specific prior written permission.
1713481Sgiacomo.travaglini@arm.com//
1813481Sgiacomo.travaglini@arm.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1913481Sgiacomo.travaglini@arm.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2013481Sgiacomo.travaglini@arm.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2113481Sgiacomo.travaglini@arm.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2213481Sgiacomo.travaglini@arm.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2313481Sgiacomo.travaglini@arm.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2413481Sgiacomo.travaglini@arm.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2513481Sgiacomo.travaglini@arm.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2613481Sgiacomo.travaglini@arm.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2713481Sgiacomo.travaglini@arm.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2813481Sgiacomo.travaglini@arm.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2913481Sgiacomo.travaglini@arm.com
3013481Sgiacomo.travaglini@arm.com// This file is AUTOMATICALLY GENERATED on 10/31/2011 by command
3113481Sgiacomo.travaglini@arm.com// 'gen_gtest_pred_impl.py 5'.  DO NOT EDIT BY HAND!
3213481Sgiacomo.travaglini@arm.com
3313481Sgiacomo.travaglini@arm.com// Regression test for gtest_pred_impl.h
3413481Sgiacomo.travaglini@arm.com//
3513481Sgiacomo.travaglini@arm.com// This file is generated by a script and quite long.  If you intend to
3613481Sgiacomo.travaglini@arm.com// learn how Google Test works by reading its unit tests, read
3713481Sgiacomo.travaglini@arm.com// gtest_unittest.cc instead.
3813481Sgiacomo.travaglini@arm.com//
3913481Sgiacomo.travaglini@arm.com// This is intended as a regression test for the Google Test predicate
4013481Sgiacomo.travaglini@arm.com// assertions.  We compile it as part of the gtest_unittest target
4113481Sgiacomo.travaglini@arm.com// only to keep the implementation tidy and compact, as it is quite
4213481Sgiacomo.travaglini@arm.com// involved to set up the stage for testing Google Test using Google
4313481Sgiacomo.travaglini@arm.com// Test itself.
4413481Sgiacomo.travaglini@arm.com//
4513481Sgiacomo.travaglini@arm.com// Currently, gtest_unittest takes ~11 seconds to run in the testing
4613481Sgiacomo.travaglini@arm.com// daemon.  In the future, if it grows too large and needs much more
4713481Sgiacomo.travaglini@arm.com// time to finish, we should consider separating this file into a
4813481Sgiacomo.travaglini@arm.com// stand-alone regression test.
4913481Sgiacomo.travaglini@arm.com
5013481Sgiacomo.travaglini@arm.com#include <iostream>
5113481Sgiacomo.travaglini@arm.com
5213481Sgiacomo.travaglini@arm.com#include "gtest/gtest.h"
5313481Sgiacomo.travaglini@arm.com#include "gtest/gtest-spi.h"
5413481Sgiacomo.travaglini@arm.com
5513481Sgiacomo.travaglini@arm.com// A user-defined data type.
5613481Sgiacomo.travaglini@arm.comstruct Bool {
5713481Sgiacomo.travaglini@arm.com  explicit Bool(int val) : value(val != 0) {}
5813481Sgiacomo.travaglini@arm.com
5913481Sgiacomo.travaglini@arm.com  bool operator>(int n) const { return value > Bool(n).value; }
6013481Sgiacomo.travaglini@arm.com
6113481Sgiacomo.travaglini@arm.com  Bool operator+(const Bool& rhs) const { return Bool(value + rhs.value); }
6213481Sgiacomo.travaglini@arm.com
6313481Sgiacomo.travaglini@arm.com  bool operator==(const Bool& rhs) const { return value == rhs.value; }
6413481Sgiacomo.travaglini@arm.com
6513481Sgiacomo.travaglini@arm.com  bool value;
6613481Sgiacomo.travaglini@arm.com};
6713481Sgiacomo.travaglini@arm.com
6813481Sgiacomo.travaglini@arm.com// Enables Bool to be used in assertions.
6913481Sgiacomo.travaglini@arm.comstd::ostream& operator<<(std::ostream& os, const Bool& x) {
7013481Sgiacomo.travaglini@arm.com  return os << (x.value ? "true" : "false");
7113481Sgiacomo.travaglini@arm.com}
7213481Sgiacomo.travaglini@arm.com
7313481Sgiacomo.travaglini@arm.com// Sample functions/functors for testing unary predicate assertions.
7413481Sgiacomo.travaglini@arm.com
7513481Sgiacomo.travaglini@arm.com// A unary predicate function.
7613481Sgiacomo.travaglini@arm.comtemplate <typename T1>
7713481Sgiacomo.travaglini@arm.combool PredFunction1(T1 v1) {
7813481Sgiacomo.travaglini@arm.com  return v1 > 0;
7913481Sgiacomo.travaglini@arm.com}
8013481Sgiacomo.travaglini@arm.com
8113481Sgiacomo.travaglini@arm.com// The following two functions are needed to circumvent a bug in
8213481Sgiacomo.travaglini@arm.com// gcc 2.95.3, which sometimes has problem with the above template
8313481Sgiacomo.travaglini@arm.com// function.
8413481Sgiacomo.travaglini@arm.combool PredFunction1Int(int v1) {
8513481Sgiacomo.travaglini@arm.com  return v1 > 0;
8613481Sgiacomo.travaglini@arm.com}
8713481Sgiacomo.travaglini@arm.combool PredFunction1Bool(Bool v1) {
8813481Sgiacomo.travaglini@arm.com  return v1 > 0;
8913481Sgiacomo.travaglini@arm.com}
9013481Sgiacomo.travaglini@arm.com
9113481Sgiacomo.travaglini@arm.com// A unary predicate functor.
9213481Sgiacomo.travaglini@arm.comstruct PredFunctor1 {
9313481Sgiacomo.travaglini@arm.com  template <typename T1>
9413481Sgiacomo.travaglini@arm.com  bool operator()(const T1& v1) {
9513481Sgiacomo.travaglini@arm.com    return v1 > 0;
9613481Sgiacomo.travaglini@arm.com  }
9713481Sgiacomo.travaglini@arm.com};
9813481Sgiacomo.travaglini@arm.com
9913481Sgiacomo.travaglini@arm.com// A unary predicate-formatter function.
10013481Sgiacomo.travaglini@arm.comtemplate <typename T1>
10113481Sgiacomo.travaglini@arm.comtesting::AssertionResult PredFormatFunction1(const char* e1,
10213481Sgiacomo.travaglini@arm.com                                             const T1& v1) {
10313481Sgiacomo.travaglini@arm.com  if (PredFunction1(v1))
10413481Sgiacomo.travaglini@arm.com    return testing::AssertionSuccess();
10513481Sgiacomo.travaglini@arm.com
10613481Sgiacomo.travaglini@arm.com  return testing::AssertionFailure()
10713481Sgiacomo.travaglini@arm.com      << e1
10813481Sgiacomo.travaglini@arm.com      << " is expected to be positive, but evaluates to "
10913481Sgiacomo.travaglini@arm.com      << v1 << ".";
11013481Sgiacomo.travaglini@arm.com}
11113481Sgiacomo.travaglini@arm.com
11213481Sgiacomo.travaglini@arm.com// A unary predicate-formatter functor.
11313481Sgiacomo.travaglini@arm.comstruct PredFormatFunctor1 {
11413481Sgiacomo.travaglini@arm.com  template <typename T1>
11513481Sgiacomo.travaglini@arm.com  testing::AssertionResult operator()(const char* e1,
11613481Sgiacomo.travaglini@arm.com                                      const T1& v1) const {
11713481Sgiacomo.travaglini@arm.com    return PredFormatFunction1(e1, v1);
11813481Sgiacomo.travaglini@arm.com  }
11913481Sgiacomo.travaglini@arm.com};
12013481Sgiacomo.travaglini@arm.com
12113481Sgiacomo.travaglini@arm.com// Tests for {EXPECT|ASSERT}_PRED_FORMAT1.
12213481Sgiacomo.travaglini@arm.com
12313481Sgiacomo.travaglini@arm.comclass Predicate1Test : public testing::Test {
12413481Sgiacomo.travaglini@arm.com protected:
12513481Sgiacomo.travaglini@arm.com  virtual void SetUp() {
12613481Sgiacomo.travaglini@arm.com    expected_to_finish_ = true;
12713481Sgiacomo.travaglini@arm.com    finished_ = false;
12813481Sgiacomo.travaglini@arm.com    n1_ = 0;
12913481Sgiacomo.travaglini@arm.com  }
13013481Sgiacomo.travaglini@arm.com
13113481Sgiacomo.travaglini@arm.com  virtual void TearDown() {
13213481Sgiacomo.travaglini@arm.com    // Verifies that each of the predicate's arguments was evaluated
13313481Sgiacomo.travaglini@arm.com    // exactly once.
13413481Sgiacomo.travaglini@arm.com    EXPECT_EQ(1, n1_) <<
13513481Sgiacomo.travaglini@arm.com        "The predicate assertion didn't evaluate argument 2 "
13613481Sgiacomo.travaglini@arm.com        "exactly once.";
13713481Sgiacomo.travaglini@arm.com
13813481Sgiacomo.travaglini@arm.com    // Verifies that the control flow in the test function is expected.
13913481Sgiacomo.travaglini@arm.com    if (expected_to_finish_ && !finished_) {
14013481Sgiacomo.travaglini@arm.com      FAIL() << "The predicate assertion unexpactedly aborted the test.";
14113481Sgiacomo.travaglini@arm.com    } else if (!expected_to_finish_ && finished_) {
14213481Sgiacomo.travaglini@arm.com      FAIL() << "The failed predicate assertion didn't abort the test "
14313481Sgiacomo.travaglini@arm.com                "as expected.";
14413481Sgiacomo.travaglini@arm.com    }
14513481Sgiacomo.travaglini@arm.com  }
14613481Sgiacomo.travaglini@arm.com
14713481Sgiacomo.travaglini@arm.com  // true iff the test function is expected to run to finish.
14813481Sgiacomo.travaglini@arm.com  static bool expected_to_finish_;
14913481Sgiacomo.travaglini@arm.com
15013481Sgiacomo.travaglini@arm.com  // true iff the test function did run to finish.
15113481Sgiacomo.travaglini@arm.com  static bool finished_;
15213481Sgiacomo.travaglini@arm.com
15313481Sgiacomo.travaglini@arm.com  static int n1_;
15413481Sgiacomo.travaglini@arm.com};
15513481Sgiacomo.travaglini@arm.com
15613481Sgiacomo.travaglini@arm.combool Predicate1Test::expected_to_finish_;
15713481Sgiacomo.travaglini@arm.combool Predicate1Test::finished_;
15813481Sgiacomo.travaglini@arm.comint Predicate1Test::n1_;
15913481Sgiacomo.travaglini@arm.com
16013481Sgiacomo.travaglini@arm.comtypedef Predicate1Test EXPECT_PRED_FORMAT1Test;
16113481Sgiacomo.travaglini@arm.comtypedef Predicate1Test ASSERT_PRED_FORMAT1Test;
16213481Sgiacomo.travaglini@arm.comtypedef Predicate1Test EXPECT_PRED1Test;
16313481Sgiacomo.travaglini@arm.comtypedef Predicate1Test ASSERT_PRED1Test;
16413481Sgiacomo.travaglini@arm.com
16513481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED1 where the
16613481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
16713481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED1Test, FunctionOnBuiltInTypeSuccess) {
16813481Sgiacomo.travaglini@arm.com  EXPECT_PRED1(PredFunction1Int,
16913481Sgiacomo.travaglini@arm.com               ++n1_);
17013481Sgiacomo.travaglini@arm.com  finished_ = true;
17113481Sgiacomo.travaglini@arm.com}
17213481Sgiacomo.travaglini@arm.com
17313481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED1 where the
17413481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
17513481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED1Test, FunctionOnUserTypeSuccess) {
17613481Sgiacomo.travaglini@arm.com  EXPECT_PRED1(PredFunction1Bool,
17713481Sgiacomo.travaglini@arm.com               Bool(++n1_));
17813481Sgiacomo.travaglini@arm.com  finished_ = true;
17913481Sgiacomo.travaglini@arm.com}
18013481Sgiacomo.travaglini@arm.com
18113481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED1 where the
18213481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
18313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED1Test, FunctorOnBuiltInTypeSuccess) {
18413481Sgiacomo.travaglini@arm.com  EXPECT_PRED1(PredFunctor1(),
18513481Sgiacomo.travaglini@arm.com               ++n1_);
18613481Sgiacomo.travaglini@arm.com  finished_ = true;
18713481Sgiacomo.travaglini@arm.com}
18813481Sgiacomo.travaglini@arm.com
18913481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED1 where the
19013481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
19113481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED1Test, FunctorOnUserTypeSuccess) {
19213481Sgiacomo.travaglini@arm.com  EXPECT_PRED1(PredFunctor1(),
19313481Sgiacomo.travaglini@arm.com               Bool(++n1_));
19413481Sgiacomo.travaglini@arm.com  finished_ = true;
19513481Sgiacomo.travaglini@arm.com}
19613481Sgiacomo.travaglini@arm.com
19713481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED1 where the
19813481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
19913481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED1Test, FunctionOnBuiltInTypeFailure) {
20013481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
20113481Sgiacomo.travaglini@arm.com    EXPECT_PRED1(PredFunction1Int,
20213481Sgiacomo.travaglini@arm.com                 n1_++);
20313481Sgiacomo.travaglini@arm.com    finished_ = true;
20413481Sgiacomo.travaglini@arm.com  }, "");
20513481Sgiacomo.travaglini@arm.com}
20613481Sgiacomo.travaglini@arm.com
20713481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED1 where the
20813481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
20913481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED1Test, FunctionOnUserTypeFailure) {
21013481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
21113481Sgiacomo.travaglini@arm.com    EXPECT_PRED1(PredFunction1Bool,
21213481Sgiacomo.travaglini@arm.com                 Bool(n1_++));
21313481Sgiacomo.travaglini@arm.com    finished_ = true;
21413481Sgiacomo.travaglini@arm.com  }, "");
21513481Sgiacomo.travaglini@arm.com}
21613481Sgiacomo.travaglini@arm.com
21713481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED1 where the
21813481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
21913481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED1Test, FunctorOnBuiltInTypeFailure) {
22013481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
22113481Sgiacomo.travaglini@arm.com    EXPECT_PRED1(PredFunctor1(),
22213481Sgiacomo.travaglini@arm.com                 n1_++);
22313481Sgiacomo.travaglini@arm.com    finished_ = true;
22413481Sgiacomo.travaglini@arm.com  }, "");
22513481Sgiacomo.travaglini@arm.com}
22613481Sgiacomo.travaglini@arm.com
22713481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED1 where the
22813481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
22913481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED1Test, FunctorOnUserTypeFailure) {
23013481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
23113481Sgiacomo.travaglini@arm.com    EXPECT_PRED1(PredFunctor1(),
23213481Sgiacomo.travaglini@arm.com                 Bool(n1_++));
23313481Sgiacomo.travaglini@arm.com    finished_ = true;
23413481Sgiacomo.travaglini@arm.com  }, "");
23513481Sgiacomo.travaglini@arm.com}
23613481Sgiacomo.travaglini@arm.com
23713481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED1 where the
23813481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
23913481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED1Test, FunctionOnBuiltInTypeSuccess) {
24013481Sgiacomo.travaglini@arm.com  ASSERT_PRED1(PredFunction1Int,
24113481Sgiacomo.travaglini@arm.com               ++n1_);
24213481Sgiacomo.travaglini@arm.com  finished_ = true;
24313481Sgiacomo.travaglini@arm.com}
24413481Sgiacomo.travaglini@arm.com
24513481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED1 where the
24613481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
24713481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED1Test, FunctionOnUserTypeSuccess) {
24813481Sgiacomo.travaglini@arm.com  ASSERT_PRED1(PredFunction1Bool,
24913481Sgiacomo.travaglini@arm.com               Bool(++n1_));
25013481Sgiacomo.travaglini@arm.com  finished_ = true;
25113481Sgiacomo.travaglini@arm.com}
25213481Sgiacomo.travaglini@arm.com
25313481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED1 where the
25413481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
25513481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED1Test, FunctorOnBuiltInTypeSuccess) {
25613481Sgiacomo.travaglini@arm.com  ASSERT_PRED1(PredFunctor1(),
25713481Sgiacomo.travaglini@arm.com               ++n1_);
25813481Sgiacomo.travaglini@arm.com  finished_ = true;
25913481Sgiacomo.travaglini@arm.com}
26013481Sgiacomo.travaglini@arm.com
26113481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED1 where the
26213481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
26313481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED1Test, FunctorOnUserTypeSuccess) {
26413481Sgiacomo.travaglini@arm.com  ASSERT_PRED1(PredFunctor1(),
26513481Sgiacomo.travaglini@arm.com               Bool(++n1_));
26613481Sgiacomo.travaglini@arm.com  finished_ = true;
26713481Sgiacomo.travaglini@arm.com}
26813481Sgiacomo.travaglini@arm.com
26913481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED1 where the
27013481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
27113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED1Test, FunctionOnBuiltInTypeFailure) {
27213481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
27313481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
27413481Sgiacomo.travaglini@arm.com    ASSERT_PRED1(PredFunction1Int,
27513481Sgiacomo.travaglini@arm.com                 n1_++);
27613481Sgiacomo.travaglini@arm.com    finished_ = true;
27713481Sgiacomo.travaglini@arm.com  }, "");
27813481Sgiacomo.travaglini@arm.com}
27913481Sgiacomo.travaglini@arm.com
28013481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED1 where the
28113481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
28213481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED1Test, FunctionOnUserTypeFailure) {
28313481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
28413481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
28513481Sgiacomo.travaglini@arm.com    ASSERT_PRED1(PredFunction1Bool,
28613481Sgiacomo.travaglini@arm.com                 Bool(n1_++));
28713481Sgiacomo.travaglini@arm.com    finished_ = true;
28813481Sgiacomo.travaglini@arm.com  }, "");
28913481Sgiacomo.travaglini@arm.com}
29013481Sgiacomo.travaglini@arm.com
29113481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED1 where the
29213481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
29313481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED1Test, FunctorOnBuiltInTypeFailure) {
29413481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
29513481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
29613481Sgiacomo.travaglini@arm.com    ASSERT_PRED1(PredFunctor1(),
29713481Sgiacomo.travaglini@arm.com                 n1_++);
29813481Sgiacomo.travaglini@arm.com    finished_ = true;
29913481Sgiacomo.travaglini@arm.com  }, "");
30013481Sgiacomo.travaglini@arm.com}
30113481Sgiacomo.travaglini@arm.com
30213481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED1 where the
30313481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
30413481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED1Test, FunctorOnUserTypeFailure) {
30513481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
30613481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
30713481Sgiacomo.travaglini@arm.com    ASSERT_PRED1(PredFunctor1(),
30813481Sgiacomo.travaglini@arm.com                 Bool(n1_++));
30913481Sgiacomo.travaglini@arm.com    finished_ = true;
31013481Sgiacomo.travaglini@arm.com  }, "");
31113481Sgiacomo.travaglini@arm.com}
31213481Sgiacomo.travaglini@arm.com
31313481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT1 where the
31413481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
31513481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnBuiltInTypeSuccess) {
31613481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT1(PredFormatFunction1,
31713481Sgiacomo.travaglini@arm.com                      ++n1_);
31813481Sgiacomo.travaglini@arm.com  finished_ = true;
31913481Sgiacomo.travaglini@arm.com}
32013481Sgiacomo.travaglini@arm.com
32113481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT1 where the
32213481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
32313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnUserTypeSuccess) {
32413481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT1(PredFormatFunction1,
32513481Sgiacomo.travaglini@arm.com                      Bool(++n1_));
32613481Sgiacomo.travaglini@arm.com  finished_ = true;
32713481Sgiacomo.travaglini@arm.com}
32813481Sgiacomo.travaglini@arm.com
32913481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT1 where the
33013481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
33113481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnBuiltInTypeSuccess) {
33213481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT1(PredFormatFunctor1(),
33313481Sgiacomo.travaglini@arm.com                      ++n1_);
33413481Sgiacomo.travaglini@arm.com  finished_ = true;
33513481Sgiacomo.travaglini@arm.com}
33613481Sgiacomo.travaglini@arm.com
33713481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT1 where the
33813481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
33913481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnUserTypeSuccess) {
34013481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT1(PredFormatFunctor1(),
34113481Sgiacomo.travaglini@arm.com                      Bool(++n1_));
34213481Sgiacomo.travaglini@arm.com  finished_ = true;
34313481Sgiacomo.travaglini@arm.com}
34413481Sgiacomo.travaglini@arm.com
34513481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT1 where the
34613481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
34713481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnBuiltInTypeFailure) {
34813481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
34913481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT1(PredFormatFunction1,
35013481Sgiacomo.travaglini@arm.com                        n1_++);
35113481Sgiacomo.travaglini@arm.com    finished_ = true;
35213481Sgiacomo.travaglini@arm.com  }, "");
35313481Sgiacomo.travaglini@arm.com}
35413481Sgiacomo.travaglini@arm.com
35513481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT1 where the
35613481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
35713481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnUserTypeFailure) {
35813481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
35913481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT1(PredFormatFunction1,
36013481Sgiacomo.travaglini@arm.com                        Bool(n1_++));
36113481Sgiacomo.travaglini@arm.com    finished_ = true;
36213481Sgiacomo.travaglini@arm.com  }, "");
36313481Sgiacomo.travaglini@arm.com}
36413481Sgiacomo.travaglini@arm.com
36513481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT1 where the
36613481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
36713481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnBuiltInTypeFailure) {
36813481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
36913481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT1(PredFormatFunctor1(),
37013481Sgiacomo.travaglini@arm.com                        n1_++);
37113481Sgiacomo.travaglini@arm.com    finished_ = true;
37213481Sgiacomo.travaglini@arm.com  }, "");
37313481Sgiacomo.travaglini@arm.com}
37413481Sgiacomo.travaglini@arm.com
37513481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT1 where the
37613481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
37713481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnUserTypeFailure) {
37813481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
37913481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT1(PredFormatFunctor1(),
38013481Sgiacomo.travaglini@arm.com                        Bool(n1_++));
38113481Sgiacomo.travaglini@arm.com    finished_ = true;
38213481Sgiacomo.travaglini@arm.com  }, "");
38313481Sgiacomo.travaglini@arm.com}
38413481Sgiacomo.travaglini@arm.com
38513481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT1 where the
38613481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
38713481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnBuiltInTypeSuccess) {
38813481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT1(PredFormatFunction1,
38913481Sgiacomo.travaglini@arm.com                      ++n1_);
39013481Sgiacomo.travaglini@arm.com  finished_ = true;
39113481Sgiacomo.travaglini@arm.com}
39213481Sgiacomo.travaglini@arm.com
39313481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT1 where the
39413481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
39513481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnUserTypeSuccess) {
39613481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT1(PredFormatFunction1,
39713481Sgiacomo.travaglini@arm.com                      Bool(++n1_));
39813481Sgiacomo.travaglini@arm.com  finished_ = true;
39913481Sgiacomo.travaglini@arm.com}
40013481Sgiacomo.travaglini@arm.com
40113481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT1 where the
40213481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
40313481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnBuiltInTypeSuccess) {
40413481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT1(PredFormatFunctor1(),
40513481Sgiacomo.travaglini@arm.com                      ++n1_);
40613481Sgiacomo.travaglini@arm.com  finished_ = true;
40713481Sgiacomo.travaglini@arm.com}
40813481Sgiacomo.travaglini@arm.com
40913481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT1 where the
41013481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
41113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnUserTypeSuccess) {
41213481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT1(PredFormatFunctor1(),
41313481Sgiacomo.travaglini@arm.com                      Bool(++n1_));
41413481Sgiacomo.travaglini@arm.com  finished_ = true;
41513481Sgiacomo.travaglini@arm.com}
41613481Sgiacomo.travaglini@arm.com
41713481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT1 where the
41813481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
41913481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnBuiltInTypeFailure) {
42013481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
42113481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
42213481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT1(PredFormatFunction1,
42313481Sgiacomo.travaglini@arm.com                        n1_++);
42413481Sgiacomo.travaglini@arm.com    finished_ = true;
42513481Sgiacomo.travaglini@arm.com  }, "");
42613481Sgiacomo.travaglini@arm.com}
42713481Sgiacomo.travaglini@arm.com
42813481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT1 where the
42913481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
43013481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnUserTypeFailure) {
43113481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
43213481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
43313481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT1(PredFormatFunction1,
43413481Sgiacomo.travaglini@arm.com                        Bool(n1_++));
43513481Sgiacomo.travaglini@arm.com    finished_ = true;
43613481Sgiacomo.travaglini@arm.com  }, "");
43713481Sgiacomo.travaglini@arm.com}
43813481Sgiacomo.travaglini@arm.com
43913481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT1 where the
44013481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
44113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnBuiltInTypeFailure) {
44213481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
44313481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
44413481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT1(PredFormatFunctor1(),
44513481Sgiacomo.travaglini@arm.com                        n1_++);
44613481Sgiacomo.travaglini@arm.com    finished_ = true;
44713481Sgiacomo.travaglini@arm.com  }, "");
44813481Sgiacomo.travaglini@arm.com}
44913481Sgiacomo.travaglini@arm.com
45013481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT1 where the
45113481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
45213481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnUserTypeFailure) {
45313481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
45413481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
45513481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT1(PredFormatFunctor1(),
45613481Sgiacomo.travaglini@arm.com                        Bool(n1_++));
45713481Sgiacomo.travaglini@arm.com    finished_ = true;
45813481Sgiacomo.travaglini@arm.com  }, "");
45913481Sgiacomo.travaglini@arm.com}
46013481Sgiacomo.travaglini@arm.com// Sample functions/functors for testing binary predicate assertions.
46113481Sgiacomo.travaglini@arm.com
46213481Sgiacomo.travaglini@arm.com// A binary predicate function.
46313481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2>
46413481Sgiacomo.travaglini@arm.combool PredFunction2(T1 v1, T2 v2) {
46513481Sgiacomo.travaglini@arm.com  return v1 + v2 > 0;
46613481Sgiacomo.travaglini@arm.com}
46713481Sgiacomo.travaglini@arm.com
46813481Sgiacomo.travaglini@arm.com// The following two functions are needed to circumvent a bug in
46913481Sgiacomo.travaglini@arm.com// gcc 2.95.3, which sometimes has problem with the above template
47013481Sgiacomo.travaglini@arm.com// function.
47113481Sgiacomo.travaglini@arm.combool PredFunction2Int(int v1, int v2) {
47213481Sgiacomo.travaglini@arm.com  return v1 + v2 > 0;
47313481Sgiacomo.travaglini@arm.com}
47413481Sgiacomo.travaglini@arm.combool PredFunction2Bool(Bool v1, Bool v2) {
47513481Sgiacomo.travaglini@arm.com  return v1 + v2 > 0;
47613481Sgiacomo.travaglini@arm.com}
47713481Sgiacomo.travaglini@arm.com
47813481Sgiacomo.travaglini@arm.com// A binary predicate functor.
47913481Sgiacomo.travaglini@arm.comstruct PredFunctor2 {
48013481Sgiacomo.travaglini@arm.com  template <typename T1, typename T2>
48113481Sgiacomo.travaglini@arm.com  bool operator()(const T1& v1,
48213481Sgiacomo.travaglini@arm.com                  const T2& v2) {
48313481Sgiacomo.travaglini@arm.com    return v1 + v2 > 0;
48413481Sgiacomo.travaglini@arm.com  }
48513481Sgiacomo.travaglini@arm.com};
48613481Sgiacomo.travaglini@arm.com
48713481Sgiacomo.travaglini@arm.com// A binary predicate-formatter function.
48813481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2>
48913481Sgiacomo.travaglini@arm.comtesting::AssertionResult PredFormatFunction2(const char* e1,
49013481Sgiacomo.travaglini@arm.com                                             const char* e2,
49113481Sgiacomo.travaglini@arm.com                                             const T1& v1,
49213481Sgiacomo.travaglini@arm.com                                             const T2& v2) {
49313481Sgiacomo.travaglini@arm.com  if (PredFunction2(v1, v2))
49413481Sgiacomo.travaglini@arm.com    return testing::AssertionSuccess();
49513481Sgiacomo.travaglini@arm.com
49613481Sgiacomo.travaglini@arm.com  return testing::AssertionFailure()
49713481Sgiacomo.travaglini@arm.com      << e1 << " + " << e2
49813481Sgiacomo.travaglini@arm.com      << " is expected to be positive, but evaluates to "
49913481Sgiacomo.travaglini@arm.com      << v1 + v2 << ".";
50013481Sgiacomo.travaglini@arm.com}
50113481Sgiacomo.travaglini@arm.com
50213481Sgiacomo.travaglini@arm.com// A binary predicate-formatter functor.
50313481Sgiacomo.travaglini@arm.comstruct PredFormatFunctor2 {
50413481Sgiacomo.travaglini@arm.com  template <typename T1, typename T2>
50513481Sgiacomo.travaglini@arm.com  testing::AssertionResult operator()(const char* e1,
50613481Sgiacomo.travaglini@arm.com                                      const char* e2,
50713481Sgiacomo.travaglini@arm.com                                      const T1& v1,
50813481Sgiacomo.travaglini@arm.com                                      const T2& v2) const {
50913481Sgiacomo.travaglini@arm.com    return PredFormatFunction2(e1, e2, v1, v2);
51013481Sgiacomo.travaglini@arm.com  }
51113481Sgiacomo.travaglini@arm.com};
51213481Sgiacomo.travaglini@arm.com
51313481Sgiacomo.travaglini@arm.com// Tests for {EXPECT|ASSERT}_PRED_FORMAT2.
51413481Sgiacomo.travaglini@arm.com
51513481Sgiacomo.travaglini@arm.comclass Predicate2Test : public testing::Test {
51613481Sgiacomo.travaglini@arm.com protected:
51713481Sgiacomo.travaglini@arm.com  virtual void SetUp() {
51813481Sgiacomo.travaglini@arm.com    expected_to_finish_ = true;
51913481Sgiacomo.travaglini@arm.com    finished_ = false;
52013481Sgiacomo.travaglini@arm.com    n1_ = n2_ = 0;
52113481Sgiacomo.travaglini@arm.com  }
52213481Sgiacomo.travaglini@arm.com
52313481Sgiacomo.travaglini@arm.com  virtual void TearDown() {
52413481Sgiacomo.travaglini@arm.com    // Verifies that each of the predicate's arguments was evaluated
52513481Sgiacomo.travaglini@arm.com    // exactly once.
52613481Sgiacomo.travaglini@arm.com    EXPECT_EQ(1, n1_) <<
52713481Sgiacomo.travaglini@arm.com        "The predicate assertion didn't evaluate argument 2 "
52813481Sgiacomo.travaglini@arm.com        "exactly once.";
52913481Sgiacomo.travaglini@arm.com    EXPECT_EQ(1, n2_) <<
53013481Sgiacomo.travaglini@arm.com        "The predicate assertion didn't evaluate argument 3 "
53113481Sgiacomo.travaglini@arm.com        "exactly once.";
53213481Sgiacomo.travaglini@arm.com
53313481Sgiacomo.travaglini@arm.com    // Verifies that the control flow in the test function is expected.
53413481Sgiacomo.travaglini@arm.com    if (expected_to_finish_ && !finished_) {
53513481Sgiacomo.travaglini@arm.com      FAIL() << "The predicate assertion unexpactedly aborted the test.";
53613481Sgiacomo.travaglini@arm.com    } else if (!expected_to_finish_ && finished_) {
53713481Sgiacomo.travaglini@arm.com      FAIL() << "The failed predicate assertion didn't abort the test "
53813481Sgiacomo.travaglini@arm.com                "as expected.";
53913481Sgiacomo.travaglini@arm.com    }
54013481Sgiacomo.travaglini@arm.com  }
54113481Sgiacomo.travaglini@arm.com
54213481Sgiacomo.travaglini@arm.com  // true iff the test function is expected to run to finish.
54313481Sgiacomo.travaglini@arm.com  static bool expected_to_finish_;
54413481Sgiacomo.travaglini@arm.com
54513481Sgiacomo.travaglini@arm.com  // true iff the test function did run to finish.
54613481Sgiacomo.travaglini@arm.com  static bool finished_;
54713481Sgiacomo.travaglini@arm.com
54813481Sgiacomo.travaglini@arm.com  static int n1_;
54913481Sgiacomo.travaglini@arm.com  static int n2_;
55013481Sgiacomo.travaglini@arm.com};
55113481Sgiacomo.travaglini@arm.com
55213481Sgiacomo.travaglini@arm.combool Predicate2Test::expected_to_finish_;
55313481Sgiacomo.travaglini@arm.combool Predicate2Test::finished_;
55413481Sgiacomo.travaglini@arm.comint Predicate2Test::n1_;
55513481Sgiacomo.travaglini@arm.comint Predicate2Test::n2_;
55613481Sgiacomo.travaglini@arm.com
55713481Sgiacomo.travaglini@arm.comtypedef Predicate2Test EXPECT_PRED_FORMAT2Test;
55813481Sgiacomo.travaglini@arm.comtypedef Predicate2Test ASSERT_PRED_FORMAT2Test;
55913481Sgiacomo.travaglini@arm.comtypedef Predicate2Test EXPECT_PRED2Test;
56013481Sgiacomo.travaglini@arm.comtypedef Predicate2Test ASSERT_PRED2Test;
56113481Sgiacomo.travaglini@arm.com
56213481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED2 where the
56313481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
56413481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED2Test, FunctionOnBuiltInTypeSuccess) {
56513481Sgiacomo.travaglini@arm.com  EXPECT_PRED2(PredFunction2Int,
56613481Sgiacomo.travaglini@arm.com               ++n1_,
56713481Sgiacomo.travaglini@arm.com               ++n2_);
56813481Sgiacomo.travaglini@arm.com  finished_ = true;
56913481Sgiacomo.travaglini@arm.com}
57013481Sgiacomo.travaglini@arm.com
57113481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED2 where the
57213481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
57313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED2Test, FunctionOnUserTypeSuccess) {
57413481Sgiacomo.travaglini@arm.com  EXPECT_PRED2(PredFunction2Bool,
57513481Sgiacomo.travaglini@arm.com               Bool(++n1_),
57613481Sgiacomo.travaglini@arm.com               Bool(++n2_));
57713481Sgiacomo.travaglini@arm.com  finished_ = true;
57813481Sgiacomo.travaglini@arm.com}
57913481Sgiacomo.travaglini@arm.com
58013481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED2 where the
58113481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
58213481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED2Test, FunctorOnBuiltInTypeSuccess) {
58313481Sgiacomo.travaglini@arm.com  EXPECT_PRED2(PredFunctor2(),
58413481Sgiacomo.travaglini@arm.com               ++n1_,
58513481Sgiacomo.travaglini@arm.com               ++n2_);
58613481Sgiacomo.travaglini@arm.com  finished_ = true;
58713481Sgiacomo.travaglini@arm.com}
58813481Sgiacomo.travaglini@arm.com
58913481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED2 where the
59013481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
59113481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED2Test, FunctorOnUserTypeSuccess) {
59213481Sgiacomo.travaglini@arm.com  EXPECT_PRED2(PredFunctor2(),
59313481Sgiacomo.travaglini@arm.com               Bool(++n1_),
59413481Sgiacomo.travaglini@arm.com               Bool(++n2_));
59513481Sgiacomo.travaglini@arm.com  finished_ = true;
59613481Sgiacomo.travaglini@arm.com}
59713481Sgiacomo.travaglini@arm.com
59813481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED2 where the
59913481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
60013481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED2Test, FunctionOnBuiltInTypeFailure) {
60113481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
60213481Sgiacomo.travaglini@arm.com    EXPECT_PRED2(PredFunction2Int,
60313481Sgiacomo.travaglini@arm.com                 n1_++,
60413481Sgiacomo.travaglini@arm.com                 n2_++);
60513481Sgiacomo.travaglini@arm.com    finished_ = true;
60613481Sgiacomo.travaglini@arm.com  }, "");
60713481Sgiacomo.travaglini@arm.com}
60813481Sgiacomo.travaglini@arm.com
60913481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED2 where the
61013481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
61113481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED2Test, FunctionOnUserTypeFailure) {
61213481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
61313481Sgiacomo.travaglini@arm.com    EXPECT_PRED2(PredFunction2Bool,
61413481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
61513481Sgiacomo.travaglini@arm.com                 Bool(n2_++));
61613481Sgiacomo.travaglini@arm.com    finished_ = true;
61713481Sgiacomo.travaglini@arm.com  }, "");
61813481Sgiacomo.travaglini@arm.com}
61913481Sgiacomo.travaglini@arm.com
62013481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED2 where the
62113481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
62213481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED2Test, FunctorOnBuiltInTypeFailure) {
62313481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
62413481Sgiacomo.travaglini@arm.com    EXPECT_PRED2(PredFunctor2(),
62513481Sgiacomo.travaglini@arm.com                 n1_++,
62613481Sgiacomo.travaglini@arm.com                 n2_++);
62713481Sgiacomo.travaglini@arm.com    finished_ = true;
62813481Sgiacomo.travaglini@arm.com  }, "");
62913481Sgiacomo.travaglini@arm.com}
63013481Sgiacomo.travaglini@arm.com
63113481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED2 where the
63213481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
63313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED2Test, FunctorOnUserTypeFailure) {
63413481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
63513481Sgiacomo.travaglini@arm.com    EXPECT_PRED2(PredFunctor2(),
63613481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
63713481Sgiacomo.travaglini@arm.com                 Bool(n2_++));
63813481Sgiacomo.travaglini@arm.com    finished_ = true;
63913481Sgiacomo.travaglini@arm.com  }, "");
64013481Sgiacomo.travaglini@arm.com}
64113481Sgiacomo.travaglini@arm.com
64213481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED2 where the
64313481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
64413481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED2Test, FunctionOnBuiltInTypeSuccess) {
64513481Sgiacomo.travaglini@arm.com  ASSERT_PRED2(PredFunction2Int,
64613481Sgiacomo.travaglini@arm.com               ++n1_,
64713481Sgiacomo.travaglini@arm.com               ++n2_);
64813481Sgiacomo.travaglini@arm.com  finished_ = true;
64913481Sgiacomo.travaglini@arm.com}
65013481Sgiacomo.travaglini@arm.com
65113481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED2 where the
65213481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
65313481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED2Test, FunctionOnUserTypeSuccess) {
65413481Sgiacomo.travaglini@arm.com  ASSERT_PRED2(PredFunction2Bool,
65513481Sgiacomo.travaglini@arm.com               Bool(++n1_),
65613481Sgiacomo.travaglini@arm.com               Bool(++n2_));
65713481Sgiacomo.travaglini@arm.com  finished_ = true;
65813481Sgiacomo.travaglini@arm.com}
65913481Sgiacomo.travaglini@arm.com
66013481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED2 where the
66113481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
66213481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED2Test, FunctorOnBuiltInTypeSuccess) {
66313481Sgiacomo.travaglini@arm.com  ASSERT_PRED2(PredFunctor2(),
66413481Sgiacomo.travaglini@arm.com               ++n1_,
66513481Sgiacomo.travaglini@arm.com               ++n2_);
66613481Sgiacomo.travaglini@arm.com  finished_ = true;
66713481Sgiacomo.travaglini@arm.com}
66813481Sgiacomo.travaglini@arm.com
66913481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED2 where the
67013481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
67113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED2Test, FunctorOnUserTypeSuccess) {
67213481Sgiacomo.travaglini@arm.com  ASSERT_PRED2(PredFunctor2(),
67313481Sgiacomo.travaglini@arm.com               Bool(++n1_),
67413481Sgiacomo.travaglini@arm.com               Bool(++n2_));
67513481Sgiacomo.travaglini@arm.com  finished_ = true;
67613481Sgiacomo.travaglini@arm.com}
67713481Sgiacomo.travaglini@arm.com
67813481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED2 where the
67913481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
68013481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED2Test, FunctionOnBuiltInTypeFailure) {
68113481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
68213481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
68313481Sgiacomo.travaglini@arm.com    ASSERT_PRED2(PredFunction2Int,
68413481Sgiacomo.travaglini@arm.com                 n1_++,
68513481Sgiacomo.travaglini@arm.com                 n2_++);
68613481Sgiacomo.travaglini@arm.com    finished_ = true;
68713481Sgiacomo.travaglini@arm.com  }, "");
68813481Sgiacomo.travaglini@arm.com}
68913481Sgiacomo.travaglini@arm.com
69013481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED2 where the
69113481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
69213481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED2Test, FunctionOnUserTypeFailure) {
69313481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
69413481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
69513481Sgiacomo.travaglini@arm.com    ASSERT_PRED2(PredFunction2Bool,
69613481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
69713481Sgiacomo.travaglini@arm.com                 Bool(n2_++));
69813481Sgiacomo.travaglini@arm.com    finished_ = true;
69913481Sgiacomo.travaglini@arm.com  }, "");
70013481Sgiacomo.travaglini@arm.com}
70113481Sgiacomo.travaglini@arm.com
70213481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED2 where the
70313481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
70413481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED2Test, FunctorOnBuiltInTypeFailure) {
70513481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
70613481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
70713481Sgiacomo.travaglini@arm.com    ASSERT_PRED2(PredFunctor2(),
70813481Sgiacomo.travaglini@arm.com                 n1_++,
70913481Sgiacomo.travaglini@arm.com                 n2_++);
71013481Sgiacomo.travaglini@arm.com    finished_ = true;
71113481Sgiacomo.travaglini@arm.com  }, "");
71213481Sgiacomo.travaglini@arm.com}
71313481Sgiacomo.travaglini@arm.com
71413481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED2 where the
71513481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
71613481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED2Test, FunctorOnUserTypeFailure) {
71713481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
71813481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
71913481Sgiacomo.travaglini@arm.com    ASSERT_PRED2(PredFunctor2(),
72013481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
72113481Sgiacomo.travaglini@arm.com                 Bool(n2_++));
72213481Sgiacomo.travaglini@arm.com    finished_ = true;
72313481Sgiacomo.travaglini@arm.com  }, "");
72413481Sgiacomo.travaglini@arm.com}
72513481Sgiacomo.travaglini@arm.com
72613481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT2 where the
72713481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
72813481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnBuiltInTypeSuccess) {
72913481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT2(PredFormatFunction2,
73013481Sgiacomo.travaglini@arm.com                      ++n1_,
73113481Sgiacomo.travaglini@arm.com                      ++n2_);
73213481Sgiacomo.travaglini@arm.com  finished_ = true;
73313481Sgiacomo.travaglini@arm.com}
73413481Sgiacomo.travaglini@arm.com
73513481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT2 where the
73613481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
73713481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnUserTypeSuccess) {
73813481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT2(PredFormatFunction2,
73913481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
74013481Sgiacomo.travaglini@arm.com                      Bool(++n2_));
74113481Sgiacomo.travaglini@arm.com  finished_ = true;
74213481Sgiacomo.travaglini@arm.com}
74313481Sgiacomo.travaglini@arm.com
74413481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT2 where the
74513481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
74613481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnBuiltInTypeSuccess) {
74713481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT2(PredFormatFunctor2(),
74813481Sgiacomo.travaglini@arm.com                      ++n1_,
74913481Sgiacomo.travaglini@arm.com                      ++n2_);
75013481Sgiacomo.travaglini@arm.com  finished_ = true;
75113481Sgiacomo.travaglini@arm.com}
75213481Sgiacomo.travaglini@arm.com
75313481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT2 where the
75413481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
75513481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnUserTypeSuccess) {
75613481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT2(PredFormatFunctor2(),
75713481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
75813481Sgiacomo.travaglini@arm.com                      Bool(++n2_));
75913481Sgiacomo.travaglini@arm.com  finished_ = true;
76013481Sgiacomo.travaglini@arm.com}
76113481Sgiacomo.travaglini@arm.com
76213481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT2 where the
76313481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
76413481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnBuiltInTypeFailure) {
76513481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
76613481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT2(PredFormatFunction2,
76713481Sgiacomo.travaglini@arm.com                        n1_++,
76813481Sgiacomo.travaglini@arm.com                        n2_++);
76913481Sgiacomo.travaglini@arm.com    finished_ = true;
77013481Sgiacomo.travaglini@arm.com  }, "");
77113481Sgiacomo.travaglini@arm.com}
77213481Sgiacomo.travaglini@arm.com
77313481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT2 where the
77413481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
77513481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnUserTypeFailure) {
77613481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
77713481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT2(PredFormatFunction2,
77813481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
77913481Sgiacomo.travaglini@arm.com                        Bool(n2_++));
78013481Sgiacomo.travaglini@arm.com    finished_ = true;
78113481Sgiacomo.travaglini@arm.com  }, "");
78213481Sgiacomo.travaglini@arm.com}
78313481Sgiacomo.travaglini@arm.com
78413481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT2 where the
78513481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
78613481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnBuiltInTypeFailure) {
78713481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
78813481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT2(PredFormatFunctor2(),
78913481Sgiacomo.travaglini@arm.com                        n1_++,
79013481Sgiacomo.travaglini@arm.com                        n2_++);
79113481Sgiacomo.travaglini@arm.com    finished_ = true;
79213481Sgiacomo.travaglini@arm.com  }, "");
79313481Sgiacomo.travaglini@arm.com}
79413481Sgiacomo.travaglini@arm.com
79513481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT2 where the
79613481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
79713481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnUserTypeFailure) {
79813481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
79913481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT2(PredFormatFunctor2(),
80013481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
80113481Sgiacomo.travaglini@arm.com                        Bool(n2_++));
80213481Sgiacomo.travaglini@arm.com    finished_ = true;
80313481Sgiacomo.travaglini@arm.com  }, "");
80413481Sgiacomo.travaglini@arm.com}
80513481Sgiacomo.travaglini@arm.com
80613481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT2 where the
80713481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
80813481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnBuiltInTypeSuccess) {
80913481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT2(PredFormatFunction2,
81013481Sgiacomo.travaglini@arm.com                      ++n1_,
81113481Sgiacomo.travaglini@arm.com                      ++n2_);
81213481Sgiacomo.travaglini@arm.com  finished_ = true;
81313481Sgiacomo.travaglini@arm.com}
81413481Sgiacomo.travaglini@arm.com
81513481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT2 where the
81613481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
81713481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnUserTypeSuccess) {
81813481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT2(PredFormatFunction2,
81913481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
82013481Sgiacomo.travaglini@arm.com                      Bool(++n2_));
82113481Sgiacomo.travaglini@arm.com  finished_ = true;
82213481Sgiacomo.travaglini@arm.com}
82313481Sgiacomo.travaglini@arm.com
82413481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT2 where the
82513481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
82613481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnBuiltInTypeSuccess) {
82713481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT2(PredFormatFunctor2(),
82813481Sgiacomo.travaglini@arm.com                      ++n1_,
82913481Sgiacomo.travaglini@arm.com                      ++n2_);
83013481Sgiacomo.travaglini@arm.com  finished_ = true;
83113481Sgiacomo.travaglini@arm.com}
83213481Sgiacomo.travaglini@arm.com
83313481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT2 where the
83413481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
83513481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnUserTypeSuccess) {
83613481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT2(PredFormatFunctor2(),
83713481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
83813481Sgiacomo.travaglini@arm.com                      Bool(++n2_));
83913481Sgiacomo.travaglini@arm.com  finished_ = true;
84013481Sgiacomo.travaglini@arm.com}
84113481Sgiacomo.travaglini@arm.com
84213481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT2 where the
84313481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
84413481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnBuiltInTypeFailure) {
84513481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
84613481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
84713481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT2(PredFormatFunction2,
84813481Sgiacomo.travaglini@arm.com                        n1_++,
84913481Sgiacomo.travaglini@arm.com                        n2_++);
85013481Sgiacomo.travaglini@arm.com    finished_ = true;
85113481Sgiacomo.travaglini@arm.com  }, "");
85213481Sgiacomo.travaglini@arm.com}
85313481Sgiacomo.travaglini@arm.com
85413481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT2 where the
85513481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
85613481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnUserTypeFailure) {
85713481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
85813481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
85913481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT2(PredFormatFunction2,
86013481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
86113481Sgiacomo.travaglini@arm.com                        Bool(n2_++));
86213481Sgiacomo.travaglini@arm.com    finished_ = true;
86313481Sgiacomo.travaglini@arm.com  }, "");
86413481Sgiacomo.travaglini@arm.com}
86513481Sgiacomo.travaglini@arm.com
86613481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT2 where the
86713481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
86813481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnBuiltInTypeFailure) {
86913481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
87013481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
87113481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT2(PredFormatFunctor2(),
87213481Sgiacomo.travaglini@arm.com                        n1_++,
87313481Sgiacomo.travaglini@arm.com                        n2_++);
87413481Sgiacomo.travaglini@arm.com    finished_ = true;
87513481Sgiacomo.travaglini@arm.com  }, "");
87613481Sgiacomo.travaglini@arm.com}
87713481Sgiacomo.travaglini@arm.com
87813481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT2 where the
87913481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
88013481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnUserTypeFailure) {
88113481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
88213481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
88313481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT2(PredFormatFunctor2(),
88413481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
88513481Sgiacomo.travaglini@arm.com                        Bool(n2_++));
88613481Sgiacomo.travaglini@arm.com    finished_ = true;
88713481Sgiacomo.travaglini@arm.com  }, "");
88813481Sgiacomo.travaglini@arm.com}
88913481Sgiacomo.travaglini@arm.com// Sample functions/functors for testing ternary predicate assertions.
89013481Sgiacomo.travaglini@arm.com
89113481Sgiacomo.travaglini@arm.com// A ternary predicate function.
89213481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3>
89313481Sgiacomo.travaglini@arm.combool PredFunction3(T1 v1, T2 v2, T3 v3) {
89413481Sgiacomo.travaglini@arm.com  return v1 + v2 + v3 > 0;
89513481Sgiacomo.travaglini@arm.com}
89613481Sgiacomo.travaglini@arm.com
89713481Sgiacomo.travaglini@arm.com// The following two functions are needed to circumvent a bug in
89813481Sgiacomo.travaglini@arm.com// gcc 2.95.3, which sometimes has problem with the above template
89913481Sgiacomo.travaglini@arm.com// function.
90013481Sgiacomo.travaglini@arm.combool PredFunction3Int(int v1, int v2, int v3) {
90113481Sgiacomo.travaglini@arm.com  return v1 + v2 + v3 > 0;
90213481Sgiacomo.travaglini@arm.com}
90313481Sgiacomo.travaglini@arm.combool PredFunction3Bool(Bool v1, Bool v2, Bool v3) {
90413481Sgiacomo.travaglini@arm.com  return v1 + v2 + v3 > 0;
90513481Sgiacomo.travaglini@arm.com}
90613481Sgiacomo.travaglini@arm.com
90713481Sgiacomo.travaglini@arm.com// A ternary predicate functor.
90813481Sgiacomo.travaglini@arm.comstruct PredFunctor3 {
90913481Sgiacomo.travaglini@arm.com  template <typename T1, typename T2, typename T3>
91013481Sgiacomo.travaglini@arm.com  bool operator()(const T1& v1,
91113481Sgiacomo.travaglini@arm.com                  const T2& v2,
91213481Sgiacomo.travaglini@arm.com                  const T3& v3) {
91313481Sgiacomo.travaglini@arm.com    return v1 + v2 + v3 > 0;
91413481Sgiacomo.travaglini@arm.com  }
91513481Sgiacomo.travaglini@arm.com};
91613481Sgiacomo.travaglini@arm.com
91713481Sgiacomo.travaglini@arm.com// A ternary predicate-formatter function.
91813481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3>
91913481Sgiacomo.travaglini@arm.comtesting::AssertionResult PredFormatFunction3(const char* e1,
92013481Sgiacomo.travaglini@arm.com                                             const char* e2,
92113481Sgiacomo.travaglini@arm.com                                             const char* e3,
92213481Sgiacomo.travaglini@arm.com                                             const T1& v1,
92313481Sgiacomo.travaglini@arm.com                                             const T2& v2,
92413481Sgiacomo.travaglini@arm.com                                             const T3& v3) {
92513481Sgiacomo.travaglini@arm.com  if (PredFunction3(v1, v2, v3))
92613481Sgiacomo.travaglini@arm.com    return testing::AssertionSuccess();
92713481Sgiacomo.travaglini@arm.com
92813481Sgiacomo.travaglini@arm.com  return testing::AssertionFailure()
92913481Sgiacomo.travaglini@arm.com      << e1 << " + " << e2 << " + " << e3
93013481Sgiacomo.travaglini@arm.com      << " is expected to be positive, but evaluates to "
93113481Sgiacomo.travaglini@arm.com      << v1 + v2 + v3 << ".";
93213481Sgiacomo.travaglini@arm.com}
93313481Sgiacomo.travaglini@arm.com
93413481Sgiacomo.travaglini@arm.com// A ternary predicate-formatter functor.
93513481Sgiacomo.travaglini@arm.comstruct PredFormatFunctor3 {
93613481Sgiacomo.travaglini@arm.com  template <typename T1, typename T2, typename T3>
93713481Sgiacomo.travaglini@arm.com  testing::AssertionResult operator()(const char* e1,
93813481Sgiacomo.travaglini@arm.com                                      const char* e2,
93913481Sgiacomo.travaglini@arm.com                                      const char* e3,
94013481Sgiacomo.travaglini@arm.com                                      const T1& v1,
94113481Sgiacomo.travaglini@arm.com                                      const T2& v2,
94213481Sgiacomo.travaglini@arm.com                                      const T3& v3) const {
94313481Sgiacomo.travaglini@arm.com    return PredFormatFunction3(e1, e2, e3, v1, v2, v3);
94413481Sgiacomo.travaglini@arm.com  }
94513481Sgiacomo.travaglini@arm.com};
94613481Sgiacomo.travaglini@arm.com
94713481Sgiacomo.travaglini@arm.com// Tests for {EXPECT|ASSERT}_PRED_FORMAT3.
94813481Sgiacomo.travaglini@arm.com
94913481Sgiacomo.travaglini@arm.comclass Predicate3Test : public testing::Test {
95013481Sgiacomo.travaglini@arm.com protected:
95113481Sgiacomo.travaglini@arm.com  virtual void SetUp() {
95213481Sgiacomo.travaglini@arm.com    expected_to_finish_ = true;
95313481Sgiacomo.travaglini@arm.com    finished_ = false;
95413481Sgiacomo.travaglini@arm.com    n1_ = n2_ = n3_ = 0;
95513481Sgiacomo.travaglini@arm.com  }
95613481Sgiacomo.travaglini@arm.com
95713481Sgiacomo.travaglini@arm.com  virtual void TearDown() {
95813481Sgiacomo.travaglini@arm.com    // Verifies that each of the predicate's arguments was evaluated
95913481Sgiacomo.travaglini@arm.com    // exactly once.
96013481Sgiacomo.travaglini@arm.com    EXPECT_EQ(1, n1_) <<
96113481Sgiacomo.travaglini@arm.com        "The predicate assertion didn't evaluate argument 2 "
96213481Sgiacomo.travaglini@arm.com        "exactly once.";
96313481Sgiacomo.travaglini@arm.com    EXPECT_EQ(1, n2_) <<
96413481Sgiacomo.travaglini@arm.com        "The predicate assertion didn't evaluate argument 3 "
96513481Sgiacomo.travaglini@arm.com        "exactly once.";
96613481Sgiacomo.travaglini@arm.com    EXPECT_EQ(1, n3_) <<
96713481Sgiacomo.travaglini@arm.com        "The predicate assertion didn't evaluate argument 4 "
96813481Sgiacomo.travaglini@arm.com        "exactly once.";
96913481Sgiacomo.travaglini@arm.com
97013481Sgiacomo.travaglini@arm.com    // Verifies that the control flow in the test function is expected.
97113481Sgiacomo.travaglini@arm.com    if (expected_to_finish_ && !finished_) {
97213481Sgiacomo.travaglini@arm.com      FAIL() << "The predicate assertion unexpactedly aborted the test.";
97313481Sgiacomo.travaglini@arm.com    } else if (!expected_to_finish_ && finished_) {
97413481Sgiacomo.travaglini@arm.com      FAIL() << "The failed predicate assertion didn't abort the test "
97513481Sgiacomo.travaglini@arm.com                "as expected.";
97613481Sgiacomo.travaglini@arm.com    }
97713481Sgiacomo.travaglini@arm.com  }
97813481Sgiacomo.travaglini@arm.com
97913481Sgiacomo.travaglini@arm.com  // true iff the test function is expected to run to finish.
98013481Sgiacomo.travaglini@arm.com  static bool expected_to_finish_;
98113481Sgiacomo.travaglini@arm.com
98213481Sgiacomo.travaglini@arm.com  // true iff the test function did run to finish.
98313481Sgiacomo.travaglini@arm.com  static bool finished_;
98413481Sgiacomo.travaglini@arm.com
98513481Sgiacomo.travaglini@arm.com  static int n1_;
98613481Sgiacomo.travaglini@arm.com  static int n2_;
98713481Sgiacomo.travaglini@arm.com  static int n3_;
98813481Sgiacomo.travaglini@arm.com};
98913481Sgiacomo.travaglini@arm.com
99013481Sgiacomo.travaglini@arm.combool Predicate3Test::expected_to_finish_;
99113481Sgiacomo.travaglini@arm.combool Predicate3Test::finished_;
99213481Sgiacomo.travaglini@arm.comint Predicate3Test::n1_;
99313481Sgiacomo.travaglini@arm.comint Predicate3Test::n2_;
99413481Sgiacomo.travaglini@arm.comint Predicate3Test::n3_;
99513481Sgiacomo.travaglini@arm.com
99613481Sgiacomo.travaglini@arm.comtypedef Predicate3Test EXPECT_PRED_FORMAT3Test;
99713481Sgiacomo.travaglini@arm.comtypedef Predicate3Test ASSERT_PRED_FORMAT3Test;
99813481Sgiacomo.travaglini@arm.comtypedef Predicate3Test EXPECT_PRED3Test;
99913481Sgiacomo.travaglini@arm.comtypedef Predicate3Test ASSERT_PRED3Test;
100013481Sgiacomo.travaglini@arm.com
100113481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED3 where the
100213481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
100313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED3Test, FunctionOnBuiltInTypeSuccess) {
100413481Sgiacomo.travaglini@arm.com  EXPECT_PRED3(PredFunction3Int,
100513481Sgiacomo.travaglini@arm.com               ++n1_,
100613481Sgiacomo.travaglini@arm.com               ++n2_,
100713481Sgiacomo.travaglini@arm.com               ++n3_);
100813481Sgiacomo.travaglini@arm.com  finished_ = true;
100913481Sgiacomo.travaglini@arm.com}
101013481Sgiacomo.travaglini@arm.com
101113481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED3 where the
101213481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
101313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED3Test, FunctionOnUserTypeSuccess) {
101413481Sgiacomo.travaglini@arm.com  EXPECT_PRED3(PredFunction3Bool,
101513481Sgiacomo.travaglini@arm.com               Bool(++n1_),
101613481Sgiacomo.travaglini@arm.com               Bool(++n2_),
101713481Sgiacomo.travaglini@arm.com               Bool(++n3_));
101813481Sgiacomo.travaglini@arm.com  finished_ = true;
101913481Sgiacomo.travaglini@arm.com}
102013481Sgiacomo.travaglini@arm.com
102113481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED3 where the
102213481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
102313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED3Test, FunctorOnBuiltInTypeSuccess) {
102413481Sgiacomo.travaglini@arm.com  EXPECT_PRED3(PredFunctor3(),
102513481Sgiacomo.travaglini@arm.com               ++n1_,
102613481Sgiacomo.travaglini@arm.com               ++n2_,
102713481Sgiacomo.travaglini@arm.com               ++n3_);
102813481Sgiacomo.travaglini@arm.com  finished_ = true;
102913481Sgiacomo.travaglini@arm.com}
103013481Sgiacomo.travaglini@arm.com
103113481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED3 where the
103213481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
103313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED3Test, FunctorOnUserTypeSuccess) {
103413481Sgiacomo.travaglini@arm.com  EXPECT_PRED3(PredFunctor3(),
103513481Sgiacomo.travaglini@arm.com               Bool(++n1_),
103613481Sgiacomo.travaglini@arm.com               Bool(++n2_),
103713481Sgiacomo.travaglini@arm.com               Bool(++n3_));
103813481Sgiacomo.travaglini@arm.com  finished_ = true;
103913481Sgiacomo.travaglini@arm.com}
104013481Sgiacomo.travaglini@arm.com
104113481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED3 where the
104213481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
104313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED3Test, FunctionOnBuiltInTypeFailure) {
104413481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
104513481Sgiacomo.travaglini@arm.com    EXPECT_PRED3(PredFunction3Int,
104613481Sgiacomo.travaglini@arm.com                 n1_++,
104713481Sgiacomo.travaglini@arm.com                 n2_++,
104813481Sgiacomo.travaglini@arm.com                 n3_++);
104913481Sgiacomo.travaglini@arm.com    finished_ = true;
105013481Sgiacomo.travaglini@arm.com  }, "");
105113481Sgiacomo.travaglini@arm.com}
105213481Sgiacomo.travaglini@arm.com
105313481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED3 where the
105413481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
105513481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED3Test, FunctionOnUserTypeFailure) {
105613481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
105713481Sgiacomo.travaglini@arm.com    EXPECT_PRED3(PredFunction3Bool,
105813481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
105913481Sgiacomo.travaglini@arm.com                 Bool(n2_++),
106013481Sgiacomo.travaglini@arm.com                 Bool(n3_++));
106113481Sgiacomo.travaglini@arm.com    finished_ = true;
106213481Sgiacomo.travaglini@arm.com  }, "");
106313481Sgiacomo.travaglini@arm.com}
106413481Sgiacomo.travaglini@arm.com
106513481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED3 where the
106613481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
106713481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED3Test, FunctorOnBuiltInTypeFailure) {
106813481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
106913481Sgiacomo.travaglini@arm.com    EXPECT_PRED3(PredFunctor3(),
107013481Sgiacomo.travaglini@arm.com                 n1_++,
107113481Sgiacomo.travaglini@arm.com                 n2_++,
107213481Sgiacomo.travaglini@arm.com                 n3_++);
107313481Sgiacomo.travaglini@arm.com    finished_ = true;
107413481Sgiacomo.travaglini@arm.com  }, "");
107513481Sgiacomo.travaglini@arm.com}
107613481Sgiacomo.travaglini@arm.com
107713481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED3 where the
107813481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
107913481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED3Test, FunctorOnUserTypeFailure) {
108013481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
108113481Sgiacomo.travaglini@arm.com    EXPECT_PRED3(PredFunctor3(),
108213481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
108313481Sgiacomo.travaglini@arm.com                 Bool(n2_++),
108413481Sgiacomo.travaglini@arm.com                 Bool(n3_++));
108513481Sgiacomo.travaglini@arm.com    finished_ = true;
108613481Sgiacomo.travaglini@arm.com  }, "");
108713481Sgiacomo.travaglini@arm.com}
108813481Sgiacomo.travaglini@arm.com
108913481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED3 where the
109013481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
109113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED3Test, FunctionOnBuiltInTypeSuccess) {
109213481Sgiacomo.travaglini@arm.com  ASSERT_PRED3(PredFunction3Int,
109313481Sgiacomo.travaglini@arm.com               ++n1_,
109413481Sgiacomo.travaglini@arm.com               ++n2_,
109513481Sgiacomo.travaglini@arm.com               ++n3_);
109613481Sgiacomo.travaglini@arm.com  finished_ = true;
109713481Sgiacomo.travaglini@arm.com}
109813481Sgiacomo.travaglini@arm.com
109913481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED3 where the
110013481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
110113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED3Test, FunctionOnUserTypeSuccess) {
110213481Sgiacomo.travaglini@arm.com  ASSERT_PRED3(PredFunction3Bool,
110313481Sgiacomo.travaglini@arm.com               Bool(++n1_),
110413481Sgiacomo.travaglini@arm.com               Bool(++n2_),
110513481Sgiacomo.travaglini@arm.com               Bool(++n3_));
110613481Sgiacomo.travaglini@arm.com  finished_ = true;
110713481Sgiacomo.travaglini@arm.com}
110813481Sgiacomo.travaglini@arm.com
110913481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED3 where the
111013481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
111113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED3Test, FunctorOnBuiltInTypeSuccess) {
111213481Sgiacomo.travaglini@arm.com  ASSERT_PRED3(PredFunctor3(),
111313481Sgiacomo.travaglini@arm.com               ++n1_,
111413481Sgiacomo.travaglini@arm.com               ++n2_,
111513481Sgiacomo.travaglini@arm.com               ++n3_);
111613481Sgiacomo.travaglini@arm.com  finished_ = true;
111713481Sgiacomo.travaglini@arm.com}
111813481Sgiacomo.travaglini@arm.com
111913481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED3 where the
112013481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
112113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED3Test, FunctorOnUserTypeSuccess) {
112213481Sgiacomo.travaglini@arm.com  ASSERT_PRED3(PredFunctor3(),
112313481Sgiacomo.travaglini@arm.com               Bool(++n1_),
112413481Sgiacomo.travaglini@arm.com               Bool(++n2_),
112513481Sgiacomo.travaglini@arm.com               Bool(++n3_));
112613481Sgiacomo.travaglini@arm.com  finished_ = true;
112713481Sgiacomo.travaglini@arm.com}
112813481Sgiacomo.travaglini@arm.com
112913481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED3 where the
113013481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
113113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED3Test, FunctionOnBuiltInTypeFailure) {
113213481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
113313481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
113413481Sgiacomo.travaglini@arm.com    ASSERT_PRED3(PredFunction3Int,
113513481Sgiacomo.travaglini@arm.com                 n1_++,
113613481Sgiacomo.travaglini@arm.com                 n2_++,
113713481Sgiacomo.travaglini@arm.com                 n3_++);
113813481Sgiacomo.travaglini@arm.com    finished_ = true;
113913481Sgiacomo.travaglini@arm.com  }, "");
114013481Sgiacomo.travaglini@arm.com}
114113481Sgiacomo.travaglini@arm.com
114213481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED3 where the
114313481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
114413481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED3Test, FunctionOnUserTypeFailure) {
114513481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
114613481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
114713481Sgiacomo.travaglini@arm.com    ASSERT_PRED3(PredFunction3Bool,
114813481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
114913481Sgiacomo.travaglini@arm.com                 Bool(n2_++),
115013481Sgiacomo.travaglini@arm.com                 Bool(n3_++));
115113481Sgiacomo.travaglini@arm.com    finished_ = true;
115213481Sgiacomo.travaglini@arm.com  }, "");
115313481Sgiacomo.travaglini@arm.com}
115413481Sgiacomo.travaglini@arm.com
115513481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED3 where the
115613481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
115713481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED3Test, FunctorOnBuiltInTypeFailure) {
115813481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
115913481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
116013481Sgiacomo.travaglini@arm.com    ASSERT_PRED3(PredFunctor3(),
116113481Sgiacomo.travaglini@arm.com                 n1_++,
116213481Sgiacomo.travaglini@arm.com                 n2_++,
116313481Sgiacomo.travaglini@arm.com                 n3_++);
116413481Sgiacomo.travaglini@arm.com    finished_ = true;
116513481Sgiacomo.travaglini@arm.com  }, "");
116613481Sgiacomo.travaglini@arm.com}
116713481Sgiacomo.travaglini@arm.com
116813481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED3 where the
116913481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
117013481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED3Test, FunctorOnUserTypeFailure) {
117113481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
117213481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
117313481Sgiacomo.travaglini@arm.com    ASSERT_PRED3(PredFunctor3(),
117413481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
117513481Sgiacomo.travaglini@arm.com                 Bool(n2_++),
117613481Sgiacomo.travaglini@arm.com                 Bool(n3_++));
117713481Sgiacomo.travaglini@arm.com    finished_ = true;
117813481Sgiacomo.travaglini@arm.com  }, "");
117913481Sgiacomo.travaglini@arm.com}
118013481Sgiacomo.travaglini@arm.com
118113481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT3 where the
118213481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
118313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnBuiltInTypeSuccess) {
118413481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT3(PredFormatFunction3,
118513481Sgiacomo.travaglini@arm.com                      ++n1_,
118613481Sgiacomo.travaglini@arm.com                      ++n2_,
118713481Sgiacomo.travaglini@arm.com                      ++n3_);
118813481Sgiacomo.travaglini@arm.com  finished_ = true;
118913481Sgiacomo.travaglini@arm.com}
119013481Sgiacomo.travaglini@arm.com
119113481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT3 where the
119213481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
119313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnUserTypeSuccess) {
119413481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT3(PredFormatFunction3,
119513481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
119613481Sgiacomo.travaglini@arm.com                      Bool(++n2_),
119713481Sgiacomo.travaglini@arm.com                      Bool(++n3_));
119813481Sgiacomo.travaglini@arm.com  finished_ = true;
119913481Sgiacomo.travaglini@arm.com}
120013481Sgiacomo.travaglini@arm.com
120113481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT3 where the
120213481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
120313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnBuiltInTypeSuccess) {
120413481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT3(PredFormatFunctor3(),
120513481Sgiacomo.travaglini@arm.com                      ++n1_,
120613481Sgiacomo.travaglini@arm.com                      ++n2_,
120713481Sgiacomo.travaglini@arm.com                      ++n3_);
120813481Sgiacomo.travaglini@arm.com  finished_ = true;
120913481Sgiacomo.travaglini@arm.com}
121013481Sgiacomo.travaglini@arm.com
121113481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT3 where the
121213481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
121313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnUserTypeSuccess) {
121413481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT3(PredFormatFunctor3(),
121513481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
121613481Sgiacomo.travaglini@arm.com                      Bool(++n2_),
121713481Sgiacomo.travaglini@arm.com                      Bool(++n3_));
121813481Sgiacomo.travaglini@arm.com  finished_ = true;
121913481Sgiacomo.travaglini@arm.com}
122013481Sgiacomo.travaglini@arm.com
122113481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT3 where the
122213481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
122313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnBuiltInTypeFailure) {
122413481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
122513481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT3(PredFormatFunction3,
122613481Sgiacomo.travaglini@arm.com                        n1_++,
122713481Sgiacomo.travaglini@arm.com                        n2_++,
122813481Sgiacomo.travaglini@arm.com                        n3_++);
122913481Sgiacomo.travaglini@arm.com    finished_ = true;
123013481Sgiacomo.travaglini@arm.com  }, "");
123113481Sgiacomo.travaglini@arm.com}
123213481Sgiacomo.travaglini@arm.com
123313481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT3 where the
123413481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
123513481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnUserTypeFailure) {
123613481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
123713481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT3(PredFormatFunction3,
123813481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
123913481Sgiacomo.travaglini@arm.com                        Bool(n2_++),
124013481Sgiacomo.travaglini@arm.com                        Bool(n3_++));
124113481Sgiacomo.travaglini@arm.com    finished_ = true;
124213481Sgiacomo.travaglini@arm.com  }, "");
124313481Sgiacomo.travaglini@arm.com}
124413481Sgiacomo.travaglini@arm.com
124513481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT3 where the
124613481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
124713481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnBuiltInTypeFailure) {
124813481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
124913481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT3(PredFormatFunctor3(),
125013481Sgiacomo.travaglini@arm.com                        n1_++,
125113481Sgiacomo.travaglini@arm.com                        n2_++,
125213481Sgiacomo.travaglini@arm.com                        n3_++);
125313481Sgiacomo.travaglini@arm.com    finished_ = true;
125413481Sgiacomo.travaglini@arm.com  }, "");
125513481Sgiacomo.travaglini@arm.com}
125613481Sgiacomo.travaglini@arm.com
125713481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT3 where the
125813481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
125913481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnUserTypeFailure) {
126013481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
126113481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT3(PredFormatFunctor3(),
126213481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
126313481Sgiacomo.travaglini@arm.com                        Bool(n2_++),
126413481Sgiacomo.travaglini@arm.com                        Bool(n3_++));
126513481Sgiacomo.travaglini@arm.com    finished_ = true;
126613481Sgiacomo.travaglini@arm.com  }, "");
126713481Sgiacomo.travaglini@arm.com}
126813481Sgiacomo.travaglini@arm.com
126913481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT3 where the
127013481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
127113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnBuiltInTypeSuccess) {
127213481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT3(PredFormatFunction3,
127313481Sgiacomo.travaglini@arm.com                      ++n1_,
127413481Sgiacomo.travaglini@arm.com                      ++n2_,
127513481Sgiacomo.travaglini@arm.com                      ++n3_);
127613481Sgiacomo.travaglini@arm.com  finished_ = true;
127713481Sgiacomo.travaglini@arm.com}
127813481Sgiacomo.travaglini@arm.com
127913481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT3 where the
128013481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
128113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnUserTypeSuccess) {
128213481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT3(PredFormatFunction3,
128313481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
128413481Sgiacomo.travaglini@arm.com                      Bool(++n2_),
128513481Sgiacomo.travaglini@arm.com                      Bool(++n3_));
128613481Sgiacomo.travaglini@arm.com  finished_ = true;
128713481Sgiacomo.travaglini@arm.com}
128813481Sgiacomo.travaglini@arm.com
128913481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT3 where the
129013481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
129113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnBuiltInTypeSuccess) {
129213481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT3(PredFormatFunctor3(),
129313481Sgiacomo.travaglini@arm.com                      ++n1_,
129413481Sgiacomo.travaglini@arm.com                      ++n2_,
129513481Sgiacomo.travaglini@arm.com                      ++n3_);
129613481Sgiacomo.travaglini@arm.com  finished_ = true;
129713481Sgiacomo.travaglini@arm.com}
129813481Sgiacomo.travaglini@arm.com
129913481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT3 where the
130013481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
130113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnUserTypeSuccess) {
130213481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT3(PredFormatFunctor3(),
130313481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
130413481Sgiacomo.travaglini@arm.com                      Bool(++n2_),
130513481Sgiacomo.travaglini@arm.com                      Bool(++n3_));
130613481Sgiacomo.travaglini@arm.com  finished_ = true;
130713481Sgiacomo.travaglini@arm.com}
130813481Sgiacomo.travaglini@arm.com
130913481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT3 where the
131013481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
131113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnBuiltInTypeFailure) {
131213481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
131313481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
131413481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT3(PredFormatFunction3,
131513481Sgiacomo.travaglini@arm.com                        n1_++,
131613481Sgiacomo.travaglini@arm.com                        n2_++,
131713481Sgiacomo.travaglini@arm.com                        n3_++);
131813481Sgiacomo.travaglini@arm.com    finished_ = true;
131913481Sgiacomo.travaglini@arm.com  }, "");
132013481Sgiacomo.travaglini@arm.com}
132113481Sgiacomo.travaglini@arm.com
132213481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT3 where the
132313481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
132413481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnUserTypeFailure) {
132513481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
132613481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
132713481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT3(PredFormatFunction3,
132813481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
132913481Sgiacomo.travaglini@arm.com                        Bool(n2_++),
133013481Sgiacomo.travaglini@arm.com                        Bool(n3_++));
133113481Sgiacomo.travaglini@arm.com    finished_ = true;
133213481Sgiacomo.travaglini@arm.com  }, "");
133313481Sgiacomo.travaglini@arm.com}
133413481Sgiacomo.travaglini@arm.com
133513481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT3 where the
133613481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
133713481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnBuiltInTypeFailure) {
133813481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
133913481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
134013481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT3(PredFormatFunctor3(),
134113481Sgiacomo.travaglini@arm.com                        n1_++,
134213481Sgiacomo.travaglini@arm.com                        n2_++,
134313481Sgiacomo.travaglini@arm.com                        n3_++);
134413481Sgiacomo.travaglini@arm.com    finished_ = true;
134513481Sgiacomo.travaglini@arm.com  }, "");
134613481Sgiacomo.travaglini@arm.com}
134713481Sgiacomo.travaglini@arm.com
134813481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT3 where the
134913481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
135013481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnUserTypeFailure) {
135113481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
135213481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
135313481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT3(PredFormatFunctor3(),
135413481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
135513481Sgiacomo.travaglini@arm.com                        Bool(n2_++),
135613481Sgiacomo.travaglini@arm.com                        Bool(n3_++));
135713481Sgiacomo.travaglini@arm.com    finished_ = true;
135813481Sgiacomo.travaglini@arm.com  }, "");
135913481Sgiacomo.travaglini@arm.com}
136013481Sgiacomo.travaglini@arm.com// Sample functions/functors for testing 4-ary predicate assertions.
136113481Sgiacomo.travaglini@arm.com
136213481Sgiacomo.travaglini@arm.com// A 4-ary predicate function.
136313481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4>
136413481Sgiacomo.travaglini@arm.combool PredFunction4(T1 v1, T2 v2, T3 v3, T4 v4) {
136513481Sgiacomo.travaglini@arm.com  return v1 + v2 + v3 + v4 > 0;
136613481Sgiacomo.travaglini@arm.com}
136713481Sgiacomo.travaglini@arm.com
136813481Sgiacomo.travaglini@arm.com// The following two functions are needed to circumvent a bug in
136913481Sgiacomo.travaglini@arm.com// gcc 2.95.3, which sometimes has problem with the above template
137013481Sgiacomo.travaglini@arm.com// function.
137113481Sgiacomo.travaglini@arm.combool PredFunction4Int(int v1, int v2, int v3, int v4) {
137213481Sgiacomo.travaglini@arm.com  return v1 + v2 + v3 + v4 > 0;
137313481Sgiacomo.travaglini@arm.com}
137413481Sgiacomo.travaglini@arm.combool PredFunction4Bool(Bool v1, Bool v2, Bool v3, Bool v4) {
137513481Sgiacomo.travaglini@arm.com  return v1 + v2 + v3 + v4 > 0;
137613481Sgiacomo.travaglini@arm.com}
137713481Sgiacomo.travaglini@arm.com
137813481Sgiacomo.travaglini@arm.com// A 4-ary predicate functor.
137913481Sgiacomo.travaglini@arm.comstruct PredFunctor4 {
138013481Sgiacomo.travaglini@arm.com  template <typename T1, typename T2, typename T3, typename T4>
138113481Sgiacomo.travaglini@arm.com  bool operator()(const T1& v1,
138213481Sgiacomo.travaglini@arm.com                  const T2& v2,
138313481Sgiacomo.travaglini@arm.com                  const T3& v3,
138413481Sgiacomo.travaglini@arm.com                  const T4& v4) {
138513481Sgiacomo.travaglini@arm.com    return v1 + v2 + v3 + v4 > 0;
138613481Sgiacomo.travaglini@arm.com  }
138713481Sgiacomo.travaglini@arm.com};
138813481Sgiacomo.travaglini@arm.com
138913481Sgiacomo.travaglini@arm.com// A 4-ary predicate-formatter function.
139013481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4>
139113481Sgiacomo.travaglini@arm.comtesting::AssertionResult PredFormatFunction4(const char* e1,
139213481Sgiacomo.travaglini@arm.com                                             const char* e2,
139313481Sgiacomo.travaglini@arm.com                                             const char* e3,
139413481Sgiacomo.travaglini@arm.com                                             const char* e4,
139513481Sgiacomo.travaglini@arm.com                                             const T1& v1,
139613481Sgiacomo.travaglini@arm.com                                             const T2& v2,
139713481Sgiacomo.travaglini@arm.com                                             const T3& v3,
139813481Sgiacomo.travaglini@arm.com                                             const T4& v4) {
139913481Sgiacomo.travaglini@arm.com  if (PredFunction4(v1, v2, v3, v4))
140013481Sgiacomo.travaglini@arm.com    return testing::AssertionSuccess();
140113481Sgiacomo.travaglini@arm.com
140213481Sgiacomo.travaglini@arm.com  return testing::AssertionFailure()
140313481Sgiacomo.travaglini@arm.com      << e1 << " + " << e2 << " + " << e3 << " + " << e4
140413481Sgiacomo.travaglini@arm.com      << " is expected to be positive, but evaluates to "
140513481Sgiacomo.travaglini@arm.com      << v1 + v2 + v3 + v4 << ".";
140613481Sgiacomo.travaglini@arm.com}
140713481Sgiacomo.travaglini@arm.com
140813481Sgiacomo.travaglini@arm.com// A 4-ary predicate-formatter functor.
140913481Sgiacomo.travaglini@arm.comstruct PredFormatFunctor4 {
141013481Sgiacomo.travaglini@arm.com  template <typename T1, typename T2, typename T3, typename T4>
141113481Sgiacomo.travaglini@arm.com  testing::AssertionResult operator()(const char* e1,
141213481Sgiacomo.travaglini@arm.com                                      const char* e2,
141313481Sgiacomo.travaglini@arm.com                                      const char* e3,
141413481Sgiacomo.travaglini@arm.com                                      const char* e4,
141513481Sgiacomo.travaglini@arm.com                                      const T1& v1,
141613481Sgiacomo.travaglini@arm.com                                      const T2& v2,
141713481Sgiacomo.travaglini@arm.com                                      const T3& v3,
141813481Sgiacomo.travaglini@arm.com                                      const T4& v4) const {
141913481Sgiacomo.travaglini@arm.com    return PredFormatFunction4(e1, e2, e3, e4, v1, v2, v3, v4);
142013481Sgiacomo.travaglini@arm.com  }
142113481Sgiacomo.travaglini@arm.com};
142213481Sgiacomo.travaglini@arm.com
142313481Sgiacomo.travaglini@arm.com// Tests for {EXPECT|ASSERT}_PRED_FORMAT4.
142413481Sgiacomo.travaglini@arm.com
142513481Sgiacomo.travaglini@arm.comclass Predicate4Test : public testing::Test {
142613481Sgiacomo.travaglini@arm.com protected:
142713481Sgiacomo.travaglini@arm.com  virtual void SetUp() {
142813481Sgiacomo.travaglini@arm.com    expected_to_finish_ = true;
142913481Sgiacomo.travaglini@arm.com    finished_ = false;
143013481Sgiacomo.travaglini@arm.com    n1_ = n2_ = n3_ = n4_ = 0;
143113481Sgiacomo.travaglini@arm.com  }
143213481Sgiacomo.travaglini@arm.com
143313481Sgiacomo.travaglini@arm.com  virtual void TearDown() {
143413481Sgiacomo.travaglini@arm.com    // Verifies that each of the predicate's arguments was evaluated
143513481Sgiacomo.travaglini@arm.com    // exactly once.
143613481Sgiacomo.travaglini@arm.com    EXPECT_EQ(1, n1_) <<
143713481Sgiacomo.travaglini@arm.com        "The predicate assertion didn't evaluate argument 2 "
143813481Sgiacomo.travaglini@arm.com        "exactly once.";
143913481Sgiacomo.travaglini@arm.com    EXPECT_EQ(1, n2_) <<
144013481Sgiacomo.travaglini@arm.com        "The predicate assertion didn't evaluate argument 3 "
144113481Sgiacomo.travaglini@arm.com        "exactly once.";
144213481Sgiacomo.travaglini@arm.com    EXPECT_EQ(1, n3_) <<
144313481Sgiacomo.travaglini@arm.com        "The predicate assertion didn't evaluate argument 4 "
144413481Sgiacomo.travaglini@arm.com        "exactly once.";
144513481Sgiacomo.travaglini@arm.com    EXPECT_EQ(1, n4_) <<
144613481Sgiacomo.travaglini@arm.com        "The predicate assertion didn't evaluate argument 5 "
144713481Sgiacomo.travaglini@arm.com        "exactly once.";
144813481Sgiacomo.travaglini@arm.com
144913481Sgiacomo.travaglini@arm.com    // Verifies that the control flow in the test function is expected.
145013481Sgiacomo.travaglini@arm.com    if (expected_to_finish_ && !finished_) {
145113481Sgiacomo.travaglini@arm.com      FAIL() << "The predicate assertion unexpactedly aborted the test.";
145213481Sgiacomo.travaglini@arm.com    } else if (!expected_to_finish_ && finished_) {
145313481Sgiacomo.travaglini@arm.com      FAIL() << "The failed predicate assertion didn't abort the test "
145413481Sgiacomo.travaglini@arm.com                "as expected.";
145513481Sgiacomo.travaglini@arm.com    }
145613481Sgiacomo.travaglini@arm.com  }
145713481Sgiacomo.travaglini@arm.com
145813481Sgiacomo.travaglini@arm.com  // true iff the test function is expected to run to finish.
145913481Sgiacomo.travaglini@arm.com  static bool expected_to_finish_;
146013481Sgiacomo.travaglini@arm.com
146113481Sgiacomo.travaglini@arm.com  // true iff the test function did run to finish.
146213481Sgiacomo.travaglini@arm.com  static bool finished_;
146313481Sgiacomo.travaglini@arm.com
146413481Sgiacomo.travaglini@arm.com  static int n1_;
146513481Sgiacomo.travaglini@arm.com  static int n2_;
146613481Sgiacomo.travaglini@arm.com  static int n3_;
146713481Sgiacomo.travaglini@arm.com  static int n4_;
146813481Sgiacomo.travaglini@arm.com};
146913481Sgiacomo.travaglini@arm.com
147013481Sgiacomo.travaglini@arm.combool Predicate4Test::expected_to_finish_;
147113481Sgiacomo.travaglini@arm.combool Predicate4Test::finished_;
147213481Sgiacomo.travaglini@arm.comint Predicate4Test::n1_;
147313481Sgiacomo.travaglini@arm.comint Predicate4Test::n2_;
147413481Sgiacomo.travaglini@arm.comint Predicate4Test::n3_;
147513481Sgiacomo.travaglini@arm.comint Predicate4Test::n4_;
147613481Sgiacomo.travaglini@arm.com
147713481Sgiacomo.travaglini@arm.comtypedef Predicate4Test EXPECT_PRED_FORMAT4Test;
147813481Sgiacomo.travaglini@arm.comtypedef Predicate4Test ASSERT_PRED_FORMAT4Test;
147913481Sgiacomo.travaglini@arm.comtypedef Predicate4Test EXPECT_PRED4Test;
148013481Sgiacomo.travaglini@arm.comtypedef Predicate4Test ASSERT_PRED4Test;
148113481Sgiacomo.travaglini@arm.com
148213481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED4 where the
148313481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
148413481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED4Test, FunctionOnBuiltInTypeSuccess) {
148513481Sgiacomo.travaglini@arm.com  EXPECT_PRED4(PredFunction4Int,
148613481Sgiacomo.travaglini@arm.com               ++n1_,
148713481Sgiacomo.travaglini@arm.com               ++n2_,
148813481Sgiacomo.travaglini@arm.com               ++n3_,
148913481Sgiacomo.travaglini@arm.com               ++n4_);
149013481Sgiacomo.travaglini@arm.com  finished_ = true;
149113481Sgiacomo.travaglini@arm.com}
149213481Sgiacomo.travaglini@arm.com
149313481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED4 where the
149413481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
149513481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED4Test, FunctionOnUserTypeSuccess) {
149613481Sgiacomo.travaglini@arm.com  EXPECT_PRED4(PredFunction4Bool,
149713481Sgiacomo.travaglini@arm.com               Bool(++n1_),
149813481Sgiacomo.travaglini@arm.com               Bool(++n2_),
149913481Sgiacomo.travaglini@arm.com               Bool(++n3_),
150013481Sgiacomo.travaglini@arm.com               Bool(++n4_));
150113481Sgiacomo.travaglini@arm.com  finished_ = true;
150213481Sgiacomo.travaglini@arm.com}
150313481Sgiacomo.travaglini@arm.com
150413481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED4 where the
150513481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
150613481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED4Test, FunctorOnBuiltInTypeSuccess) {
150713481Sgiacomo.travaglini@arm.com  EXPECT_PRED4(PredFunctor4(),
150813481Sgiacomo.travaglini@arm.com               ++n1_,
150913481Sgiacomo.travaglini@arm.com               ++n2_,
151013481Sgiacomo.travaglini@arm.com               ++n3_,
151113481Sgiacomo.travaglini@arm.com               ++n4_);
151213481Sgiacomo.travaglini@arm.com  finished_ = true;
151313481Sgiacomo.travaglini@arm.com}
151413481Sgiacomo.travaglini@arm.com
151513481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED4 where the
151613481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
151713481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED4Test, FunctorOnUserTypeSuccess) {
151813481Sgiacomo.travaglini@arm.com  EXPECT_PRED4(PredFunctor4(),
151913481Sgiacomo.travaglini@arm.com               Bool(++n1_),
152013481Sgiacomo.travaglini@arm.com               Bool(++n2_),
152113481Sgiacomo.travaglini@arm.com               Bool(++n3_),
152213481Sgiacomo.travaglini@arm.com               Bool(++n4_));
152313481Sgiacomo.travaglini@arm.com  finished_ = true;
152413481Sgiacomo.travaglini@arm.com}
152513481Sgiacomo.travaglini@arm.com
152613481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED4 where the
152713481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
152813481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED4Test, FunctionOnBuiltInTypeFailure) {
152913481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
153013481Sgiacomo.travaglini@arm.com    EXPECT_PRED4(PredFunction4Int,
153113481Sgiacomo.travaglini@arm.com                 n1_++,
153213481Sgiacomo.travaglini@arm.com                 n2_++,
153313481Sgiacomo.travaglini@arm.com                 n3_++,
153413481Sgiacomo.travaglini@arm.com                 n4_++);
153513481Sgiacomo.travaglini@arm.com    finished_ = true;
153613481Sgiacomo.travaglini@arm.com  }, "");
153713481Sgiacomo.travaglini@arm.com}
153813481Sgiacomo.travaglini@arm.com
153913481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED4 where the
154013481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
154113481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED4Test, FunctionOnUserTypeFailure) {
154213481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
154313481Sgiacomo.travaglini@arm.com    EXPECT_PRED4(PredFunction4Bool,
154413481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
154513481Sgiacomo.travaglini@arm.com                 Bool(n2_++),
154613481Sgiacomo.travaglini@arm.com                 Bool(n3_++),
154713481Sgiacomo.travaglini@arm.com                 Bool(n4_++));
154813481Sgiacomo.travaglini@arm.com    finished_ = true;
154913481Sgiacomo.travaglini@arm.com  }, "");
155013481Sgiacomo.travaglini@arm.com}
155113481Sgiacomo.travaglini@arm.com
155213481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED4 where the
155313481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
155413481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED4Test, FunctorOnBuiltInTypeFailure) {
155513481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
155613481Sgiacomo.travaglini@arm.com    EXPECT_PRED4(PredFunctor4(),
155713481Sgiacomo.travaglini@arm.com                 n1_++,
155813481Sgiacomo.travaglini@arm.com                 n2_++,
155913481Sgiacomo.travaglini@arm.com                 n3_++,
156013481Sgiacomo.travaglini@arm.com                 n4_++);
156113481Sgiacomo.travaglini@arm.com    finished_ = true;
156213481Sgiacomo.travaglini@arm.com  }, "");
156313481Sgiacomo.travaglini@arm.com}
156413481Sgiacomo.travaglini@arm.com
156513481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED4 where the
156613481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
156713481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED4Test, FunctorOnUserTypeFailure) {
156813481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
156913481Sgiacomo.travaglini@arm.com    EXPECT_PRED4(PredFunctor4(),
157013481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
157113481Sgiacomo.travaglini@arm.com                 Bool(n2_++),
157213481Sgiacomo.travaglini@arm.com                 Bool(n3_++),
157313481Sgiacomo.travaglini@arm.com                 Bool(n4_++));
157413481Sgiacomo.travaglini@arm.com    finished_ = true;
157513481Sgiacomo.travaglini@arm.com  }, "");
157613481Sgiacomo.travaglini@arm.com}
157713481Sgiacomo.travaglini@arm.com
157813481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED4 where the
157913481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
158013481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED4Test, FunctionOnBuiltInTypeSuccess) {
158113481Sgiacomo.travaglini@arm.com  ASSERT_PRED4(PredFunction4Int,
158213481Sgiacomo.travaglini@arm.com               ++n1_,
158313481Sgiacomo.travaglini@arm.com               ++n2_,
158413481Sgiacomo.travaglini@arm.com               ++n3_,
158513481Sgiacomo.travaglini@arm.com               ++n4_);
158613481Sgiacomo.travaglini@arm.com  finished_ = true;
158713481Sgiacomo.travaglini@arm.com}
158813481Sgiacomo.travaglini@arm.com
158913481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED4 where the
159013481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
159113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED4Test, FunctionOnUserTypeSuccess) {
159213481Sgiacomo.travaglini@arm.com  ASSERT_PRED4(PredFunction4Bool,
159313481Sgiacomo.travaglini@arm.com               Bool(++n1_),
159413481Sgiacomo.travaglini@arm.com               Bool(++n2_),
159513481Sgiacomo.travaglini@arm.com               Bool(++n3_),
159613481Sgiacomo.travaglini@arm.com               Bool(++n4_));
159713481Sgiacomo.travaglini@arm.com  finished_ = true;
159813481Sgiacomo.travaglini@arm.com}
159913481Sgiacomo.travaglini@arm.com
160013481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED4 where the
160113481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
160213481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED4Test, FunctorOnBuiltInTypeSuccess) {
160313481Sgiacomo.travaglini@arm.com  ASSERT_PRED4(PredFunctor4(),
160413481Sgiacomo.travaglini@arm.com               ++n1_,
160513481Sgiacomo.travaglini@arm.com               ++n2_,
160613481Sgiacomo.travaglini@arm.com               ++n3_,
160713481Sgiacomo.travaglini@arm.com               ++n4_);
160813481Sgiacomo.travaglini@arm.com  finished_ = true;
160913481Sgiacomo.travaglini@arm.com}
161013481Sgiacomo.travaglini@arm.com
161113481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED4 where the
161213481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
161313481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED4Test, FunctorOnUserTypeSuccess) {
161413481Sgiacomo.travaglini@arm.com  ASSERT_PRED4(PredFunctor4(),
161513481Sgiacomo.travaglini@arm.com               Bool(++n1_),
161613481Sgiacomo.travaglini@arm.com               Bool(++n2_),
161713481Sgiacomo.travaglini@arm.com               Bool(++n3_),
161813481Sgiacomo.travaglini@arm.com               Bool(++n4_));
161913481Sgiacomo.travaglini@arm.com  finished_ = true;
162013481Sgiacomo.travaglini@arm.com}
162113481Sgiacomo.travaglini@arm.com
162213481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED4 where the
162313481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
162413481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED4Test, FunctionOnBuiltInTypeFailure) {
162513481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
162613481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
162713481Sgiacomo.travaglini@arm.com    ASSERT_PRED4(PredFunction4Int,
162813481Sgiacomo.travaglini@arm.com                 n1_++,
162913481Sgiacomo.travaglini@arm.com                 n2_++,
163013481Sgiacomo.travaglini@arm.com                 n3_++,
163113481Sgiacomo.travaglini@arm.com                 n4_++);
163213481Sgiacomo.travaglini@arm.com    finished_ = true;
163313481Sgiacomo.travaglini@arm.com  }, "");
163413481Sgiacomo.travaglini@arm.com}
163513481Sgiacomo.travaglini@arm.com
163613481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED4 where the
163713481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
163813481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED4Test, FunctionOnUserTypeFailure) {
163913481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
164013481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
164113481Sgiacomo.travaglini@arm.com    ASSERT_PRED4(PredFunction4Bool,
164213481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
164313481Sgiacomo.travaglini@arm.com                 Bool(n2_++),
164413481Sgiacomo.travaglini@arm.com                 Bool(n3_++),
164513481Sgiacomo.travaglini@arm.com                 Bool(n4_++));
164613481Sgiacomo.travaglini@arm.com    finished_ = true;
164713481Sgiacomo.travaglini@arm.com  }, "");
164813481Sgiacomo.travaglini@arm.com}
164913481Sgiacomo.travaglini@arm.com
165013481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED4 where the
165113481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
165213481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED4Test, FunctorOnBuiltInTypeFailure) {
165313481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
165413481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
165513481Sgiacomo.travaglini@arm.com    ASSERT_PRED4(PredFunctor4(),
165613481Sgiacomo.travaglini@arm.com                 n1_++,
165713481Sgiacomo.travaglini@arm.com                 n2_++,
165813481Sgiacomo.travaglini@arm.com                 n3_++,
165913481Sgiacomo.travaglini@arm.com                 n4_++);
166013481Sgiacomo.travaglini@arm.com    finished_ = true;
166113481Sgiacomo.travaglini@arm.com  }, "");
166213481Sgiacomo.travaglini@arm.com}
166313481Sgiacomo.travaglini@arm.com
166413481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED4 where the
166513481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
166613481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED4Test, FunctorOnUserTypeFailure) {
166713481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
166813481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
166913481Sgiacomo.travaglini@arm.com    ASSERT_PRED4(PredFunctor4(),
167013481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
167113481Sgiacomo.travaglini@arm.com                 Bool(n2_++),
167213481Sgiacomo.travaglini@arm.com                 Bool(n3_++),
167313481Sgiacomo.travaglini@arm.com                 Bool(n4_++));
167413481Sgiacomo.travaglini@arm.com    finished_ = true;
167513481Sgiacomo.travaglini@arm.com  }, "");
167613481Sgiacomo.travaglini@arm.com}
167713481Sgiacomo.travaglini@arm.com
167813481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT4 where the
167913481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
168013481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnBuiltInTypeSuccess) {
168113481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT4(PredFormatFunction4,
168213481Sgiacomo.travaglini@arm.com                      ++n1_,
168313481Sgiacomo.travaglini@arm.com                      ++n2_,
168413481Sgiacomo.travaglini@arm.com                      ++n3_,
168513481Sgiacomo.travaglini@arm.com                      ++n4_);
168613481Sgiacomo.travaglini@arm.com  finished_ = true;
168713481Sgiacomo.travaglini@arm.com}
168813481Sgiacomo.travaglini@arm.com
168913481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT4 where the
169013481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
169113481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnUserTypeSuccess) {
169213481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT4(PredFormatFunction4,
169313481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
169413481Sgiacomo.travaglini@arm.com                      Bool(++n2_),
169513481Sgiacomo.travaglini@arm.com                      Bool(++n3_),
169613481Sgiacomo.travaglini@arm.com                      Bool(++n4_));
169713481Sgiacomo.travaglini@arm.com  finished_ = true;
169813481Sgiacomo.travaglini@arm.com}
169913481Sgiacomo.travaglini@arm.com
170013481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT4 where the
170113481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
170213481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnBuiltInTypeSuccess) {
170313481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT4(PredFormatFunctor4(),
170413481Sgiacomo.travaglini@arm.com                      ++n1_,
170513481Sgiacomo.travaglini@arm.com                      ++n2_,
170613481Sgiacomo.travaglini@arm.com                      ++n3_,
170713481Sgiacomo.travaglini@arm.com                      ++n4_);
170813481Sgiacomo.travaglini@arm.com  finished_ = true;
170913481Sgiacomo.travaglini@arm.com}
171013481Sgiacomo.travaglini@arm.com
171113481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT4 where the
171213481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
171313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnUserTypeSuccess) {
171413481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT4(PredFormatFunctor4(),
171513481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
171613481Sgiacomo.travaglini@arm.com                      Bool(++n2_),
171713481Sgiacomo.travaglini@arm.com                      Bool(++n3_),
171813481Sgiacomo.travaglini@arm.com                      Bool(++n4_));
171913481Sgiacomo.travaglini@arm.com  finished_ = true;
172013481Sgiacomo.travaglini@arm.com}
172113481Sgiacomo.travaglini@arm.com
172213481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT4 where the
172313481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
172413481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnBuiltInTypeFailure) {
172513481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
172613481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT4(PredFormatFunction4,
172713481Sgiacomo.travaglini@arm.com                        n1_++,
172813481Sgiacomo.travaglini@arm.com                        n2_++,
172913481Sgiacomo.travaglini@arm.com                        n3_++,
173013481Sgiacomo.travaglini@arm.com                        n4_++);
173113481Sgiacomo.travaglini@arm.com    finished_ = true;
173213481Sgiacomo.travaglini@arm.com  }, "");
173313481Sgiacomo.travaglini@arm.com}
173413481Sgiacomo.travaglini@arm.com
173513481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT4 where the
173613481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
173713481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnUserTypeFailure) {
173813481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
173913481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT4(PredFormatFunction4,
174013481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
174113481Sgiacomo.travaglini@arm.com                        Bool(n2_++),
174213481Sgiacomo.travaglini@arm.com                        Bool(n3_++),
174313481Sgiacomo.travaglini@arm.com                        Bool(n4_++));
174413481Sgiacomo.travaglini@arm.com    finished_ = true;
174513481Sgiacomo.travaglini@arm.com  }, "");
174613481Sgiacomo.travaglini@arm.com}
174713481Sgiacomo.travaglini@arm.com
174813481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT4 where the
174913481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
175013481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnBuiltInTypeFailure) {
175113481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
175213481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT4(PredFormatFunctor4(),
175313481Sgiacomo.travaglini@arm.com                        n1_++,
175413481Sgiacomo.travaglini@arm.com                        n2_++,
175513481Sgiacomo.travaglini@arm.com                        n3_++,
175613481Sgiacomo.travaglini@arm.com                        n4_++);
175713481Sgiacomo.travaglini@arm.com    finished_ = true;
175813481Sgiacomo.travaglini@arm.com  }, "");
175913481Sgiacomo.travaglini@arm.com}
176013481Sgiacomo.travaglini@arm.com
176113481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT4 where the
176213481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
176313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnUserTypeFailure) {
176413481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
176513481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT4(PredFormatFunctor4(),
176613481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
176713481Sgiacomo.travaglini@arm.com                        Bool(n2_++),
176813481Sgiacomo.travaglini@arm.com                        Bool(n3_++),
176913481Sgiacomo.travaglini@arm.com                        Bool(n4_++));
177013481Sgiacomo.travaglini@arm.com    finished_ = true;
177113481Sgiacomo.travaglini@arm.com  }, "");
177213481Sgiacomo.travaglini@arm.com}
177313481Sgiacomo.travaglini@arm.com
177413481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT4 where the
177513481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
177613481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnBuiltInTypeSuccess) {
177713481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT4(PredFormatFunction4,
177813481Sgiacomo.travaglini@arm.com                      ++n1_,
177913481Sgiacomo.travaglini@arm.com                      ++n2_,
178013481Sgiacomo.travaglini@arm.com                      ++n3_,
178113481Sgiacomo.travaglini@arm.com                      ++n4_);
178213481Sgiacomo.travaglini@arm.com  finished_ = true;
178313481Sgiacomo.travaglini@arm.com}
178413481Sgiacomo.travaglini@arm.com
178513481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT4 where the
178613481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
178713481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnUserTypeSuccess) {
178813481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT4(PredFormatFunction4,
178913481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
179013481Sgiacomo.travaglini@arm.com                      Bool(++n2_),
179113481Sgiacomo.travaglini@arm.com                      Bool(++n3_),
179213481Sgiacomo.travaglini@arm.com                      Bool(++n4_));
179313481Sgiacomo.travaglini@arm.com  finished_ = true;
179413481Sgiacomo.travaglini@arm.com}
179513481Sgiacomo.travaglini@arm.com
179613481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT4 where the
179713481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
179813481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnBuiltInTypeSuccess) {
179913481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT4(PredFormatFunctor4(),
180013481Sgiacomo.travaglini@arm.com                      ++n1_,
180113481Sgiacomo.travaglini@arm.com                      ++n2_,
180213481Sgiacomo.travaglini@arm.com                      ++n3_,
180313481Sgiacomo.travaglini@arm.com                      ++n4_);
180413481Sgiacomo.travaglini@arm.com  finished_ = true;
180513481Sgiacomo.travaglini@arm.com}
180613481Sgiacomo.travaglini@arm.com
180713481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT4 where the
180813481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
180913481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnUserTypeSuccess) {
181013481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT4(PredFormatFunctor4(),
181113481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
181213481Sgiacomo.travaglini@arm.com                      Bool(++n2_),
181313481Sgiacomo.travaglini@arm.com                      Bool(++n3_),
181413481Sgiacomo.travaglini@arm.com                      Bool(++n4_));
181513481Sgiacomo.travaglini@arm.com  finished_ = true;
181613481Sgiacomo.travaglini@arm.com}
181713481Sgiacomo.travaglini@arm.com
181813481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT4 where the
181913481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
182013481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnBuiltInTypeFailure) {
182113481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
182213481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
182313481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT4(PredFormatFunction4,
182413481Sgiacomo.travaglini@arm.com                        n1_++,
182513481Sgiacomo.travaglini@arm.com                        n2_++,
182613481Sgiacomo.travaglini@arm.com                        n3_++,
182713481Sgiacomo.travaglini@arm.com                        n4_++);
182813481Sgiacomo.travaglini@arm.com    finished_ = true;
182913481Sgiacomo.travaglini@arm.com  }, "");
183013481Sgiacomo.travaglini@arm.com}
183113481Sgiacomo.travaglini@arm.com
183213481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT4 where the
183313481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
183413481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnUserTypeFailure) {
183513481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
183613481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
183713481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT4(PredFormatFunction4,
183813481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
183913481Sgiacomo.travaglini@arm.com                        Bool(n2_++),
184013481Sgiacomo.travaglini@arm.com                        Bool(n3_++),
184113481Sgiacomo.travaglini@arm.com                        Bool(n4_++));
184213481Sgiacomo.travaglini@arm.com    finished_ = true;
184313481Sgiacomo.travaglini@arm.com  }, "");
184413481Sgiacomo.travaglini@arm.com}
184513481Sgiacomo.travaglini@arm.com
184613481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT4 where the
184713481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
184813481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnBuiltInTypeFailure) {
184913481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
185013481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
185113481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT4(PredFormatFunctor4(),
185213481Sgiacomo.travaglini@arm.com                        n1_++,
185313481Sgiacomo.travaglini@arm.com                        n2_++,
185413481Sgiacomo.travaglini@arm.com                        n3_++,
185513481Sgiacomo.travaglini@arm.com                        n4_++);
185613481Sgiacomo.travaglini@arm.com    finished_ = true;
185713481Sgiacomo.travaglini@arm.com  }, "");
185813481Sgiacomo.travaglini@arm.com}
185913481Sgiacomo.travaglini@arm.com
186013481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT4 where the
186113481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
186213481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnUserTypeFailure) {
186313481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
186413481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
186513481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT4(PredFormatFunctor4(),
186613481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
186713481Sgiacomo.travaglini@arm.com                        Bool(n2_++),
186813481Sgiacomo.travaglini@arm.com                        Bool(n3_++),
186913481Sgiacomo.travaglini@arm.com                        Bool(n4_++));
187013481Sgiacomo.travaglini@arm.com    finished_ = true;
187113481Sgiacomo.travaglini@arm.com  }, "");
187213481Sgiacomo.travaglini@arm.com}
187313481Sgiacomo.travaglini@arm.com// Sample functions/functors for testing 5-ary predicate assertions.
187413481Sgiacomo.travaglini@arm.com
187513481Sgiacomo.travaglini@arm.com// A 5-ary predicate function.
187613481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4, typename T5>
187713481Sgiacomo.travaglini@arm.combool PredFunction5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) {
187813481Sgiacomo.travaglini@arm.com  return v1 + v2 + v3 + v4 + v5 > 0;
187913481Sgiacomo.travaglini@arm.com}
188013481Sgiacomo.travaglini@arm.com
188113481Sgiacomo.travaglini@arm.com// The following two functions are needed to circumvent a bug in
188213481Sgiacomo.travaglini@arm.com// gcc 2.95.3, which sometimes has problem with the above template
188313481Sgiacomo.travaglini@arm.com// function.
188413481Sgiacomo.travaglini@arm.combool PredFunction5Int(int v1, int v2, int v3, int v4, int v5) {
188513481Sgiacomo.travaglini@arm.com  return v1 + v2 + v3 + v4 + v5 > 0;
188613481Sgiacomo.travaglini@arm.com}
188713481Sgiacomo.travaglini@arm.combool PredFunction5Bool(Bool v1, Bool v2, Bool v3, Bool v4, Bool v5) {
188813481Sgiacomo.travaglini@arm.com  return v1 + v2 + v3 + v4 + v5 > 0;
188913481Sgiacomo.travaglini@arm.com}
189013481Sgiacomo.travaglini@arm.com
189113481Sgiacomo.travaglini@arm.com// A 5-ary predicate functor.
189213481Sgiacomo.travaglini@arm.comstruct PredFunctor5 {
189313481Sgiacomo.travaglini@arm.com  template <typename T1, typename T2, typename T3, typename T4, typename T5>
189413481Sgiacomo.travaglini@arm.com  bool operator()(const T1& v1,
189513481Sgiacomo.travaglini@arm.com                  const T2& v2,
189613481Sgiacomo.travaglini@arm.com                  const T3& v3,
189713481Sgiacomo.travaglini@arm.com                  const T4& v4,
189813481Sgiacomo.travaglini@arm.com                  const T5& v5) {
189913481Sgiacomo.travaglini@arm.com    return v1 + v2 + v3 + v4 + v5 > 0;
190013481Sgiacomo.travaglini@arm.com  }
190113481Sgiacomo.travaglini@arm.com};
190213481Sgiacomo.travaglini@arm.com
190313481Sgiacomo.travaglini@arm.com// A 5-ary predicate-formatter function.
190413481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4, typename T5>
190513481Sgiacomo.travaglini@arm.comtesting::AssertionResult PredFormatFunction5(const char* e1,
190613481Sgiacomo.travaglini@arm.com                                             const char* e2,
190713481Sgiacomo.travaglini@arm.com                                             const char* e3,
190813481Sgiacomo.travaglini@arm.com                                             const char* e4,
190913481Sgiacomo.travaglini@arm.com                                             const char* e5,
191013481Sgiacomo.travaglini@arm.com                                             const T1& v1,
191113481Sgiacomo.travaglini@arm.com                                             const T2& v2,
191213481Sgiacomo.travaglini@arm.com                                             const T3& v3,
191313481Sgiacomo.travaglini@arm.com                                             const T4& v4,
191413481Sgiacomo.travaglini@arm.com                                             const T5& v5) {
191513481Sgiacomo.travaglini@arm.com  if (PredFunction5(v1, v2, v3, v4, v5))
191613481Sgiacomo.travaglini@arm.com    return testing::AssertionSuccess();
191713481Sgiacomo.travaglini@arm.com
191813481Sgiacomo.travaglini@arm.com  return testing::AssertionFailure()
191913481Sgiacomo.travaglini@arm.com      << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " + " << e5
192013481Sgiacomo.travaglini@arm.com      << " is expected to be positive, but evaluates to "
192113481Sgiacomo.travaglini@arm.com      << v1 + v2 + v3 + v4 + v5 << ".";
192213481Sgiacomo.travaglini@arm.com}
192313481Sgiacomo.travaglini@arm.com
192413481Sgiacomo.travaglini@arm.com// A 5-ary predicate-formatter functor.
192513481Sgiacomo.travaglini@arm.comstruct PredFormatFunctor5 {
192613481Sgiacomo.travaglini@arm.com  template <typename T1, typename T2, typename T3, typename T4, typename T5>
192713481Sgiacomo.travaglini@arm.com  testing::AssertionResult operator()(const char* e1,
192813481Sgiacomo.travaglini@arm.com                                      const char* e2,
192913481Sgiacomo.travaglini@arm.com                                      const char* e3,
193013481Sgiacomo.travaglini@arm.com                                      const char* e4,
193113481Sgiacomo.travaglini@arm.com                                      const char* e5,
193213481Sgiacomo.travaglini@arm.com                                      const T1& v1,
193313481Sgiacomo.travaglini@arm.com                                      const T2& v2,
193413481Sgiacomo.travaglini@arm.com                                      const T3& v3,
193513481Sgiacomo.travaglini@arm.com                                      const T4& v4,
193613481Sgiacomo.travaglini@arm.com                                      const T5& v5) const {
193713481Sgiacomo.travaglini@arm.com    return PredFormatFunction5(e1, e2, e3, e4, e5, v1, v2, v3, v4, v5);
193813481Sgiacomo.travaglini@arm.com  }
193913481Sgiacomo.travaglini@arm.com};
194013481Sgiacomo.travaglini@arm.com
194113481Sgiacomo.travaglini@arm.com// Tests for {EXPECT|ASSERT}_PRED_FORMAT5.
194213481Sgiacomo.travaglini@arm.com
194313481Sgiacomo.travaglini@arm.comclass Predicate5Test : public testing::Test {
194413481Sgiacomo.travaglini@arm.com protected:
194513481Sgiacomo.travaglini@arm.com  virtual void SetUp() {
194613481Sgiacomo.travaglini@arm.com    expected_to_finish_ = true;
194713481Sgiacomo.travaglini@arm.com    finished_ = false;
194813481Sgiacomo.travaglini@arm.com    n1_ = n2_ = n3_ = n4_ = n5_ = 0;
194913481Sgiacomo.travaglini@arm.com  }
195013481Sgiacomo.travaglini@arm.com
195113481Sgiacomo.travaglini@arm.com  virtual void TearDown() {
195213481Sgiacomo.travaglini@arm.com    // Verifies that each of the predicate's arguments was evaluated
195313481Sgiacomo.travaglini@arm.com    // exactly once.
195413481Sgiacomo.travaglini@arm.com    EXPECT_EQ(1, n1_) <<
195513481Sgiacomo.travaglini@arm.com        "The predicate assertion didn't evaluate argument 2 "
195613481Sgiacomo.travaglini@arm.com        "exactly once.";
195713481Sgiacomo.travaglini@arm.com    EXPECT_EQ(1, n2_) <<
195813481Sgiacomo.travaglini@arm.com        "The predicate assertion didn't evaluate argument 3 "
195913481Sgiacomo.travaglini@arm.com        "exactly once.";
196013481Sgiacomo.travaglini@arm.com    EXPECT_EQ(1, n3_) <<
196113481Sgiacomo.travaglini@arm.com        "The predicate assertion didn't evaluate argument 4 "
196213481Sgiacomo.travaglini@arm.com        "exactly once.";
196313481Sgiacomo.travaglini@arm.com    EXPECT_EQ(1, n4_) <<
196413481Sgiacomo.travaglini@arm.com        "The predicate assertion didn't evaluate argument 5 "
196513481Sgiacomo.travaglini@arm.com        "exactly once.";
196613481Sgiacomo.travaglini@arm.com    EXPECT_EQ(1, n5_) <<
196713481Sgiacomo.travaglini@arm.com        "The predicate assertion didn't evaluate argument 6 "
196813481Sgiacomo.travaglini@arm.com        "exactly once.";
196913481Sgiacomo.travaglini@arm.com
197013481Sgiacomo.travaglini@arm.com    // Verifies that the control flow in the test function is expected.
197113481Sgiacomo.travaglini@arm.com    if (expected_to_finish_ && !finished_) {
197213481Sgiacomo.travaglini@arm.com      FAIL() << "The predicate assertion unexpactedly aborted the test.";
197313481Sgiacomo.travaglini@arm.com    } else if (!expected_to_finish_ && finished_) {
197413481Sgiacomo.travaglini@arm.com      FAIL() << "The failed predicate assertion didn't abort the test "
197513481Sgiacomo.travaglini@arm.com                "as expected.";
197613481Sgiacomo.travaglini@arm.com    }
197713481Sgiacomo.travaglini@arm.com  }
197813481Sgiacomo.travaglini@arm.com
197913481Sgiacomo.travaglini@arm.com  // true iff the test function is expected to run to finish.
198013481Sgiacomo.travaglini@arm.com  static bool expected_to_finish_;
198113481Sgiacomo.travaglini@arm.com
198213481Sgiacomo.travaglini@arm.com  // true iff the test function did run to finish.
198313481Sgiacomo.travaglini@arm.com  static bool finished_;
198413481Sgiacomo.travaglini@arm.com
198513481Sgiacomo.travaglini@arm.com  static int n1_;
198613481Sgiacomo.travaglini@arm.com  static int n2_;
198713481Sgiacomo.travaglini@arm.com  static int n3_;
198813481Sgiacomo.travaglini@arm.com  static int n4_;
198913481Sgiacomo.travaglini@arm.com  static int n5_;
199013481Sgiacomo.travaglini@arm.com};
199113481Sgiacomo.travaglini@arm.com
199213481Sgiacomo.travaglini@arm.combool Predicate5Test::expected_to_finish_;
199313481Sgiacomo.travaglini@arm.combool Predicate5Test::finished_;
199413481Sgiacomo.travaglini@arm.comint Predicate5Test::n1_;
199513481Sgiacomo.travaglini@arm.comint Predicate5Test::n2_;
199613481Sgiacomo.travaglini@arm.comint Predicate5Test::n3_;
199713481Sgiacomo.travaglini@arm.comint Predicate5Test::n4_;
199813481Sgiacomo.travaglini@arm.comint Predicate5Test::n5_;
199913481Sgiacomo.travaglini@arm.com
200013481Sgiacomo.travaglini@arm.comtypedef Predicate5Test EXPECT_PRED_FORMAT5Test;
200113481Sgiacomo.travaglini@arm.comtypedef Predicate5Test ASSERT_PRED_FORMAT5Test;
200213481Sgiacomo.travaglini@arm.comtypedef Predicate5Test EXPECT_PRED5Test;
200313481Sgiacomo.travaglini@arm.comtypedef Predicate5Test ASSERT_PRED5Test;
200413481Sgiacomo.travaglini@arm.com
200513481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED5 where the
200613481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
200713481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED5Test, FunctionOnBuiltInTypeSuccess) {
200813481Sgiacomo.travaglini@arm.com  EXPECT_PRED5(PredFunction5Int,
200913481Sgiacomo.travaglini@arm.com               ++n1_,
201013481Sgiacomo.travaglini@arm.com               ++n2_,
201113481Sgiacomo.travaglini@arm.com               ++n3_,
201213481Sgiacomo.travaglini@arm.com               ++n4_,
201313481Sgiacomo.travaglini@arm.com               ++n5_);
201413481Sgiacomo.travaglini@arm.com  finished_ = true;
201513481Sgiacomo.travaglini@arm.com}
201613481Sgiacomo.travaglini@arm.com
201713481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED5 where the
201813481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
201913481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED5Test, FunctionOnUserTypeSuccess) {
202013481Sgiacomo.travaglini@arm.com  EXPECT_PRED5(PredFunction5Bool,
202113481Sgiacomo.travaglini@arm.com               Bool(++n1_),
202213481Sgiacomo.travaglini@arm.com               Bool(++n2_),
202313481Sgiacomo.travaglini@arm.com               Bool(++n3_),
202413481Sgiacomo.travaglini@arm.com               Bool(++n4_),
202513481Sgiacomo.travaglini@arm.com               Bool(++n5_));
202613481Sgiacomo.travaglini@arm.com  finished_ = true;
202713481Sgiacomo.travaglini@arm.com}
202813481Sgiacomo.travaglini@arm.com
202913481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED5 where the
203013481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
203113481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED5Test, FunctorOnBuiltInTypeSuccess) {
203213481Sgiacomo.travaglini@arm.com  EXPECT_PRED5(PredFunctor5(),
203313481Sgiacomo.travaglini@arm.com               ++n1_,
203413481Sgiacomo.travaglini@arm.com               ++n2_,
203513481Sgiacomo.travaglini@arm.com               ++n3_,
203613481Sgiacomo.travaglini@arm.com               ++n4_,
203713481Sgiacomo.travaglini@arm.com               ++n5_);
203813481Sgiacomo.travaglini@arm.com  finished_ = true;
203913481Sgiacomo.travaglini@arm.com}
204013481Sgiacomo.travaglini@arm.com
204113481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED5 where the
204213481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
204313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED5Test, FunctorOnUserTypeSuccess) {
204413481Sgiacomo.travaglini@arm.com  EXPECT_PRED5(PredFunctor5(),
204513481Sgiacomo.travaglini@arm.com               Bool(++n1_),
204613481Sgiacomo.travaglini@arm.com               Bool(++n2_),
204713481Sgiacomo.travaglini@arm.com               Bool(++n3_),
204813481Sgiacomo.travaglini@arm.com               Bool(++n4_),
204913481Sgiacomo.travaglini@arm.com               Bool(++n5_));
205013481Sgiacomo.travaglini@arm.com  finished_ = true;
205113481Sgiacomo.travaglini@arm.com}
205213481Sgiacomo.travaglini@arm.com
205313481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED5 where the
205413481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
205513481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED5Test, FunctionOnBuiltInTypeFailure) {
205613481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
205713481Sgiacomo.travaglini@arm.com    EXPECT_PRED5(PredFunction5Int,
205813481Sgiacomo.travaglini@arm.com                 n1_++,
205913481Sgiacomo.travaglini@arm.com                 n2_++,
206013481Sgiacomo.travaglini@arm.com                 n3_++,
206113481Sgiacomo.travaglini@arm.com                 n4_++,
206213481Sgiacomo.travaglini@arm.com                 n5_++);
206313481Sgiacomo.travaglini@arm.com    finished_ = true;
206413481Sgiacomo.travaglini@arm.com  }, "");
206513481Sgiacomo.travaglini@arm.com}
206613481Sgiacomo.travaglini@arm.com
206713481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED5 where the
206813481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
206913481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED5Test, FunctionOnUserTypeFailure) {
207013481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
207113481Sgiacomo.travaglini@arm.com    EXPECT_PRED5(PredFunction5Bool,
207213481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
207313481Sgiacomo.travaglini@arm.com                 Bool(n2_++),
207413481Sgiacomo.travaglini@arm.com                 Bool(n3_++),
207513481Sgiacomo.travaglini@arm.com                 Bool(n4_++),
207613481Sgiacomo.travaglini@arm.com                 Bool(n5_++));
207713481Sgiacomo.travaglini@arm.com    finished_ = true;
207813481Sgiacomo.travaglini@arm.com  }, "");
207913481Sgiacomo.travaglini@arm.com}
208013481Sgiacomo.travaglini@arm.com
208113481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED5 where the
208213481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
208313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED5Test, FunctorOnBuiltInTypeFailure) {
208413481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
208513481Sgiacomo.travaglini@arm.com    EXPECT_PRED5(PredFunctor5(),
208613481Sgiacomo.travaglini@arm.com                 n1_++,
208713481Sgiacomo.travaglini@arm.com                 n2_++,
208813481Sgiacomo.travaglini@arm.com                 n3_++,
208913481Sgiacomo.travaglini@arm.com                 n4_++,
209013481Sgiacomo.travaglini@arm.com                 n5_++);
209113481Sgiacomo.travaglini@arm.com    finished_ = true;
209213481Sgiacomo.travaglini@arm.com  }, "");
209313481Sgiacomo.travaglini@arm.com}
209413481Sgiacomo.travaglini@arm.com
209513481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED5 where the
209613481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
209713481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED5Test, FunctorOnUserTypeFailure) {
209813481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
209913481Sgiacomo.travaglini@arm.com    EXPECT_PRED5(PredFunctor5(),
210013481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
210113481Sgiacomo.travaglini@arm.com                 Bool(n2_++),
210213481Sgiacomo.travaglini@arm.com                 Bool(n3_++),
210313481Sgiacomo.travaglini@arm.com                 Bool(n4_++),
210413481Sgiacomo.travaglini@arm.com                 Bool(n5_++));
210513481Sgiacomo.travaglini@arm.com    finished_ = true;
210613481Sgiacomo.travaglini@arm.com  }, "");
210713481Sgiacomo.travaglini@arm.com}
210813481Sgiacomo.travaglini@arm.com
210913481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED5 where the
211013481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
211113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED5Test, FunctionOnBuiltInTypeSuccess) {
211213481Sgiacomo.travaglini@arm.com  ASSERT_PRED5(PredFunction5Int,
211313481Sgiacomo.travaglini@arm.com               ++n1_,
211413481Sgiacomo.travaglini@arm.com               ++n2_,
211513481Sgiacomo.travaglini@arm.com               ++n3_,
211613481Sgiacomo.travaglini@arm.com               ++n4_,
211713481Sgiacomo.travaglini@arm.com               ++n5_);
211813481Sgiacomo.travaglini@arm.com  finished_ = true;
211913481Sgiacomo.travaglini@arm.com}
212013481Sgiacomo.travaglini@arm.com
212113481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED5 where the
212213481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
212313481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED5Test, FunctionOnUserTypeSuccess) {
212413481Sgiacomo.travaglini@arm.com  ASSERT_PRED5(PredFunction5Bool,
212513481Sgiacomo.travaglini@arm.com               Bool(++n1_),
212613481Sgiacomo.travaglini@arm.com               Bool(++n2_),
212713481Sgiacomo.travaglini@arm.com               Bool(++n3_),
212813481Sgiacomo.travaglini@arm.com               Bool(++n4_),
212913481Sgiacomo.travaglini@arm.com               Bool(++n5_));
213013481Sgiacomo.travaglini@arm.com  finished_ = true;
213113481Sgiacomo.travaglini@arm.com}
213213481Sgiacomo.travaglini@arm.com
213313481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED5 where the
213413481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
213513481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED5Test, FunctorOnBuiltInTypeSuccess) {
213613481Sgiacomo.travaglini@arm.com  ASSERT_PRED5(PredFunctor5(),
213713481Sgiacomo.travaglini@arm.com               ++n1_,
213813481Sgiacomo.travaglini@arm.com               ++n2_,
213913481Sgiacomo.travaglini@arm.com               ++n3_,
214013481Sgiacomo.travaglini@arm.com               ++n4_,
214113481Sgiacomo.travaglini@arm.com               ++n5_);
214213481Sgiacomo.travaglini@arm.com  finished_ = true;
214313481Sgiacomo.travaglini@arm.com}
214413481Sgiacomo.travaglini@arm.com
214513481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED5 where the
214613481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
214713481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED5Test, FunctorOnUserTypeSuccess) {
214813481Sgiacomo.travaglini@arm.com  ASSERT_PRED5(PredFunctor5(),
214913481Sgiacomo.travaglini@arm.com               Bool(++n1_),
215013481Sgiacomo.travaglini@arm.com               Bool(++n2_),
215113481Sgiacomo.travaglini@arm.com               Bool(++n3_),
215213481Sgiacomo.travaglini@arm.com               Bool(++n4_),
215313481Sgiacomo.travaglini@arm.com               Bool(++n5_));
215413481Sgiacomo.travaglini@arm.com  finished_ = true;
215513481Sgiacomo.travaglini@arm.com}
215613481Sgiacomo.travaglini@arm.com
215713481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED5 where the
215813481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
215913481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED5Test, FunctionOnBuiltInTypeFailure) {
216013481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
216113481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
216213481Sgiacomo.travaglini@arm.com    ASSERT_PRED5(PredFunction5Int,
216313481Sgiacomo.travaglini@arm.com                 n1_++,
216413481Sgiacomo.travaglini@arm.com                 n2_++,
216513481Sgiacomo.travaglini@arm.com                 n3_++,
216613481Sgiacomo.travaglini@arm.com                 n4_++,
216713481Sgiacomo.travaglini@arm.com                 n5_++);
216813481Sgiacomo.travaglini@arm.com    finished_ = true;
216913481Sgiacomo.travaglini@arm.com  }, "");
217013481Sgiacomo.travaglini@arm.com}
217113481Sgiacomo.travaglini@arm.com
217213481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED5 where the
217313481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
217413481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED5Test, FunctionOnUserTypeFailure) {
217513481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
217613481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
217713481Sgiacomo.travaglini@arm.com    ASSERT_PRED5(PredFunction5Bool,
217813481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
217913481Sgiacomo.travaglini@arm.com                 Bool(n2_++),
218013481Sgiacomo.travaglini@arm.com                 Bool(n3_++),
218113481Sgiacomo.travaglini@arm.com                 Bool(n4_++),
218213481Sgiacomo.travaglini@arm.com                 Bool(n5_++));
218313481Sgiacomo.travaglini@arm.com    finished_ = true;
218413481Sgiacomo.travaglini@arm.com  }, "");
218513481Sgiacomo.travaglini@arm.com}
218613481Sgiacomo.travaglini@arm.com
218713481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED5 where the
218813481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
218913481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED5Test, FunctorOnBuiltInTypeFailure) {
219013481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
219113481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
219213481Sgiacomo.travaglini@arm.com    ASSERT_PRED5(PredFunctor5(),
219313481Sgiacomo.travaglini@arm.com                 n1_++,
219413481Sgiacomo.travaglini@arm.com                 n2_++,
219513481Sgiacomo.travaglini@arm.com                 n3_++,
219613481Sgiacomo.travaglini@arm.com                 n4_++,
219713481Sgiacomo.travaglini@arm.com                 n5_++);
219813481Sgiacomo.travaglini@arm.com    finished_ = true;
219913481Sgiacomo.travaglini@arm.com  }, "");
220013481Sgiacomo.travaglini@arm.com}
220113481Sgiacomo.travaglini@arm.com
220213481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED5 where the
220313481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
220413481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED5Test, FunctorOnUserTypeFailure) {
220513481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
220613481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
220713481Sgiacomo.travaglini@arm.com    ASSERT_PRED5(PredFunctor5(),
220813481Sgiacomo.travaglini@arm.com                 Bool(n1_++),
220913481Sgiacomo.travaglini@arm.com                 Bool(n2_++),
221013481Sgiacomo.travaglini@arm.com                 Bool(n3_++),
221113481Sgiacomo.travaglini@arm.com                 Bool(n4_++),
221213481Sgiacomo.travaglini@arm.com                 Bool(n5_++));
221313481Sgiacomo.travaglini@arm.com    finished_ = true;
221413481Sgiacomo.travaglini@arm.com  }, "");
221513481Sgiacomo.travaglini@arm.com}
221613481Sgiacomo.travaglini@arm.com
221713481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT5 where the
221813481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
221913481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnBuiltInTypeSuccess) {
222013481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT5(PredFormatFunction5,
222113481Sgiacomo.travaglini@arm.com                      ++n1_,
222213481Sgiacomo.travaglini@arm.com                      ++n2_,
222313481Sgiacomo.travaglini@arm.com                      ++n3_,
222413481Sgiacomo.travaglini@arm.com                      ++n4_,
222513481Sgiacomo.travaglini@arm.com                      ++n5_);
222613481Sgiacomo.travaglini@arm.com  finished_ = true;
222713481Sgiacomo.travaglini@arm.com}
222813481Sgiacomo.travaglini@arm.com
222913481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT5 where the
223013481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
223113481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnUserTypeSuccess) {
223213481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT5(PredFormatFunction5,
223313481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
223413481Sgiacomo.travaglini@arm.com                      Bool(++n2_),
223513481Sgiacomo.travaglini@arm.com                      Bool(++n3_),
223613481Sgiacomo.travaglini@arm.com                      Bool(++n4_),
223713481Sgiacomo.travaglini@arm.com                      Bool(++n5_));
223813481Sgiacomo.travaglini@arm.com  finished_ = true;
223913481Sgiacomo.travaglini@arm.com}
224013481Sgiacomo.travaglini@arm.com
224113481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT5 where the
224213481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
224313481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnBuiltInTypeSuccess) {
224413481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT5(PredFormatFunctor5(),
224513481Sgiacomo.travaglini@arm.com                      ++n1_,
224613481Sgiacomo.travaglini@arm.com                      ++n2_,
224713481Sgiacomo.travaglini@arm.com                      ++n3_,
224813481Sgiacomo.travaglini@arm.com                      ++n4_,
224913481Sgiacomo.travaglini@arm.com                      ++n5_);
225013481Sgiacomo.travaglini@arm.com  finished_ = true;
225113481Sgiacomo.travaglini@arm.com}
225213481Sgiacomo.travaglini@arm.com
225313481Sgiacomo.travaglini@arm.com// Tests a successful EXPECT_PRED_FORMAT5 where the
225413481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
225513481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnUserTypeSuccess) {
225613481Sgiacomo.travaglini@arm.com  EXPECT_PRED_FORMAT5(PredFormatFunctor5(),
225713481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
225813481Sgiacomo.travaglini@arm.com                      Bool(++n2_),
225913481Sgiacomo.travaglini@arm.com                      Bool(++n3_),
226013481Sgiacomo.travaglini@arm.com                      Bool(++n4_),
226113481Sgiacomo.travaglini@arm.com                      Bool(++n5_));
226213481Sgiacomo.travaglini@arm.com  finished_ = true;
226313481Sgiacomo.travaglini@arm.com}
226413481Sgiacomo.travaglini@arm.com
226513481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT5 where the
226613481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
226713481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnBuiltInTypeFailure) {
226813481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
226913481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT5(PredFormatFunction5,
227013481Sgiacomo.travaglini@arm.com                        n1_++,
227113481Sgiacomo.travaglini@arm.com                        n2_++,
227213481Sgiacomo.travaglini@arm.com                        n3_++,
227313481Sgiacomo.travaglini@arm.com                        n4_++,
227413481Sgiacomo.travaglini@arm.com                        n5_++);
227513481Sgiacomo.travaglini@arm.com    finished_ = true;
227613481Sgiacomo.travaglini@arm.com  }, "");
227713481Sgiacomo.travaglini@arm.com}
227813481Sgiacomo.travaglini@arm.com
227913481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT5 where the
228013481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
228113481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnUserTypeFailure) {
228213481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
228313481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT5(PredFormatFunction5,
228413481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
228513481Sgiacomo.travaglini@arm.com                        Bool(n2_++),
228613481Sgiacomo.travaglini@arm.com                        Bool(n3_++),
228713481Sgiacomo.travaglini@arm.com                        Bool(n4_++),
228813481Sgiacomo.travaglini@arm.com                        Bool(n5_++));
228913481Sgiacomo.travaglini@arm.com    finished_ = true;
229013481Sgiacomo.travaglini@arm.com  }, "");
229113481Sgiacomo.travaglini@arm.com}
229213481Sgiacomo.travaglini@arm.com
229313481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT5 where the
229413481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
229513481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnBuiltInTypeFailure) {
229613481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
229713481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT5(PredFormatFunctor5(),
229813481Sgiacomo.travaglini@arm.com                        n1_++,
229913481Sgiacomo.travaglini@arm.com                        n2_++,
230013481Sgiacomo.travaglini@arm.com                        n3_++,
230113481Sgiacomo.travaglini@arm.com                        n4_++,
230213481Sgiacomo.travaglini@arm.com                        n5_++);
230313481Sgiacomo.travaglini@arm.com    finished_ = true;
230413481Sgiacomo.travaglini@arm.com  }, "");
230513481Sgiacomo.travaglini@arm.com}
230613481Sgiacomo.travaglini@arm.com
230713481Sgiacomo.travaglini@arm.com// Tests a failed EXPECT_PRED_FORMAT5 where the
230813481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
230913481Sgiacomo.travaglini@arm.comTEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnUserTypeFailure) {
231013481Sgiacomo.travaglini@arm.com  EXPECT_NONFATAL_FAILURE({  // NOLINT
231113481Sgiacomo.travaglini@arm.com    EXPECT_PRED_FORMAT5(PredFormatFunctor5(),
231213481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
231313481Sgiacomo.travaglini@arm.com                        Bool(n2_++),
231413481Sgiacomo.travaglini@arm.com                        Bool(n3_++),
231513481Sgiacomo.travaglini@arm.com                        Bool(n4_++),
231613481Sgiacomo.travaglini@arm.com                        Bool(n5_++));
231713481Sgiacomo.travaglini@arm.com    finished_ = true;
231813481Sgiacomo.travaglini@arm.com  }, "");
231913481Sgiacomo.travaglini@arm.com}
232013481Sgiacomo.travaglini@arm.com
232113481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT5 where the
232213481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
232313481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnBuiltInTypeSuccess) {
232413481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT5(PredFormatFunction5,
232513481Sgiacomo.travaglini@arm.com                      ++n1_,
232613481Sgiacomo.travaglini@arm.com                      ++n2_,
232713481Sgiacomo.travaglini@arm.com                      ++n3_,
232813481Sgiacomo.travaglini@arm.com                      ++n4_,
232913481Sgiacomo.travaglini@arm.com                      ++n5_);
233013481Sgiacomo.travaglini@arm.com  finished_ = true;
233113481Sgiacomo.travaglini@arm.com}
233213481Sgiacomo.travaglini@arm.com
233313481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT5 where the
233413481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
233513481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnUserTypeSuccess) {
233613481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT5(PredFormatFunction5,
233713481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
233813481Sgiacomo.travaglini@arm.com                      Bool(++n2_),
233913481Sgiacomo.travaglini@arm.com                      Bool(++n3_),
234013481Sgiacomo.travaglini@arm.com                      Bool(++n4_),
234113481Sgiacomo.travaglini@arm.com                      Bool(++n5_));
234213481Sgiacomo.travaglini@arm.com  finished_ = true;
234313481Sgiacomo.travaglini@arm.com}
234413481Sgiacomo.travaglini@arm.com
234513481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT5 where the
234613481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
234713481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnBuiltInTypeSuccess) {
234813481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT5(PredFormatFunctor5(),
234913481Sgiacomo.travaglini@arm.com                      ++n1_,
235013481Sgiacomo.travaglini@arm.com                      ++n2_,
235113481Sgiacomo.travaglini@arm.com                      ++n3_,
235213481Sgiacomo.travaglini@arm.com                      ++n4_,
235313481Sgiacomo.travaglini@arm.com                      ++n5_);
235413481Sgiacomo.travaglini@arm.com  finished_ = true;
235513481Sgiacomo.travaglini@arm.com}
235613481Sgiacomo.travaglini@arm.com
235713481Sgiacomo.travaglini@arm.com// Tests a successful ASSERT_PRED_FORMAT5 where the
235813481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
235913481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnUserTypeSuccess) {
236013481Sgiacomo.travaglini@arm.com  ASSERT_PRED_FORMAT5(PredFormatFunctor5(),
236113481Sgiacomo.travaglini@arm.com                      Bool(++n1_),
236213481Sgiacomo.travaglini@arm.com                      Bool(++n2_),
236313481Sgiacomo.travaglini@arm.com                      Bool(++n3_),
236413481Sgiacomo.travaglini@arm.com                      Bool(++n4_),
236513481Sgiacomo.travaglini@arm.com                      Bool(++n5_));
236613481Sgiacomo.travaglini@arm.com  finished_ = true;
236713481Sgiacomo.travaglini@arm.com}
236813481Sgiacomo.travaglini@arm.com
236913481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT5 where the
237013481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a built-in type (int).
237113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnBuiltInTypeFailure) {
237213481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
237313481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
237413481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT5(PredFormatFunction5,
237513481Sgiacomo.travaglini@arm.com                        n1_++,
237613481Sgiacomo.travaglini@arm.com                        n2_++,
237713481Sgiacomo.travaglini@arm.com                        n3_++,
237813481Sgiacomo.travaglini@arm.com                        n4_++,
237913481Sgiacomo.travaglini@arm.com                        n5_++);
238013481Sgiacomo.travaglini@arm.com    finished_ = true;
238113481Sgiacomo.travaglini@arm.com  }, "");
238213481Sgiacomo.travaglini@arm.com}
238313481Sgiacomo.travaglini@arm.com
238413481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT5 where the
238513481Sgiacomo.travaglini@arm.com// predicate-formatter is a function on a user-defined type (Bool).
238613481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnUserTypeFailure) {
238713481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
238813481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
238913481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT5(PredFormatFunction5,
239013481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
239113481Sgiacomo.travaglini@arm.com                        Bool(n2_++),
239213481Sgiacomo.travaglini@arm.com                        Bool(n3_++),
239313481Sgiacomo.travaglini@arm.com                        Bool(n4_++),
239413481Sgiacomo.travaglini@arm.com                        Bool(n5_++));
239513481Sgiacomo.travaglini@arm.com    finished_ = true;
239613481Sgiacomo.travaglini@arm.com  }, "");
239713481Sgiacomo.travaglini@arm.com}
239813481Sgiacomo.travaglini@arm.com
239913481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT5 where the
240013481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a built-in type (int).
240113481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnBuiltInTypeFailure) {
240213481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
240313481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
240413481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT5(PredFormatFunctor5(),
240513481Sgiacomo.travaglini@arm.com                        n1_++,
240613481Sgiacomo.travaglini@arm.com                        n2_++,
240713481Sgiacomo.travaglini@arm.com                        n3_++,
240813481Sgiacomo.travaglini@arm.com                        n4_++,
240913481Sgiacomo.travaglini@arm.com                        n5_++);
241013481Sgiacomo.travaglini@arm.com    finished_ = true;
241113481Sgiacomo.travaglini@arm.com  }, "");
241213481Sgiacomo.travaglini@arm.com}
241313481Sgiacomo.travaglini@arm.com
241413481Sgiacomo.travaglini@arm.com// Tests a failed ASSERT_PRED_FORMAT5 where the
241513481Sgiacomo.travaglini@arm.com// predicate-formatter is a functor on a user-defined type (Bool).
241613481Sgiacomo.travaglini@arm.comTEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnUserTypeFailure) {
241713481Sgiacomo.travaglini@arm.com  expected_to_finish_ = false;
241813481Sgiacomo.travaglini@arm.com  EXPECT_FATAL_FAILURE({  // NOLINT
241913481Sgiacomo.travaglini@arm.com    ASSERT_PRED_FORMAT5(PredFormatFunctor5(),
242013481Sgiacomo.travaglini@arm.com                        Bool(n1_++),
242113481Sgiacomo.travaglini@arm.com                        Bool(n2_++),
242213481Sgiacomo.travaglini@arm.com                        Bool(n3_++),
242313481Sgiacomo.travaglini@arm.com                        Bool(n4_++),
242413481Sgiacomo.travaglini@arm.com                        Bool(n5_++));
242513481Sgiacomo.travaglini@arm.com    finished_ = true;
242613481Sgiacomo.travaglini@arm.com  }, "");
242713481Sgiacomo.travaglini@arm.com}
2428