gmock-generated-matchers.h revision 13481
113481Sgiacomo.travaglini@arm.com// This file was GENERATED by command: 213481Sgiacomo.travaglini@arm.com// pump.py gmock-generated-matchers.h.pump 313481Sgiacomo.travaglini@arm.com// DO NOT EDIT BY HAND!!! 413481Sgiacomo.travaglini@arm.com 513481Sgiacomo.travaglini@arm.com// Copyright 2008, Google Inc. 613481Sgiacomo.travaglini@arm.com// All rights reserved. 713481Sgiacomo.travaglini@arm.com// 813481Sgiacomo.travaglini@arm.com// Redistribution and use in source and binary forms, with or without 913481Sgiacomo.travaglini@arm.com// modification, are permitted provided that the following conditions are 1013481Sgiacomo.travaglini@arm.com// met: 1113481Sgiacomo.travaglini@arm.com// 1213481Sgiacomo.travaglini@arm.com// * Redistributions of source code must retain the above copyright 1313481Sgiacomo.travaglini@arm.com// notice, this list of conditions and the following disclaimer. 1413481Sgiacomo.travaglini@arm.com// * Redistributions in binary form must reproduce the above 1513481Sgiacomo.travaglini@arm.com// copyright notice, this list of conditions and the following disclaimer 1613481Sgiacomo.travaglini@arm.com// in the documentation and/or other materials provided with the 1713481Sgiacomo.travaglini@arm.com// distribution. 1813481Sgiacomo.travaglini@arm.com// * Neither the name of Google Inc. nor the names of its 1913481Sgiacomo.travaglini@arm.com// contributors may be used to endorse or promote products derived from 2013481Sgiacomo.travaglini@arm.com// this software without specific prior written permission. 2113481Sgiacomo.travaglini@arm.com// 2213481Sgiacomo.travaglini@arm.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2313481Sgiacomo.travaglini@arm.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2413481Sgiacomo.travaglini@arm.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2513481Sgiacomo.travaglini@arm.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2613481Sgiacomo.travaglini@arm.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2713481Sgiacomo.travaglini@arm.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2813481Sgiacomo.travaglini@arm.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2913481Sgiacomo.travaglini@arm.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3013481Sgiacomo.travaglini@arm.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3113481Sgiacomo.travaglini@arm.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3213481Sgiacomo.travaglini@arm.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3313481Sgiacomo.travaglini@arm.com 3413481Sgiacomo.travaglini@arm.com// Google Mock - a framework for writing C++ mock classes. 3513481Sgiacomo.travaglini@arm.com// 3613481Sgiacomo.travaglini@arm.com// This file implements some commonly used variadic matchers. 3713481Sgiacomo.travaglini@arm.com 3813481Sgiacomo.travaglini@arm.com#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ 3913481Sgiacomo.travaglini@arm.com#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ 4013481Sgiacomo.travaglini@arm.com 4113481Sgiacomo.travaglini@arm.com#include <iterator> 4213481Sgiacomo.travaglini@arm.com#include <sstream> 4313481Sgiacomo.travaglini@arm.com#include <string> 4413481Sgiacomo.travaglini@arm.com#include <vector> 4513481Sgiacomo.travaglini@arm.com#include "gmock/gmock-matchers.h" 4613481Sgiacomo.travaglini@arm.com 4713481Sgiacomo.travaglini@arm.comnamespace testing { 4813481Sgiacomo.travaglini@arm.comnamespace internal { 4913481Sgiacomo.travaglini@arm.com 5013481Sgiacomo.travaglini@arm.com// The type of the i-th (0-based) field of Tuple. 5113481Sgiacomo.travaglini@arm.com#define GMOCK_FIELD_TYPE_(Tuple, i) \ 5213481Sgiacomo.travaglini@arm.com typename ::testing::tuple_element<i, Tuple>::type 5313481Sgiacomo.travaglini@arm.com 5413481Sgiacomo.travaglini@arm.com// TupleFields<Tuple, k0, ..., kn> is for selecting fields from a 5513481Sgiacomo.travaglini@arm.com// tuple of type Tuple. It has two members: 5613481Sgiacomo.travaglini@arm.com// 5713481Sgiacomo.travaglini@arm.com// type: a tuple type whose i-th field is the ki-th field of Tuple. 5813481Sgiacomo.travaglini@arm.com// GetSelectedFields(t): returns fields k0, ..., and kn of t as a tuple. 5913481Sgiacomo.travaglini@arm.com// 6013481Sgiacomo.travaglini@arm.com// For example, in class TupleFields<tuple<bool, char, int>, 2, 0>, we have: 6113481Sgiacomo.travaglini@arm.com// 6213481Sgiacomo.travaglini@arm.com// type is tuple<int, bool>, and 6313481Sgiacomo.travaglini@arm.com// GetSelectedFields(make_tuple(true, 'a', 42)) is (42, true). 6413481Sgiacomo.travaglini@arm.com 6513481Sgiacomo.travaglini@arm.comtemplate <class Tuple, int k0 = -1, int k1 = -1, int k2 = -1, int k3 = -1, 6613481Sgiacomo.travaglini@arm.com int k4 = -1, int k5 = -1, int k6 = -1, int k7 = -1, int k8 = -1, 6713481Sgiacomo.travaglini@arm.com int k9 = -1> 6813481Sgiacomo.travaglini@arm.comclass TupleFields; 6913481Sgiacomo.travaglini@arm.com 7013481Sgiacomo.travaglini@arm.com// This generic version is used when there are 10 selectors. 7113481Sgiacomo.travaglini@arm.comtemplate <class Tuple, int k0, int k1, int k2, int k3, int k4, int k5, int k6, 7213481Sgiacomo.travaglini@arm.com int k7, int k8, int k9> 7313481Sgiacomo.travaglini@arm.comclass TupleFields { 7413481Sgiacomo.travaglini@arm.com public: 7513481Sgiacomo.travaglini@arm.com typedef ::testing::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 7613481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2), 7713481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4), 7813481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k5), GMOCK_FIELD_TYPE_(Tuple, k6), 7913481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k7), GMOCK_FIELD_TYPE_(Tuple, k8), 8013481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k9)> type; 8113481Sgiacomo.travaglini@arm.com static type GetSelectedFields(const Tuple& t) { 8213481Sgiacomo.travaglini@arm.com return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t), 8313481Sgiacomo.travaglini@arm.com get<k5>(t), get<k6>(t), get<k7>(t), get<k8>(t), get<k9>(t)); 8413481Sgiacomo.travaglini@arm.com } 8513481Sgiacomo.travaglini@arm.com}; 8613481Sgiacomo.travaglini@arm.com 8713481Sgiacomo.travaglini@arm.com// The following specialization is used for 0 ~ 9 selectors. 8813481Sgiacomo.travaglini@arm.com 8913481Sgiacomo.travaglini@arm.comtemplate <class Tuple> 9013481Sgiacomo.travaglini@arm.comclass TupleFields<Tuple, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1> { 9113481Sgiacomo.travaglini@arm.com public: 9213481Sgiacomo.travaglini@arm.com typedef ::testing::tuple<> type; 9313481Sgiacomo.travaglini@arm.com static type GetSelectedFields(const Tuple& /* t */) { 9413481Sgiacomo.travaglini@arm.com return type(); 9513481Sgiacomo.travaglini@arm.com } 9613481Sgiacomo.travaglini@arm.com}; 9713481Sgiacomo.travaglini@arm.com 9813481Sgiacomo.travaglini@arm.comtemplate <class Tuple, int k0> 9913481Sgiacomo.travaglini@arm.comclass TupleFields<Tuple, k0, -1, -1, -1, -1, -1, -1, -1, -1, -1> { 10013481Sgiacomo.travaglini@arm.com public: 10113481Sgiacomo.travaglini@arm.com typedef ::testing::tuple<GMOCK_FIELD_TYPE_(Tuple, k0)> type; 10213481Sgiacomo.travaglini@arm.com static type GetSelectedFields(const Tuple& t) { 10313481Sgiacomo.travaglini@arm.com return type(get<k0>(t)); 10413481Sgiacomo.travaglini@arm.com } 10513481Sgiacomo.travaglini@arm.com}; 10613481Sgiacomo.travaglini@arm.com 10713481Sgiacomo.travaglini@arm.comtemplate <class Tuple, int k0, int k1> 10813481Sgiacomo.travaglini@arm.comclass TupleFields<Tuple, k0, k1, -1, -1, -1, -1, -1, -1, -1, -1> { 10913481Sgiacomo.travaglini@arm.com public: 11013481Sgiacomo.travaglini@arm.com typedef ::testing::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 11113481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k1)> type; 11213481Sgiacomo.travaglini@arm.com static type GetSelectedFields(const Tuple& t) { 11313481Sgiacomo.travaglini@arm.com return type(get<k0>(t), get<k1>(t)); 11413481Sgiacomo.travaglini@arm.com } 11513481Sgiacomo.travaglini@arm.com}; 11613481Sgiacomo.travaglini@arm.com 11713481Sgiacomo.travaglini@arm.comtemplate <class Tuple, int k0, int k1, int k2> 11813481Sgiacomo.travaglini@arm.comclass TupleFields<Tuple, k0, k1, k2, -1, -1, -1, -1, -1, -1, -1> { 11913481Sgiacomo.travaglini@arm.com public: 12013481Sgiacomo.travaglini@arm.com typedef ::testing::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 12113481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2)> type; 12213481Sgiacomo.travaglini@arm.com static type GetSelectedFields(const Tuple& t) { 12313481Sgiacomo.travaglini@arm.com return type(get<k0>(t), get<k1>(t), get<k2>(t)); 12413481Sgiacomo.travaglini@arm.com } 12513481Sgiacomo.travaglini@arm.com}; 12613481Sgiacomo.travaglini@arm.com 12713481Sgiacomo.travaglini@arm.comtemplate <class Tuple, int k0, int k1, int k2, int k3> 12813481Sgiacomo.travaglini@arm.comclass TupleFields<Tuple, k0, k1, k2, k3, -1, -1, -1, -1, -1, -1> { 12913481Sgiacomo.travaglini@arm.com public: 13013481Sgiacomo.travaglini@arm.com typedef ::testing::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 13113481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2), 13213481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k3)> type; 13313481Sgiacomo.travaglini@arm.com static type GetSelectedFields(const Tuple& t) { 13413481Sgiacomo.travaglini@arm.com return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t)); 13513481Sgiacomo.travaglini@arm.com } 13613481Sgiacomo.travaglini@arm.com}; 13713481Sgiacomo.travaglini@arm.com 13813481Sgiacomo.travaglini@arm.comtemplate <class Tuple, int k0, int k1, int k2, int k3, int k4> 13913481Sgiacomo.travaglini@arm.comclass TupleFields<Tuple, k0, k1, k2, k3, k4, -1, -1, -1, -1, -1> { 14013481Sgiacomo.travaglini@arm.com public: 14113481Sgiacomo.travaglini@arm.com typedef ::testing::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 14213481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2), 14313481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4)> type; 14413481Sgiacomo.travaglini@arm.com static type GetSelectedFields(const Tuple& t) { 14513481Sgiacomo.travaglini@arm.com return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t)); 14613481Sgiacomo.travaglini@arm.com } 14713481Sgiacomo.travaglini@arm.com}; 14813481Sgiacomo.travaglini@arm.com 14913481Sgiacomo.travaglini@arm.comtemplate <class Tuple, int k0, int k1, int k2, int k3, int k4, int k5> 15013481Sgiacomo.travaglini@arm.comclass TupleFields<Tuple, k0, k1, k2, k3, k4, k5, -1, -1, -1, -1> { 15113481Sgiacomo.travaglini@arm.com public: 15213481Sgiacomo.travaglini@arm.com typedef ::testing::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 15313481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2), 15413481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4), 15513481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k5)> type; 15613481Sgiacomo.travaglini@arm.com static type GetSelectedFields(const Tuple& t) { 15713481Sgiacomo.travaglini@arm.com return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t), 15813481Sgiacomo.travaglini@arm.com get<k5>(t)); 15913481Sgiacomo.travaglini@arm.com } 16013481Sgiacomo.travaglini@arm.com}; 16113481Sgiacomo.travaglini@arm.com 16213481Sgiacomo.travaglini@arm.comtemplate <class Tuple, int k0, int k1, int k2, int k3, int k4, int k5, int k6> 16313481Sgiacomo.travaglini@arm.comclass TupleFields<Tuple, k0, k1, k2, k3, k4, k5, k6, -1, -1, -1> { 16413481Sgiacomo.travaglini@arm.com public: 16513481Sgiacomo.travaglini@arm.com typedef ::testing::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 16613481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2), 16713481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4), 16813481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k5), GMOCK_FIELD_TYPE_(Tuple, k6)> type; 16913481Sgiacomo.travaglini@arm.com static type GetSelectedFields(const Tuple& t) { 17013481Sgiacomo.travaglini@arm.com return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t), 17113481Sgiacomo.travaglini@arm.com get<k5>(t), get<k6>(t)); 17213481Sgiacomo.travaglini@arm.com } 17313481Sgiacomo.travaglini@arm.com}; 17413481Sgiacomo.travaglini@arm.com 17513481Sgiacomo.travaglini@arm.comtemplate <class Tuple, int k0, int k1, int k2, int k3, int k4, int k5, int k6, 17613481Sgiacomo.travaglini@arm.com int k7> 17713481Sgiacomo.travaglini@arm.comclass TupleFields<Tuple, k0, k1, k2, k3, k4, k5, k6, k7, -1, -1> { 17813481Sgiacomo.travaglini@arm.com public: 17913481Sgiacomo.travaglini@arm.com typedef ::testing::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 18013481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2), 18113481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4), 18213481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k5), GMOCK_FIELD_TYPE_(Tuple, k6), 18313481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k7)> type; 18413481Sgiacomo.travaglini@arm.com static type GetSelectedFields(const Tuple& t) { 18513481Sgiacomo.travaglini@arm.com return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t), 18613481Sgiacomo.travaglini@arm.com get<k5>(t), get<k6>(t), get<k7>(t)); 18713481Sgiacomo.travaglini@arm.com } 18813481Sgiacomo.travaglini@arm.com}; 18913481Sgiacomo.travaglini@arm.com 19013481Sgiacomo.travaglini@arm.comtemplate <class Tuple, int k0, int k1, int k2, int k3, int k4, int k5, int k6, 19113481Sgiacomo.travaglini@arm.com int k7, int k8> 19213481Sgiacomo.travaglini@arm.comclass TupleFields<Tuple, k0, k1, k2, k3, k4, k5, k6, k7, k8, -1> { 19313481Sgiacomo.travaglini@arm.com public: 19413481Sgiacomo.travaglini@arm.com typedef ::testing::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 19513481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2), 19613481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4), 19713481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k5), GMOCK_FIELD_TYPE_(Tuple, k6), 19813481Sgiacomo.travaglini@arm.com GMOCK_FIELD_TYPE_(Tuple, k7), GMOCK_FIELD_TYPE_(Tuple, k8)> type; 19913481Sgiacomo.travaglini@arm.com static type GetSelectedFields(const Tuple& t) { 20013481Sgiacomo.travaglini@arm.com return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t), 20113481Sgiacomo.travaglini@arm.com get<k5>(t), get<k6>(t), get<k7>(t), get<k8>(t)); 20213481Sgiacomo.travaglini@arm.com } 20313481Sgiacomo.travaglini@arm.com}; 20413481Sgiacomo.travaglini@arm.com 20513481Sgiacomo.travaglini@arm.com#undef GMOCK_FIELD_TYPE_ 20613481Sgiacomo.travaglini@arm.com 20713481Sgiacomo.travaglini@arm.com// Implements the Args() matcher. 20813481Sgiacomo.travaglini@arm.comtemplate <class ArgsTuple, int k0 = -1, int k1 = -1, int k2 = -1, int k3 = -1, 20913481Sgiacomo.travaglini@arm.com int k4 = -1, int k5 = -1, int k6 = -1, int k7 = -1, int k8 = -1, 21013481Sgiacomo.travaglini@arm.com int k9 = -1> 21113481Sgiacomo.travaglini@arm.comclass ArgsMatcherImpl : public MatcherInterface<ArgsTuple> { 21213481Sgiacomo.travaglini@arm.com public: 21313481Sgiacomo.travaglini@arm.com // ArgsTuple may have top-level const or reference modifiers. 21413481Sgiacomo.travaglini@arm.com typedef GTEST_REMOVE_REFERENCE_AND_CONST_(ArgsTuple) RawArgsTuple; 21513481Sgiacomo.travaglini@arm.com typedef typename internal::TupleFields<RawArgsTuple, k0, k1, k2, k3, k4, k5, 21613481Sgiacomo.travaglini@arm.com k6, k7, k8, k9>::type SelectedArgs; 21713481Sgiacomo.travaglini@arm.com typedef Matcher<const SelectedArgs&> MonomorphicInnerMatcher; 21813481Sgiacomo.travaglini@arm.com 21913481Sgiacomo.travaglini@arm.com template <typename InnerMatcher> 22013481Sgiacomo.travaglini@arm.com explicit ArgsMatcherImpl(const InnerMatcher& inner_matcher) 22113481Sgiacomo.travaglini@arm.com : inner_matcher_(SafeMatcherCast<const SelectedArgs&>(inner_matcher)) {} 22213481Sgiacomo.travaglini@arm.com 22313481Sgiacomo.travaglini@arm.com virtual bool MatchAndExplain(ArgsTuple args, 22413481Sgiacomo.travaglini@arm.com MatchResultListener* listener) const { 22513481Sgiacomo.travaglini@arm.com const SelectedArgs& selected_args = GetSelectedArgs(args); 22613481Sgiacomo.travaglini@arm.com if (!listener->IsInterested()) 22713481Sgiacomo.travaglini@arm.com return inner_matcher_.Matches(selected_args); 22813481Sgiacomo.travaglini@arm.com 22913481Sgiacomo.travaglini@arm.com PrintIndices(listener->stream()); 23013481Sgiacomo.travaglini@arm.com *listener << "are " << PrintToString(selected_args); 23113481Sgiacomo.travaglini@arm.com 23213481Sgiacomo.travaglini@arm.com StringMatchResultListener inner_listener; 23313481Sgiacomo.travaglini@arm.com const bool match = inner_matcher_.MatchAndExplain(selected_args, 23413481Sgiacomo.travaglini@arm.com &inner_listener); 23513481Sgiacomo.travaglini@arm.com PrintIfNotEmpty(inner_listener.str(), listener->stream()); 23613481Sgiacomo.travaglini@arm.com return match; 23713481Sgiacomo.travaglini@arm.com } 23813481Sgiacomo.travaglini@arm.com 23913481Sgiacomo.travaglini@arm.com virtual void DescribeTo(::std::ostream* os) const { 24013481Sgiacomo.travaglini@arm.com *os << "are a tuple "; 24113481Sgiacomo.travaglini@arm.com PrintIndices(os); 24213481Sgiacomo.travaglini@arm.com inner_matcher_.DescribeTo(os); 24313481Sgiacomo.travaglini@arm.com } 24413481Sgiacomo.travaglini@arm.com 24513481Sgiacomo.travaglini@arm.com virtual void DescribeNegationTo(::std::ostream* os) const { 24613481Sgiacomo.travaglini@arm.com *os << "are a tuple "; 24713481Sgiacomo.travaglini@arm.com PrintIndices(os); 24813481Sgiacomo.travaglini@arm.com inner_matcher_.DescribeNegationTo(os); 24913481Sgiacomo.travaglini@arm.com } 25013481Sgiacomo.travaglini@arm.com 25113481Sgiacomo.travaglini@arm.com private: 25213481Sgiacomo.travaglini@arm.com static SelectedArgs GetSelectedArgs(ArgsTuple args) { 25313481Sgiacomo.travaglini@arm.com return TupleFields<RawArgsTuple, k0, k1, k2, k3, k4, k5, k6, k7, k8, 25413481Sgiacomo.travaglini@arm.com k9>::GetSelectedFields(args); 25513481Sgiacomo.travaglini@arm.com } 25613481Sgiacomo.travaglini@arm.com 25713481Sgiacomo.travaglini@arm.com // Prints the indices of the selected fields. 25813481Sgiacomo.travaglini@arm.com static void PrintIndices(::std::ostream* os) { 25913481Sgiacomo.travaglini@arm.com *os << "whose fields ("; 26013481Sgiacomo.travaglini@arm.com const int indices[10] = { k0, k1, k2, k3, k4, k5, k6, k7, k8, k9 }; 26113481Sgiacomo.travaglini@arm.com for (int i = 0; i < 10; i++) { 26213481Sgiacomo.travaglini@arm.com if (indices[i] < 0) 26313481Sgiacomo.travaglini@arm.com break; 26413481Sgiacomo.travaglini@arm.com 26513481Sgiacomo.travaglini@arm.com if (i >= 1) 26613481Sgiacomo.travaglini@arm.com *os << ", "; 26713481Sgiacomo.travaglini@arm.com 26813481Sgiacomo.travaglini@arm.com *os << "#" << indices[i]; 26913481Sgiacomo.travaglini@arm.com } 27013481Sgiacomo.travaglini@arm.com *os << ") "; 27113481Sgiacomo.travaglini@arm.com } 27213481Sgiacomo.travaglini@arm.com 27313481Sgiacomo.travaglini@arm.com const MonomorphicInnerMatcher inner_matcher_; 27413481Sgiacomo.travaglini@arm.com 27513481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(ArgsMatcherImpl); 27613481Sgiacomo.travaglini@arm.com}; 27713481Sgiacomo.travaglini@arm.com 27813481Sgiacomo.travaglini@arm.comtemplate <class InnerMatcher, int k0 = -1, int k1 = -1, int k2 = -1, 27913481Sgiacomo.travaglini@arm.com int k3 = -1, int k4 = -1, int k5 = -1, int k6 = -1, int k7 = -1, 28013481Sgiacomo.travaglini@arm.com int k8 = -1, int k9 = -1> 28113481Sgiacomo.travaglini@arm.comclass ArgsMatcher { 28213481Sgiacomo.travaglini@arm.com public: 28313481Sgiacomo.travaglini@arm.com explicit ArgsMatcher(const InnerMatcher& inner_matcher) 28413481Sgiacomo.travaglini@arm.com : inner_matcher_(inner_matcher) {} 28513481Sgiacomo.travaglini@arm.com 28613481Sgiacomo.travaglini@arm.com template <typename ArgsTuple> 28713481Sgiacomo.travaglini@arm.com operator Matcher<ArgsTuple>() const { 28813481Sgiacomo.travaglini@arm.com return MakeMatcher(new ArgsMatcherImpl<ArgsTuple, k0, k1, k2, k3, k4, k5, 28913481Sgiacomo.travaglini@arm.com k6, k7, k8, k9>(inner_matcher_)); 29013481Sgiacomo.travaglini@arm.com } 29113481Sgiacomo.travaglini@arm.com 29213481Sgiacomo.travaglini@arm.com private: 29313481Sgiacomo.travaglini@arm.com const InnerMatcher inner_matcher_; 29413481Sgiacomo.travaglini@arm.com 29513481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(ArgsMatcher); 29613481Sgiacomo.travaglini@arm.com}; 29713481Sgiacomo.travaglini@arm.com 29813481Sgiacomo.travaglini@arm.com// A set of metafunctions for computing the result type of AllOf. 29913481Sgiacomo.travaglini@arm.com// AllOf(m1, ..., mN) returns 30013481Sgiacomo.travaglini@arm.com// AllOfResultN<decltype(m1), ..., decltype(mN)>::type. 30113481Sgiacomo.travaglini@arm.com 30213481Sgiacomo.travaglini@arm.com// Although AllOf isn't defined for one argument, AllOfResult1 is defined 30313481Sgiacomo.travaglini@arm.com// to simplify the implementation. 30413481Sgiacomo.travaglini@arm.comtemplate <typename M1> 30513481Sgiacomo.travaglini@arm.comstruct AllOfResult1 { 30613481Sgiacomo.travaglini@arm.com typedef M1 type; 30713481Sgiacomo.travaglini@arm.com}; 30813481Sgiacomo.travaglini@arm.com 30913481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2> 31013481Sgiacomo.travaglini@arm.comstruct AllOfResult2 { 31113481Sgiacomo.travaglini@arm.com typedef BothOfMatcher< 31213481Sgiacomo.travaglini@arm.com typename AllOfResult1<M1>::type, 31313481Sgiacomo.travaglini@arm.com typename AllOfResult1<M2>::type 31413481Sgiacomo.travaglini@arm.com > type; 31513481Sgiacomo.travaglini@arm.com}; 31613481Sgiacomo.travaglini@arm.com 31713481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3> 31813481Sgiacomo.travaglini@arm.comstruct AllOfResult3 { 31913481Sgiacomo.travaglini@arm.com typedef BothOfMatcher< 32013481Sgiacomo.travaglini@arm.com typename AllOfResult1<M1>::type, 32113481Sgiacomo.travaglini@arm.com typename AllOfResult2<M2, M3>::type 32213481Sgiacomo.travaglini@arm.com > type; 32313481Sgiacomo.travaglini@arm.com}; 32413481Sgiacomo.travaglini@arm.com 32513481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4> 32613481Sgiacomo.travaglini@arm.comstruct AllOfResult4 { 32713481Sgiacomo.travaglini@arm.com typedef BothOfMatcher< 32813481Sgiacomo.travaglini@arm.com typename AllOfResult2<M1, M2>::type, 32913481Sgiacomo.travaglini@arm.com typename AllOfResult2<M3, M4>::type 33013481Sgiacomo.travaglini@arm.com > type; 33113481Sgiacomo.travaglini@arm.com}; 33213481Sgiacomo.travaglini@arm.com 33313481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5> 33413481Sgiacomo.travaglini@arm.comstruct AllOfResult5 { 33513481Sgiacomo.travaglini@arm.com typedef BothOfMatcher< 33613481Sgiacomo.travaglini@arm.com typename AllOfResult2<M1, M2>::type, 33713481Sgiacomo.travaglini@arm.com typename AllOfResult3<M3, M4, M5>::type 33813481Sgiacomo.travaglini@arm.com > type; 33913481Sgiacomo.travaglini@arm.com}; 34013481Sgiacomo.travaglini@arm.com 34113481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 34213481Sgiacomo.travaglini@arm.com typename M6> 34313481Sgiacomo.travaglini@arm.comstruct AllOfResult6 { 34413481Sgiacomo.travaglini@arm.com typedef BothOfMatcher< 34513481Sgiacomo.travaglini@arm.com typename AllOfResult3<M1, M2, M3>::type, 34613481Sgiacomo.travaglini@arm.com typename AllOfResult3<M4, M5, M6>::type 34713481Sgiacomo.travaglini@arm.com > type; 34813481Sgiacomo.travaglini@arm.com}; 34913481Sgiacomo.travaglini@arm.com 35013481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 35113481Sgiacomo.travaglini@arm.com typename M6, typename M7> 35213481Sgiacomo.travaglini@arm.comstruct AllOfResult7 { 35313481Sgiacomo.travaglini@arm.com typedef BothOfMatcher< 35413481Sgiacomo.travaglini@arm.com typename AllOfResult3<M1, M2, M3>::type, 35513481Sgiacomo.travaglini@arm.com typename AllOfResult4<M4, M5, M6, M7>::type 35613481Sgiacomo.travaglini@arm.com > type; 35713481Sgiacomo.travaglini@arm.com}; 35813481Sgiacomo.travaglini@arm.com 35913481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 36013481Sgiacomo.travaglini@arm.com typename M6, typename M7, typename M8> 36113481Sgiacomo.travaglini@arm.comstruct AllOfResult8 { 36213481Sgiacomo.travaglini@arm.com typedef BothOfMatcher< 36313481Sgiacomo.travaglini@arm.com typename AllOfResult4<M1, M2, M3, M4>::type, 36413481Sgiacomo.travaglini@arm.com typename AllOfResult4<M5, M6, M7, M8>::type 36513481Sgiacomo.travaglini@arm.com > type; 36613481Sgiacomo.travaglini@arm.com}; 36713481Sgiacomo.travaglini@arm.com 36813481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 36913481Sgiacomo.travaglini@arm.com typename M6, typename M7, typename M8, typename M9> 37013481Sgiacomo.travaglini@arm.comstruct AllOfResult9 { 37113481Sgiacomo.travaglini@arm.com typedef BothOfMatcher< 37213481Sgiacomo.travaglini@arm.com typename AllOfResult4<M1, M2, M3, M4>::type, 37313481Sgiacomo.travaglini@arm.com typename AllOfResult5<M5, M6, M7, M8, M9>::type 37413481Sgiacomo.travaglini@arm.com > type; 37513481Sgiacomo.travaglini@arm.com}; 37613481Sgiacomo.travaglini@arm.com 37713481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 37813481Sgiacomo.travaglini@arm.com typename M6, typename M7, typename M8, typename M9, typename M10> 37913481Sgiacomo.travaglini@arm.comstruct AllOfResult10 { 38013481Sgiacomo.travaglini@arm.com typedef BothOfMatcher< 38113481Sgiacomo.travaglini@arm.com typename AllOfResult5<M1, M2, M3, M4, M5>::type, 38213481Sgiacomo.travaglini@arm.com typename AllOfResult5<M6, M7, M8, M9, M10>::type 38313481Sgiacomo.travaglini@arm.com > type; 38413481Sgiacomo.travaglini@arm.com}; 38513481Sgiacomo.travaglini@arm.com 38613481Sgiacomo.travaglini@arm.com// A set of metafunctions for computing the result type of AnyOf. 38713481Sgiacomo.travaglini@arm.com// AnyOf(m1, ..., mN) returns 38813481Sgiacomo.travaglini@arm.com// AnyOfResultN<decltype(m1), ..., decltype(mN)>::type. 38913481Sgiacomo.travaglini@arm.com 39013481Sgiacomo.travaglini@arm.com// Although AnyOf isn't defined for one argument, AnyOfResult1 is defined 39113481Sgiacomo.travaglini@arm.com// to simplify the implementation. 39213481Sgiacomo.travaglini@arm.comtemplate <typename M1> 39313481Sgiacomo.travaglini@arm.comstruct AnyOfResult1 { 39413481Sgiacomo.travaglini@arm.com typedef M1 type; 39513481Sgiacomo.travaglini@arm.com}; 39613481Sgiacomo.travaglini@arm.com 39713481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2> 39813481Sgiacomo.travaglini@arm.comstruct AnyOfResult2 { 39913481Sgiacomo.travaglini@arm.com typedef EitherOfMatcher< 40013481Sgiacomo.travaglini@arm.com typename AnyOfResult1<M1>::type, 40113481Sgiacomo.travaglini@arm.com typename AnyOfResult1<M2>::type 40213481Sgiacomo.travaglini@arm.com > type; 40313481Sgiacomo.travaglini@arm.com}; 40413481Sgiacomo.travaglini@arm.com 40513481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3> 40613481Sgiacomo.travaglini@arm.comstruct AnyOfResult3 { 40713481Sgiacomo.travaglini@arm.com typedef EitherOfMatcher< 40813481Sgiacomo.travaglini@arm.com typename AnyOfResult1<M1>::type, 40913481Sgiacomo.travaglini@arm.com typename AnyOfResult2<M2, M3>::type 41013481Sgiacomo.travaglini@arm.com > type; 41113481Sgiacomo.travaglini@arm.com}; 41213481Sgiacomo.travaglini@arm.com 41313481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4> 41413481Sgiacomo.travaglini@arm.comstruct AnyOfResult4 { 41513481Sgiacomo.travaglini@arm.com typedef EitherOfMatcher< 41613481Sgiacomo.travaglini@arm.com typename AnyOfResult2<M1, M2>::type, 41713481Sgiacomo.travaglini@arm.com typename AnyOfResult2<M3, M4>::type 41813481Sgiacomo.travaglini@arm.com > type; 41913481Sgiacomo.travaglini@arm.com}; 42013481Sgiacomo.travaglini@arm.com 42113481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5> 42213481Sgiacomo.travaglini@arm.comstruct AnyOfResult5 { 42313481Sgiacomo.travaglini@arm.com typedef EitherOfMatcher< 42413481Sgiacomo.travaglini@arm.com typename AnyOfResult2<M1, M2>::type, 42513481Sgiacomo.travaglini@arm.com typename AnyOfResult3<M3, M4, M5>::type 42613481Sgiacomo.travaglini@arm.com > type; 42713481Sgiacomo.travaglini@arm.com}; 42813481Sgiacomo.travaglini@arm.com 42913481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 43013481Sgiacomo.travaglini@arm.com typename M6> 43113481Sgiacomo.travaglini@arm.comstruct AnyOfResult6 { 43213481Sgiacomo.travaglini@arm.com typedef EitherOfMatcher< 43313481Sgiacomo.travaglini@arm.com typename AnyOfResult3<M1, M2, M3>::type, 43413481Sgiacomo.travaglini@arm.com typename AnyOfResult3<M4, M5, M6>::type 43513481Sgiacomo.travaglini@arm.com > type; 43613481Sgiacomo.travaglini@arm.com}; 43713481Sgiacomo.travaglini@arm.com 43813481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 43913481Sgiacomo.travaglini@arm.com typename M6, typename M7> 44013481Sgiacomo.travaglini@arm.comstruct AnyOfResult7 { 44113481Sgiacomo.travaglini@arm.com typedef EitherOfMatcher< 44213481Sgiacomo.travaglini@arm.com typename AnyOfResult3<M1, M2, M3>::type, 44313481Sgiacomo.travaglini@arm.com typename AnyOfResult4<M4, M5, M6, M7>::type 44413481Sgiacomo.travaglini@arm.com > type; 44513481Sgiacomo.travaglini@arm.com}; 44613481Sgiacomo.travaglini@arm.com 44713481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 44813481Sgiacomo.travaglini@arm.com typename M6, typename M7, typename M8> 44913481Sgiacomo.travaglini@arm.comstruct AnyOfResult8 { 45013481Sgiacomo.travaglini@arm.com typedef EitherOfMatcher< 45113481Sgiacomo.travaglini@arm.com typename AnyOfResult4<M1, M2, M3, M4>::type, 45213481Sgiacomo.travaglini@arm.com typename AnyOfResult4<M5, M6, M7, M8>::type 45313481Sgiacomo.travaglini@arm.com > type; 45413481Sgiacomo.travaglini@arm.com}; 45513481Sgiacomo.travaglini@arm.com 45613481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 45713481Sgiacomo.travaglini@arm.com typename M6, typename M7, typename M8, typename M9> 45813481Sgiacomo.travaglini@arm.comstruct AnyOfResult9 { 45913481Sgiacomo.travaglini@arm.com typedef EitherOfMatcher< 46013481Sgiacomo.travaglini@arm.com typename AnyOfResult4<M1, M2, M3, M4>::type, 46113481Sgiacomo.travaglini@arm.com typename AnyOfResult5<M5, M6, M7, M8, M9>::type 46213481Sgiacomo.travaglini@arm.com > type; 46313481Sgiacomo.travaglini@arm.com}; 46413481Sgiacomo.travaglini@arm.com 46513481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 46613481Sgiacomo.travaglini@arm.com typename M6, typename M7, typename M8, typename M9, typename M10> 46713481Sgiacomo.travaglini@arm.comstruct AnyOfResult10 { 46813481Sgiacomo.travaglini@arm.com typedef EitherOfMatcher< 46913481Sgiacomo.travaglini@arm.com typename AnyOfResult5<M1, M2, M3, M4, M5>::type, 47013481Sgiacomo.travaglini@arm.com typename AnyOfResult5<M6, M7, M8, M9, M10>::type 47113481Sgiacomo.travaglini@arm.com > type; 47213481Sgiacomo.travaglini@arm.com}; 47313481Sgiacomo.travaglini@arm.com 47413481Sgiacomo.travaglini@arm.com} // namespace internal 47513481Sgiacomo.travaglini@arm.com 47613481Sgiacomo.travaglini@arm.com// Args<N1, N2, ..., Nk>(a_matcher) matches a tuple if the selected 47713481Sgiacomo.travaglini@arm.com// fields of it matches a_matcher. C++ doesn't support default 47813481Sgiacomo.travaglini@arm.com// arguments for function templates, so we have to overload it. 47913481Sgiacomo.travaglini@arm.comtemplate <typename InnerMatcher> 48013481Sgiacomo.travaglini@arm.cominline internal::ArgsMatcher<InnerMatcher> 48113481Sgiacomo.travaglini@arm.comArgs(const InnerMatcher& matcher) { 48213481Sgiacomo.travaglini@arm.com return internal::ArgsMatcher<InnerMatcher>(matcher); 48313481Sgiacomo.travaglini@arm.com} 48413481Sgiacomo.travaglini@arm.com 48513481Sgiacomo.travaglini@arm.comtemplate <int k1, typename InnerMatcher> 48613481Sgiacomo.travaglini@arm.cominline internal::ArgsMatcher<InnerMatcher, k1> 48713481Sgiacomo.travaglini@arm.comArgs(const InnerMatcher& matcher) { 48813481Sgiacomo.travaglini@arm.com return internal::ArgsMatcher<InnerMatcher, k1>(matcher); 48913481Sgiacomo.travaglini@arm.com} 49013481Sgiacomo.travaglini@arm.com 49113481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, typename InnerMatcher> 49213481Sgiacomo.travaglini@arm.cominline internal::ArgsMatcher<InnerMatcher, k1, k2> 49313481Sgiacomo.travaglini@arm.comArgs(const InnerMatcher& matcher) { 49413481Sgiacomo.travaglini@arm.com return internal::ArgsMatcher<InnerMatcher, k1, k2>(matcher); 49513481Sgiacomo.travaglini@arm.com} 49613481Sgiacomo.travaglini@arm.com 49713481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, typename InnerMatcher> 49813481Sgiacomo.travaglini@arm.cominline internal::ArgsMatcher<InnerMatcher, k1, k2, k3> 49913481Sgiacomo.travaglini@arm.comArgs(const InnerMatcher& matcher) { 50013481Sgiacomo.travaglini@arm.com return internal::ArgsMatcher<InnerMatcher, k1, k2, k3>(matcher); 50113481Sgiacomo.travaglini@arm.com} 50213481Sgiacomo.travaglini@arm.com 50313481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, int k4, typename InnerMatcher> 50413481Sgiacomo.travaglini@arm.cominline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4> 50513481Sgiacomo.travaglini@arm.comArgs(const InnerMatcher& matcher) { 50613481Sgiacomo.travaglini@arm.com return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4>(matcher); 50713481Sgiacomo.travaglini@arm.com} 50813481Sgiacomo.travaglini@arm.com 50913481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, int k4, int k5, typename InnerMatcher> 51013481Sgiacomo.travaglini@arm.cominline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5> 51113481Sgiacomo.travaglini@arm.comArgs(const InnerMatcher& matcher) { 51213481Sgiacomo.travaglini@arm.com return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5>(matcher); 51313481Sgiacomo.travaglini@arm.com} 51413481Sgiacomo.travaglini@arm.com 51513481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, int k4, int k5, int k6, typename InnerMatcher> 51613481Sgiacomo.travaglini@arm.cominline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6> 51713481Sgiacomo.travaglini@arm.comArgs(const InnerMatcher& matcher) { 51813481Sgiacomo.travaglini@arm.com return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6>(matcher); 51913481Sgiacomo.travaglini@arm.com} 52013481Sgiacomo.travaglini@arm.com 52113481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, 52213481Sgiacomo.travaglini@arm.com typename InnerMatcher> 52313481Sgiacomo.travaglini@arm.cominline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7> 52413481Sgiacomo.travaglini@arm.comArgs(const InnerMatcher& matcher) { 52513481Sgiacomo.travaglini@arm.com return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, 52613481Sgiacomo.travaglini@arm.com k7>(matcher); 52713481Sgiacomo.travaglini@arm.com} 52813481Sgiacomo.travaglini@arm.com 52913481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, int k8, 53013481Sgiacomo.travaglini@arm.com typename InnerMatcher> 53113481Sgiacomo.travaglini@arm.cominline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, k8> 53213481Sgiacomo.travaglini@arm.comArgs(const InnerMatcher& matcher) { 53313481Sgiacomo.travaglini@arm.com return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, 53413481Sgiacomo.travaglini@arm.com k8>(matcher); 53513481Sgiacomo.travaglini@arm.com} 53613481Sgiacomo.travaglini@arm.com 53713481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, int k8, 53813481Sgiacomo.travaglini@arm.com int k9, typename InnerMatcher> 53913481Sgiacomo.travaglini@arm.cominline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, k8, k9> 54013481Sgiacomo.travaglini@arm.comArgs(const InnerMatcher& matcher) { 54113481Sgiacomo.travaglini@arm.com return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, k8, 54213481Sgiacomo.travaglini@arm.com k9>(matcher); 54313481Sgiacomo.travaglini@arm.com} 54413481Sgiacomo.travaglini@arm.com 54513481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, int k8, 54613481Sgiacomo.travaglini@arm.com int k9, int k10, typename InnerMatcher> 54713481Sgiacomo.travaglini@arm.cominline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, k8, k9, 54813481Sgiacomo.travaglini@arm.com k10> 54913481Sgiacomo.travaglini@arm.comArgs(const InnerMatcher& matcher) { 55013481Sgiacomo.travaglini@arm.com return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, k8, 55113481Sgiacomo.travaglini@arm.com k9, k10>(matcher); 55213481Sgiacomo.travaglini@arm.com} 55313481Sgiacomo.travaglini@arm.com 55413481Sgiacomo.travaglini@arm.com// ElementsAre(e_1, e_2, ... e_n) matches an STL-style container with 55513481Sgiacomo.travaglini@arm.com// n elements, where the i-th element in the container must 55613481Sgiacomo.travaglini@arm.com// match the i-th argument in the list. Each argument of 55713481Sgiacomo.travaglini@arm.com// ElementsAre() can be either a value or a matcher. We support up to 55813481Sgiacomo.travaglini@arm.com// 10 arguments. 55913481Sgiacomo.travaglini@arm.com// 56013481Sgiacomo.travaglini@arm.com// The use of DecayArray in the implementation allows ElementsAre() 56113481Sgiacomo.travaglini@arm.com// to accept string literals, whose type is const char[N], but we 56213481Sgiacomo.travaglini@arm.com// want to treat them as const char*. 56313481Sgiacomo.travaglini@arm.com// 56413481Sgiacomo.travaglini@arm.com// NOTE: Since ElementsAre() cares about the order of the elements, it 56513481Sgiacomo.travaglini@arm.com// must not be used with containers whose elements's order is 56613481Sgiacomo.travaglini@arm.com// undefined (e.g. hash_map). 56713481Sgiacomo.travaglini@arm.com 56813481Sgiacomo.travaglini@arm.cominline internal::ElementsAreMatcher< 56913481Sgiacomo.travaglini@arm.com ::testing::tuple<> > 57013481Sgiacomo.travaglini@arm.comElementsAre() { 57113481Sgiacomo.travaglini@arm.com typedef ::testing::tuple<> Args; 57213481Sgiacomo.travaglini@arm.com return internal::ElementsAreMatcher<Args>(Args()); 57313481Sgiacomo.travaglini@arm.com} 57413481Sgiacomo.travaglini@arm.com 57513481Sgiacomo.travaglini@arm.comtemplate <typename T1> 57613481Sgiacomo.travaglini@arm.cominline internal::ElementsAreMatcher< 57713481Sgiacomo.travaglini@arm.com ::testing::tuple< 57813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type> > 57913481Sgiacomo.travaglini@arm.comElementsAre(const T1& e1) { 58013481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 58113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type> Args; 58213481Sgiacomo.travaglini@arm.com return internal::ElementsAreMatcher<Args>(Args(e1)); 58313481Sgiacomo.travaglini@arm.com} 58413481Sgiacomo.travaglini@arm.com 58513481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2> 58613481Sgiacomo.travaglini@arm.cominline internal::ElementsAreMatcher< 58713481Sgiacomo.travaglini@arm.com ::testing::tuple< 58813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 58913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type> > 59013481Sgiacomo.travaglini@arm.comElementsAre(const T1& e1, const T2& e2) { 59113481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 59213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 59313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type> Args; 59413481Sgiacomo.travaglini@arm.com return internal::ElementsAreMatcher<Args>(Args(e1, e2)); 59513481Sgiacomo.travaglini@arm.com} 59613481Sgiacomo.travaglini@arm.com 59713481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3> 59813481Sgiacomo.travaglini@arm.cominline internal::ElementsAreMatcher< 59913481Sgiacomo.travaglini@arm.com ::testing::tuple< 60013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 60113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 60213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type> > 60313481Sgiacomo.travaglini@arm.comElementsAre(const T1& e1, const T2& e2, const T3& e3) { 60413481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 60513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 60613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 60713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type> Args; 60813481Sgiacomo.travaglini@arm.com return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3)); 60913481Sgiacomo.travaglini@arm.com} 61013481Sgiacomo.travaglini@arm.com 61113481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4> 61213481Sgiacomo.travaglini@arm.cominline internal::ElementsAreMatcher< 61313481Sgiacomo.travaglini@arm.com ::testing::tuple< 61413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 61513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 61613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 61713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type> > 61813481Sgiacomo.travaglini@arm.comElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4) { 61913481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 62013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 62113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 62213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 62313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type> Args; 62413481Sgiacomo.travaglini@arm.com return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3, e4)); 62513481Sgiacomo.travaglini@arm.com} 62613481Sgiacomo.travaglini@arm.com 62713481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4, typename T5> 62813481Sgiacomo.travaglini@arm.cominline internal::ElementsAreMatcher< 62913481Sgiacomo.travaglini@arm.com ::testing::tuple< 63013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 63113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 63213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 63313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 63413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type> > 63513481Sgiacomo.travaglini@arm.comElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 63613481Sgiacomo.travaglini@arm.com const T5& e5) { 63713481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 63813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 63913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 64013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 64113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 64213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type> Args; 64313481Sgiacomo.travaglini@arm.com return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5)); 64413481Sgiacomo.travaglini@arm.com} 64513481Sgiacomo.travaglini@arm.com 64613481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 64713481Sgiacomo.travaglini@arm.com typename T6> 64813481Sgiacomo.travaglini@arm.cominline internal::ElementsAreMatcher< 64913481Sgiacomo.travaglini@arm.com ::testing::tuple< 65013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 65113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 65213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 65313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 65413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 65513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type> > 65613481Sgiacomo.travaglini@arm.comElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 65713481Sgiacomo.travaglini@arm.com const T5& e5, const T6& e6) { 65813481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 65913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 66013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 66113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 66213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 66313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 66413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type> Args; 66513481Sgiacomo.travaglini@arm.com return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5, e6)); 66613481Sgiacomo.travaglini@arm.com} 66713481Sgiacomo.travaglini@arm.com 66813481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 66913481Sgiacomo.travaglini@arm.com typename T6, typename T7> 67013481Sgiacomo.travaglini@arm.cominline internal::ElementsAreMatcher< 67113481Sgiacomo.travaglini@arm.com ::testing::tuple< 67213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 67313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 67413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 67513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 67613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 67713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 67813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type> > 67913481Sgiacomo.travaglini@arm.comElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 68013481Sgiacomo.travaglini@arm.com const T5& e5, const T6& e6, const T7& e7) { 68113481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 68213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 68313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 68413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 68513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 68613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 68713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 68813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type> Args; 68913481Sgiacomo.travaglini@arm.com return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5, e6, e7)); 69013481Sgiacomo.travaglini@arm.com} 69113481Sgiacomo.travaglini@arm.com 69213481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 69313481Sgiacomo.travaglini@arm.com typename T6, typename T7, typename T8> 69413481Sgiacomo.travaglini@arm.cominline internal::ElementsAreMatcher< 69513481Sgiacomo.travaglini@arm.com ::testing::tuple< 69613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 69713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 69813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 69913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 70013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 70113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 70213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type, 70313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T8>::type> > 70413481Sgiacomo.travaglini@arm.comElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 70513481Sgiacomo.travaglini@arm.com const T5& e5, const T6& e6, const T7& e7, const T8& e8) { 70613481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 70713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 70813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 70913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 71013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 71113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 71213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 71313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type, 71413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T8>::type> Args; 71513481Sgiacomo.travaglini@arm.com return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5, e6, e7, 71613481Sgiacomo.travaglini@arm.com e8)); 71713481Sgiacomo.travaglini@arm.com} 71813481Sgiacomo.travaglini@arm.com 71913481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 72013481Sgiacomo.travaglini@arm.com typename T6, typename T7, typename T8, typename T9> 72113481Sgiacomo.travaglini@arm.cominline internal::ElementsAreMatcher< 72213481Sgiacomo.travaglini@arm.com ::testing::tuple< 72313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 72413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 72513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 72613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 72713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 72813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 72913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type, 73013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T8>::type, 73113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T9>::type> > 73213481Sgiacomo.travaglini@arm.comElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 73313481Sgiacomo.travaglini@arm.com const T5& e5, const T6& e6, const T7& e7, const T8& e8, const T9& e9) { 73413481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 73513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 73613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 73713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 73813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 73913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 74013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 74113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type, 74213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T8>::type, 74313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T9>::type> Args; 74413481Sgiacomo.travaglini@arm.com return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5, e6, e7, 74513481Sgiacomo.travaglini@arm.com e8, e9)); 74613481Sgiacomo.travaglini@arm.com} 74713481Sgiacomo.travaglini@arm.com 74813481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 74913481Sgiacomo.travaglini@arm.com typename T6, typename T7, typename T8, typename T9, typename T10> 75013481Sgiacomo.travaglini@arm.cominline internal::ElementsAreMatcher< 75113481Sgiacomo.travaglini@arm.com ::testing::tuple< 75213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 75313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 75413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 75513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 75613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 75713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 75813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type, 75913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T8>::type, 76013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T9>::type, 76113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T10>::type> > 76213481Sgiacomo.travaglini@arm.comElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 76313481Sgiacomo.travaglini@arm.com const T5& e5, const T6& e6, const T7& e7, const T8& e8, const T9& e9, 76413481Sgiacomo.travaglini@arm.com const T10& e10) { 76513481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 76613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 76713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 76813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 76913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 77013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 77113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 77213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type, 77313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T8>::type, 77413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T9>::type, 77513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T10>::type> Args; 77613481Sgiacomo.travaglini@arm.com return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5, e6, e7, 77713481Sgiacomo.travaglini@arm.com e8, e9, e10)); 77813481Sgiacomo.travaglini@arm.com} 77913481Sgiacomo.travaglini@arm.com 78013481Sgiacomo.travaglini@arm.com// UnorderedElementsAre(e_1, e_2, ..., e_n) is an ElementsAre extension 78113481Sgiacomo.travaglini@arm.com// that matches n elements in any order. We support up to n=10 arguments. 78213481Sgiacomo.travaglini@arm.com 78313481Sgiacomo.travaglini@arm.cominline internal::UnorderedElementsAreMatcher< 78413481Sgiacomo.travaglini@arm.com ::testing::tuple<> > 78513481Sgiacomo.travaglini@arm.comUnorderedElementsAre() { 78613481Sgiacomo.travaglini@arm.com typedef ::testing::tuple<> Args; 78713481Sgiacomo.travaglini@arm.com return internal::UnorderedElementsAreMatcher<Args>(Args()); 78813481Sgiacomo.travaglini@arm.com} 78913481Sgiacomo.travaglini@arm.com 79013481Sgiacomo.travaglini@arm.comtemplate <typename T1> 79113481Sgiacomo.travaglini@arm.cominline internal::UnorderedElementsAreMatcher< 79213481Sgiacomo.travaglini@arm.com ::testing::tuple< 79313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type> > 79413481Sgiacomo.travaglini@arm.comUnorderedElementsAre(const T1& e1) { 79513481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 79613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type> Args; 79713481Sgiacomo.travaglini@arm.com return internal::UnorderedElementsAreMatcher<Args>(Args(e1)); 79813481Sgiacomo.travaglini@arm.com} 79913481Sgiacomo.travaglini@arm.com 80013481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2> 80113481Sgiacomo.travaglini@arm.cominline internal::UnorderedElementsAreMatcher< 80213481Sgiacomo.travaglini@arm.com ::testing::tuple< 80313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 80413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type> > 80513481Sgiacomo.travaglini@arm.comUnorderedElementsAre(const T1& e1, const T2& e2) { 80613481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 80713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 80813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type> Args; 80913481Sgiacomo.travaglini@arm.com return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2)); 81013481Sgiacomo.travaglini@arm.com} 81113481Sgiacomo.travaglini@arm.com 81213481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3> 81313481Sgiacomo.travaglini@arm.cominline internal::UnorderedElementsAreMatcher< 81413481Sgiacomo.travaglini@arm.com ::testing::tuple< 81513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 81613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 81713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type> > 81813481Sgiacomo.travaglini@arm.comUnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3) { 81913481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 82013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 82113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 82213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type> Args; 82313481Sgiacomo.travaglini@arm.com return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3)); 82413481Sgiacomo.travaglini@arm.com} 82513481Sgiacomo.travaglini@arm.com 82613481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4> 82713481Sgiacomo.travaglini@arm.cominline internal::UnorderedElementsAreMatcher< 82813481Sgiacomo.travaglini@arm.com ::testing::tuple< 82913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 83013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 83113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 83213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type> > 83313481Sgiacomo.travaglini@arm.comUnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4) { 83413481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 83513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 83613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 83713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 83813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type> Args; 83913481Sgiacomo.travaglini@arm.com return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3, e4)); 84013481Sgiacomo.travaglini@arm.com} 84113481Sgiacomo.travaglini@arm.com 84213481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4, typename T5> 84313481Sgiacomo.travaglini@arm.cominline internal::UnorderedElementsAreMatcher< 84413481Sgiacomo.travaglini@arm.com ::testing::tuple< 84513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 84613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 84713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 84813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 84913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type> > 85013481Sgiacomo.travaglini@arm.comUnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 85113481Sgiacomo.travaglini@arm.com const T5& e5) { 85213481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 85313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 85413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 85513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 85613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 85713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type> Args; 85813481Sgiacomo.travaglini@arm.com return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5)); 85913481Sgiacomo.travaglini@arm.com} 86013481Sgiacomo.travaglini@arm.com 86113481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 86213481Sgiacomo.travaglini@arm.com typename T6> 86313481Sgiacomo.travaglini@arm.cominline internal::UnorderedElementsAreMatcher< 86413481Sgiacomo.travaglini@arm.com ::testing::tuple< 86513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 86613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 86713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 86813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 86913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 87013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type> > 87113481Sgiacomo.travaglini@arm.comUnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 87213481Sgiacomo.travaglini@arm.com const T5& e5, const T6& e6) { 87313481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 87413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 87513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 87613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 87713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 87813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 87913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type> Args; 88013481Sgiacomo.travaglini@arm.com return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5, 88113481Sgiacomo.travaglini@arm.com e6)); 88213481Sgiacomo.travaglini@arm.com} 88313481Sgiacomo.travaglini@arm.com 88413481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 88513481Sgiacomo.travaglini@arm.com typename T6, typename T7> 88613481Sgiacomo.travaglini@arm.cominline internal::UnorderedElementsAreMatcher< 88713481Sgiacomo.travaglini@arm.com ::testing::tuple< 88813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 88913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 89013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 89113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 89213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 89313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 89413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type> > 89513481Sgiacomo.travaglini@arm.comUnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 89613481Sgiacomo.travaglini@arm.com const T5& e5, const T6& e6, const T7& e7) { 89713481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 89813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 89913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 90013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 90113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 90213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 90313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 90413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type> Args; 90513481Sgiacomo.travaglini@arm.com return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5, 90613481Sgiacomo.travaglini@arm.com e6, e7)); 90713481Sgiacomo.travaglini@arm.com} 90813481Sgiacomo.travaglini@arm.com 90913481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 91013481Sgiacomo.travaglini@arm.com typename T6, typename T7, typename T8> 91113481Sgiacomo.travaglini@arm.cominline internal::UnorderedElementsAreMatcher< 91213481Sgiacomo.travaglini@arm.com ::testing::tuple< 91313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 91413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 91513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 91613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 91713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 91813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 91913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type, 92013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T8>::type> > 92113481Sgiacomo.travaglini@arm.comUnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 92213481Sgiacomo.travaglini@arm.com const T5& e5, const T6& e6, const T7& e7, const T8& e8) { 92313481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 92413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 92513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 92613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 92713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 92813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 92913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 93013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type, 93113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T8>::type> Args; 93213481Sgiacomo.travaglini@arm.com return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5, 93313481Sgiacomo.travaglini@arm.com e6, e7, e8)); 93413481Sgiacomo.travaglini@arm.com} 93513481Sgiacomo.travaglini@arm.com 93613481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 93713481Sgiacomo.travaglini@arm.com typename T6, typename T7, typename T8, typename T9> 93813481Sgiacomo.travaglini@arm.cominline internal::UnorderedElementsAreMatcher< 93913481Sgiacomo.travaglini@arm.com ::testing::tuple< 94013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 94113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 94213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 94313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 94413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 94513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 94613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type, 94713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T8>::type, 94813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T9>::type> > 94913481Sgiacomo.travaglini@arm.comUnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 95013481Sgiacomo.travaglini@arm.com const T5& e5, const T6& e6, const T7& e7, const T8& e8, const T9& e9) { 95113481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 95213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 95313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 95413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 95513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 95613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 95713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 95813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type, 95913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T8>::type, 96013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T9>::type> Args; 96113481Sgiacomo.travaglini@arm.com return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5, 96213481Sgiacomo.travaglini@arm.com e6, e7, e8, e9)); 96313481Sgiacomo.travaglini@arm.com} 96413481Sgiacomo.travaglini@arm.com 96513481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 96613481Sgiacomo.travaglini@arm.com typename T6, typename T7, typename T8, typename T9, typename T10> 96713481Sgiacomo.travaglini@arm.cominline internal::UnorderedElementsAreMatcher< 96813481Sgiacomo.travaglini@arm.com ::testing::tuple< 96913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 97013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 97113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 97213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 97313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 97413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 97513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type, 97613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T8>::type, 97713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T9>::type, 97813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T10>::type> > 97913481Sgiacomo.travaglini@arm.comUnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 98013481Sgiacomo.travaglini@arm.com const T5& e5, const T6& e6, const T7& e7, const T8& e8, const T9& e9, 98113481Sgiacomo.travaglini@arm.com const T10& e10) { 98213481Sgiacomo.travaglini@arm.com typedef ::testing::tuple< 98313481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T1>::type, 98413481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T2>::type, 98513481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T3>::type, 98613481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T4>::type, 98713481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T5>::type, 98813481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T6>::type, 98913481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T7>::type, 99013481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T8>::type, 99113481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T9>::type, 99213481Sgiacomo.travaglini@arm.com typename internal::DecayArray<T10>::type> Args; 99313481Sgiacomo.travaglini@arm.com return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5, 99413481Sgiacomo.travaglini@arm.com e6, e7, e8, e9, e10)); 99513481Sgiacomo.travaglini@arm.com} 99613481Sgiacomo.travaglini@arm.com 99713481Sgiacomo.travaglini@arm.com// AllOf(m1, m2, ..., mk) matches any value that matches all of the given 99813481Sgiacomo.travaglini@arm.com// sub-matchers. AllOf is called fully qualified to prevent ADL from firing. 99913481Sgiacomo.travaglini@arm.com 100013481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2> 100113481Sgiacomo.travaglini@arm.cominline typename internal::AllOfResult2<M1, M2>::type 100213481Sgiacomo.travaglini@arm.comAllOf(M1 m1, M2 m2) { 100313481Sgiacomo.travaglini@arm.com return typename internal::AllOfResult2<M1, M2>::type( 100413481Sgiacomo.travaglini@arm.com m1, 100513481Sgiacomo.travaglini@arm.com m2); 100613481Sgiacomo.travaglini@arm.com} 100713481Sgiacomo.travaglini@arm.com 100813481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3> 100913481Sgiacomo.travaglini@arm.cominline typename internal::AllOfResult3<M1, M2, M3>::type 101013481Sgiacomo.travaglini@arm.comAllOf(M1 m1, M2 m2, M3 m3) { 101113481Sgiacomo.travaglini@arm.com return typename internal::AllOfResult3<M1, M2, M3>::type( 101213481Sgiacomo.travaglini@arm.com m1, 101313481Sgiacomo.travaglini@arm.com ::testing::AllOf(m2, m3)); 101413481Sgiacomo.travaglini@arm.com} 101513481Sgiacomo.travaglini@arm.com 101613481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4> 101713481Sgiacomo.travaglini@arm.cominline typename internal::AllOfResult4<M1, M2, M3, M4>::type 101813481Sgiacomo.travaglini@arm.comAllOf(M1 m1, M2 m2, M3 m3, M4 m4) { 101913481Sgiacomo.travaglini@arm.com return typename internal::AllOfResult4<M1, M2, M3, M4>::type( 102013481Sgiacomo.travaglini@arm.com ::testing::AllOf(m1, m2), 102113481Sgiacomo.travaglini@arm.com ::testing::AllOf(m3, m4)); 102213481Sgiacomo.travaglini@arm.com} 102313481Sgiacomo.travaglini@arm.com 102413481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5> 102513481Sgiacomo.travaglini@arm.cominline typename internal::AllOfResult5<M1, M2, M3, M4, M5>::type 102613481Sgiacomo.travaglini@arm.comAllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5) { 102713481Sgiacomo.travaglini@arm.com return typename internal::AllOfResult5<M1, M2, M3, M4, M5>::type( 102813481Sgiacomo.travaglini@arm.com ::testing::AllOf(m1, m2), 102913481Sgiacomo.travaglini@arm.com ::testing::AllOf(m3, m4, m5)); 103013481Sgiacomo.travaglini@arm.com} 103113481Sgiacomo.travaglini@arm.com 103213481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 103313481Sgiacomo.travaglini@arm.com typename M6> 103413481Sgiacomo.travaglini@arm.cominline typename internal::AllOfResult6<M1, M2, M3, M4, M5, M6>::type 103513481Sgiacomo.travaglini@arm.comAllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6) { 103613481Sgiacomo.travaglini@arm.com return typename internal::AllOfResult6<M1, M2, M3, M4, M5, M6>::type( 103713481Sgiacomo.travaglini@arm.com ::testing::AllOf(m1, m2, m3), 103813481Sgiacomo.travaglini@arm.com ::testing::AllOf(m4, m5, m6)); 103913481Sgiacomo.travaglini@arm.com} 104013481Sgiacomo.travaglini@arm.com 104113481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 104213481Sgiacomo.travaglini@arm.com typename M6, typename M7> 104313481Sgiacomo.travaglini@arm.cominline typename internal::AllOfResult7<M1, M2, M3, M4, M5, M6, M7>::type 104413481Sgiacomo.travaglini@arm.comAllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7) { 104513481Sgiacomo.travaglini@arm.com return typename internal::AllOfResult7<M1, M2, M3, M4, M5, M6, M7>::type( 104613481Sgiacomo.travaglini@arm.com ::testing::AllOf(m1, m2, m3), 104713481Sgiacomo.travaglini@arm.com ::testing::AllOf(m4, m5, m6, m7)); 104813481Sgiacomo.travaglini@arm.com} 104913481Sgiacomo.travaglini@arm.com 105013481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 105113481Sgiacomo.travaglini@arm.com typename M6, typename M7, typename M8> 105213481Sgiacomo.travaglini@arm.cominline typename internal::AllOfResult8<M1, M2, M3, M4, M5, M6, M7, M8>::type 105313481Sgiacomo.travaglini@arm.comAllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8) { 105413481Sgiacomo.travaglini@arm.com return typename internal::AllOfResult8<M1, M2, M3, M4, M5, M6, M7, M8>::type( 105513481Sgiacomo.travaglini@arm.com ::testing::AllOf(m1, m2, m3, m4), 105613481Sgiacomo.travaglini@arm.com ::testing::AllOf(m5, m6, m7, m8)); 105713481Sgiacomo.travaglini@arm.com} 105813481Sgiacomo.travaglini@arm.com 105913481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 106013481Sgiacomo.travaglini@arm.com typename M6, typename M7, typename M8, typename M9> 106113481Sgiacomo.travaglini@arm.cominline typename internal::AllOfResult9<M1, M2, M3, M4, M5, M6, M7, M8, M9>::type 106213481Sgiacomo.travaglini@arm.comAllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9) { 106313481Sgiacomo.travaglini@arm.com return typename internal::AllOfResult9<M1, M2, M3, M4, M5, M6, M7, M8, 106413481Sgiacomo.travaglini@arm.com M9>::type( 106513481Sgiacomo.travaglini@arm.com ::testing::AllOf(m1, m2, m3, m4), 106613481Sgiacomo.travaglini@arm.com ::testing::AllOf(m5, m6, m7, m8, m9)); 106713481Sgiacomo.travaglini@arm.com} 106813481Sgiacomo.travaglini@arm.com 106913481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 107013481Sgiacomo.travaglini@arm.com typename M6, typename M7, typename M8, typename M9, typename M10> 107113481Sgiacomo.travaglini@arm.cominline typename internal::AllOfResult10<M1, M2, M3, M4, M5, M6, M7, M8, M9, 107213481Sgiacomo.travaglini@arm.com M10>::type 107313481Sgiacomo.travaglini@arm.comAllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { 107413481Sgiacomo.travaglini@arm.com return typename internal::AllOfResult10<M1, M2, M3, M4, M5, M6, M7, M8, M9, 107513481Sgiacomo.travaglini@arm.com M10>::type( 107613481Sgiacomo.travaglini@arm.com ::testing::AllOf(m1, m2, m3, m4, m5), 107713481Sgiacomo.travaglini@arm.com ::testing::AllOf(m6, m7, m8, m9, m10)); 107813481Sgiacomo.travaglini@arm.com} 107913481Sgiacomo.travaglini@arm.com 108013481Sgiacomo.travaglini@arm.com// AnyOf(m1, m2, ..., mk) matches any value that matches any of the given 108113481Sgiacomo.travaglini@arm.com// sub-matchers. AnyOf is called fully qualified to prevent ADL from firing. 108213481Sgiacomo.travaglini@arm.com 108313481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2> 108413481Sgiacomo.travaglini@arm.cominline typename internal::AnyOfResult2<M1, M2>::type 108513481Sgiacomo.travaglini@arm.comAnyOf(M1 m1, M2 m2) { 108613481Sgiacomo.travaglini@arm.com return typename internal::AnyOfResult2<M1, M2>::type( 108713481Sgiacomo.travaglini@arm.com m1, 108813481Sgiacomo.travaglini@arm.com m2); 108913481Sgiacomo.travaglini@arm.com} 109013481Sgiacomo.travaglini@arm.com 109113481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3> 109213481Sgiacomo.travaglini@arm.cominline typename internal::AnyOfResult3<M1, M2, M3>::type 109313481Sgiacomo.travaglini@arm.comAnyOf(M1 m1, M2 m2, M3 m3) { 109413481Sgiacomo.travaglini@arm.com return typename internal::AnyOfResult3<M1, M2, M3>::type( 109513481Sgiacomo.travaglini@arm.com m1, 109613481Sgiacomo.travaglini@arm.com ::testing::AnyOf(m2, m3)); 109713481Sgiacomo.travaglini@arm.com} 109813481Sgiacomo.travaglini@arm.com 109913481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4> 110013481Sgiacomo.travaglini@arm.cominline typename internal::AnyOfResult4<M1, M2, M3, M4>::type 110113481Sgiacomo.travaglini@arm.comAnyOf(M1 m1, M2 m2, M3 m3, M4 m4) { 110213481Sgiacomo.travaglini@arm.com return typename internal::AnyOfResult4<M1, M2, M3, M4>::type( 110313481Sgiacomo.travaglini@arm.com ::testing::AnyOf(m1, m2), 110413481Sgiacomo.travaglini@arm.com ::testing::AnyOf(m3, m4)); 110513481Sgiacomo.travaglini@arm.com} 110613481Sgiacomo.travaglini@arm.com 110713481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5> 110813481Sgiacomo.travaglini@arm.cominline typename internal::AnyOfResult5<M1, M2, M3, M4, M5>::type 110913481Sgiacomo.travaglini@arm.comAnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5) { 111013481Sgiacomo.travaglini@arm.com return typename internal::AnyOfResult5<M1, M2, M3, M4, M5>::type( 111113481Sgiacomo.travaglini@arm.com ::testing::AnyOf(m1, m2), 111213481Sgiacomo.travaglini@arm.com ::testing::AnyOf(m3, m4, m5)); 111313481Sgiacomo.travaglini@arm.com} 111413481Sgiacomo.travaglini@arm.com 111513481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 111613481Sgiacomo.travaglini@arm.com typename M6> 111713481Sgiacomo.travaglini@arm.cominline typename internal::AnyOfResult6<M1, M2, M3, M4, M5, M6>::type 111813481Sgiacomo.travaglini@arm.comAnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6) { 111913481Sgiacomo.travaglini@arm.com return typename internal::AnyOfResult6<M1, M2, M3, M4, M5, M6>::type( 112013481Sgiacomo.travaglini@arm.com ::testing::AnyOf(m1, m2, m3), 112113481Sgiacomo.travaglini@arm.com ::testing::AnyOf(m4, m5, m6)); 112213481Sgiacomo.travaglini@arm.com} 112313481Sgiacomo.travaglini@arm.com 112413481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 112513481Sgiacomo.travaglini@arm.com typename M6, typename M7> 112613481Sgiacomo.travaglini@arm.cominline typename internal::AnyOfResult7<M1, M2, M3, M4, M5, M6, M7>::type 112713481Sgiacomo.travaglini@arm.comAnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7) { 112813481Sgiacomo.travaglini@arm.com return typename internal::AnyOfResult7<M1, M2, M3, M4, M5, M6, M7>::type( 112913481Sgiacomo.travaglini@arm.com ::testing::AnyOf(m1, m2, m3), 113013481Sgiacomo.travaglini@arm.com ::testing::AnyOf(m4, m5, m6, m7)); 113113481Sgiacomo.travaglini@arm.com} 113213481Sgiacomo.travaglini@arm.com 113313481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 113413481Sgiacomo.travaglini@arm.com typename M6, typename M7, typename M8> 113513481Sgiacomo.travaglini@arm.cominline typename internal::AnyOfResult8<M1, M2, M3, M4, M5, M6, M7, M8>::type 113613481Sgiacomo.travaglini@arm.comAnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8) { 113713481Sgiacomo.travaglini@arm.com return typename internal::AnyOfResult8<M1, M2, M3, M4, M5, M6, M7, M8>::type( 113813481Sgiacomo.travaglini@arm.com ::testing::AnyOf(m1, m2, m3, m4), 113913481Sgiacomo.travaglini@arm.com ::testing::AnyOf(m5, m6, m7, m8)); 114013481Sgiacomo.travaglini@arm.com} 114113481Sgiacomo.travaglini@arm.com 114213481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 114313481Sgiacomo.travaglini@arm.com typename M6, typename M7, typename M8, typename M9> 114413481Sgiacomo.travaglini@arm.cominline typename internal::AnyOfResult9<M1, M2, M3, M4, M5, M6, M7, M8, M9>::type 114513481Sgiacomo.travaglini@arm.comAnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9) { 114613481Sgiacomo.travaglini@arm.com return typename internal::AnyOfResult9<M1, M2, M3, M4, M5, M6, M7, M8, 114713481Sgiacomo.travaglini@arm.com M9>::type( 114813481Sgiacomo.travaglini@arm.com ::testing::AnyOf(m1, m2, m3, m4), 114913481Sgiacomo.travaglini@arm.com ::testing::AnyOf(m5, m6, m7, m8, m9)); 115013481Sgiacomo.travaglini@arm.com} 115113481Sgiacomo.travaglini@arm.com 115213481Sgiacomo.travaglini@arm.comtemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 115313481Sgiacomo.travaglini@arm.com typename M6, typename M7, typename M8, typename M9, typename M10> 115413481Sgiacomo.travaglini@arm.cominline typename internal::AnyOfResult10<M1, M2, M3, M4, M5, M6, M7, M8, M9, 115513481Sgiacomo.travaglini@arm.com M10>::type 115613481Sgiacomo.travaglini@arm.comAnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { 115713481Sgiacomo.travaglini@arm.com return typename internal::AnyOfResult10<M1, M2, M3, M4, M5, M6, M7, M8, M9, 115813481Sgiacomo.travaglini@arm.com M10>::type( 115913481Sgiacomo.travaglini@arm.com ::testing::AnyOf(m1, m2, m3, m4, m5), 116013481Sgiacomo.travaglini@arm.com ::testing::AnyOf(m6, m7, m8, m9, m10)); 116113481Sgiacomo.travaglini@arm.com} 116213481Sgiacomo.travaglini@arm.com 116313481Sgiacomo.travaglini@arm.com} // namespace testing 116413481Sgiacomo.travaglini@arm.com 116513481Sgiacomo.travaglini@arm.com 116613481Sgiacomo.travaglini@arm.com// The MATCHER* family of macros can be used in a namespace scope to 116713481Sgiacomo.travaglini@arm.com// define custom matchers easily. 116813481Sgiacomo.travaglini@arm.com// 116913481Sgiacomo.travaglini@arm.com// Basic Usage 117013481Sgiacomo.travaglini@arm.com// =========== 117113481Sgiacomo.travaglini@arm.com// 117213481Sgiacomo.travaglini@arm.com// The syntax 117313481Sgiacomo.travaglini@arm.com// 117413481Sgiacomo.travaglini@arm.com// MATCHER(name, description_string) { statements; } 117513481Sgiacomo.travaglini@arm.com// 117613481Sgiacomo.travaglini@arm.com// defines a matcher with the given name that executes the statements, 117713481Sgiacomo.travaglini@arm.com// which must return a bool to indicate if the match succeeds. Inside 117813481Sgiacomo.travaglini@arm.com// the statements, you can refer to the value being matched by 'arg', 117913481Sgiacomo.travaglini@arm.com// and refer to its type by 'arg_type'. 118013481Sgiacomo.travaglini@arm.com// 118113481Sgiacomo.travaglini@arm.com// The description string documents what the matcher does, and is used 118213481Sgiacomo.travaglini@arm.com// to generate the failure message when the match fails. Since a 118313481Sgiacomo.travaglini@arm.com// MATCHER() is usually defined in a header file shared by multiple 118413481Sgiacomo.travaglini@arm.com// C++ source files, we require the description to be a C-string 118513481Sgiacomo.travaglini@arm.com// literal to avoid possible side effects. It can be empty, in which 118613481Sgiacomo.travaglini@arm.com// case we'll use the sequence of words in the matcher name as the 118713481Sgiacomo.travaglini@arm.com// description. 118813481Sgiacomo.travaglini@arm.com// 118913481Sgiacomo.travaglini@arm.com// For example: 119013481Sgiacomo.travaglini@arm.com// 119113481Sgiacomo.travaglini@arm.com// MATCHER(IsEven, "") { return (arg % 2) == 0; } 119213481Sgiacomo.travaglini@arm.com// 119313481Sgiacomo.travaglini@arm.com// allows you to write 119413481Sgiacomo.travaglini@arm.com// 119513481Sgiacomo.travaglini@arm.com// // Expects mock_foo.Bar(n) to be called where n is even. 119613481Sgiacomo.travaglini@arm.com// EXPECT_CALL(mock_foo, Bar(IsEven())); 119713481Sgiacomo.travaglini@arm.com// 119813481Sgiacomo.travaglini@arm.com// or, 119913481Sgiacomo.travaglini@arm.com// 120013481Sgiacomo.travaglini@arm.com// // Verifies that the value of some_expression is even. 120113481Sgiacomo.travaglini@arm.com// EXPECT_THAT(some_expression, IsEven()); 120213481Sgiacomo.travaglini@arm.com// 120313481Sgiacomo.travaglini@arm.com// If the above assertion fails, it will print something like: 120413481Sgiacomo.travaglini@arm.com// 120513481Sgiacomo.travaglini@arm.com// Value of: some_expression 120613481Sgiacomo.travaglini@arm.com// Expected: is even 120713481Sgiacomo.travaglini@arm.com// Actual: 7 120813481Sgiacomo.travaglini@arm.com// 120913481Sgiacomo.travaglini@arm.com// where the description "is even" is automatically calculated from the 121013481Sgiacomo.travaglini@arm.com// matcher name IsEven. 121113481Sgiacomo.travaglini@arm.com// 121213481Sgiacomo.travaglini@arm.com// Argument Type 121313481Sgiacomo.travaglini@arm.com// ============= 121413481Sgiacomo.travaglini@arm.com// 121513481Sgiacomo.travaglini@arm.com// Note that the type of the value being matched (arg_type) is 121613481Sgiacomo.travaglini@arm.com// determined by the context in which you use the matcher and is 121713481Sgiacomo.travaglini@arm.com// supplied to you by the compiler, so you don't need to worry about 121813481Sgiacomo.travaglini@arm.com// declaring it (nor can you). This allows the matcher to be 121913481Sgiacomo.travaglini@arm.com// polymorphic. For example, IsEven() can be used to match any type 122013481Sgiacomo.travaglini@arm.com// where the value of "(arg % 2) == 0" can be implicitly converted to 122113481Sgiacomo.travaglini@arm.com// a bool. In the "Bar(IsEven())" example above, if method Bar() 122213481Sgiacomo.travaglini@arm.com// takes an int, 'arg_type' will be int; if it takes an unsigned long, 122313481Sgiacomo.travaglini@arm.com// 'arg_type' will be unsigned long; and so on. 122413481Sgiacomo.travaglini@arm.com// 122513481Sgiacomo.travaglini@arm.com// Parameterizing Matchers 122613481Sgiacomo.travaglini@arm.com// ======================= 122713481Sgiacomo.travaglini@arm.com// 122813481Sgiacomo.travaglini@arm.com// Sometimes you'll want to parameterize the matcher. For that you 122913481Sgiacomo.travaglini@arm.com// can use another macro: 123013481Sgiacomo.travaglini@arm.com// 123113481Sgiacomo.travaglini@arm.com// MATCHER_P(name, param_name, description_string) { statements; } 123213481Sgiacomo.travaglini@arm.com// 123313481Sgiacomo.travaglini@arm.com// For example: 123413481Sgiacomo.travaglini@arm.com// 123513481Sgiacomo.travaglini@arm.com// MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; } 123613481Sgiacomo.travaglini@arm.com// 123713481Sgiacomo.travaglini@arm.com// will allow you to write: 123813481Sgiacomo.travaglini@arm.com// 123913481Sgiacomo.travaglini@arm.com// EXPECT_THAT(Blah("a"), HasAbsoluteValue(n)); 124013481Sgiacomo.travaglini@arm.com// 124113481Sgiacomo.travaglini@arm.com// which may lead to this message (assuming n is 10): 124213481Sgiacomo.travaglini@arm.com// 124313481Sgiacomo.travaglini@arm.com// Value of: Blah("a") 124413481Sgiacomo.travaglini@arm.com// Expected: has absolute value 10 124513481Sgiacomo.travaglini@arm.com// Actual: -9 124613481Sgiacomo.travaglini@arm.com// 124713481Sgiacomo.travaglini@arm.com// Note that both the matcher description and its parameter are 124813481Sgiacomo.travaglini@arm.com// printed, making the message human-friendly. 124913481Sgiacomo.travaglini@arm.com// 125013481Sgiacomo.travaglini@arm.com// In the matcher definition body, you can write 'foo_type' to 125113481Sgiacomo.travaglini@arm.com// reference the type of a parameter named 'foo'. For example, in the 125213481Sgiacomo.travaglini@arm.com// body of MATCHER_P(HasAbsoluteValue, value) above, you can write 125313481Sgiacomo.travaglini@arm.com// 'value_type' to refer to the type of 'value'. 125413481Sgiacomo.travaglini@arm.com// 125513481Sgiacomo.travaglini@arm.com// We also provide MATCHER_P2, MATCHER_P3, ..., up to MATCHER_P10 to 125613481Sgiacomo.travaglini@arm.com// support multi-parameter matchers. 125713481Sgiacomo.travaglini@arm.com// 125813481Sgiacomo.travaglini@arm.com// Describing Parameterized Matchers 125913481Sgiacomo.travaglini@arm.com// ================================= 126013481Sgiacomo.travaglini@arm.com// 126113481Sgiacomo.travaglini@arm.com// The last argument to MATCHER*() is a string-typed expression. The 126213481Sgiacomo.travaglini@arm.com// expression can reference all of the matcher's parameters and a 126313481Sgiacomo.travaglini@arm.com// special bool-typed variable named 'negation'. When 'negation' is 126413481Sgiacomo.travaglini@arm.com// false, the expression should evaluate to the matcher's description; 126513481Sgiacomo.travaglini@arm.com// otherwise it should evaluate to the description of the negation of 126613481Sgiacomo.travaglini@arm.com// the matcher. For example, 126713481Sgiacomo.travaglini@arm.com// 126813481Sgiacomo.travaglini@arm.com// using testing::PrintToString; 126913481Sgiacomo.travaglini@arm.com// 127013481Sgiacomo.travaglini@arm.com// MATCHER_P2(InClosedRange, low, hi, 127113481Sgiacomo.travaglini@arm.com// string(negation ? "is not" : "is") + " in range [" + 127213481Sgiacomo.travaglini@arm.com// PrintToString(low) + ", " + PrintToString(hi) + "]") { 127313481Sgiacomo.travaglini@arm.com// return low <= arg && arg <= hi; 127413481Sgiacomo.travaglini@arm.com// } 127513481Sgiacomo.travaglini@arm.com// ... 127613481Sgiacomo.travaglini@arm.com// EXPECT_THAT(3, InClosedRange(4, 6)); 127713481Sgiacomo.travaglini@arm.com// EXPECT_THAT(3, Not(InClosedRange(2, 4))); 127813481Sgiacomo.travaglini@arm.com// 127913481Sgiacomo.travaglini@arm.com// would generate two failures that contain the text: 128013481Sgiacomo.travaglini@arm.com// 128113481Sgiacomo.travaglini@arm.com// Expected: is in range [4, 6] 128213481Sgiacomo.travaglini@arm.com// ... 128313481Sgiacomo.travaglini@arm.com// Expected: is not in range [2, 4] 128413481Sgiacomo.travaglini@arm.com// 128513481Sgiacomo.travaglini@arm.com// If you specify "" as the description, the failure message will 128613481Sgiacomo.travaglini@arm.com// contain the sequence of words in the matcher name followed by the 128713481Sgiacomo.travaglini@arm.com// parameter values printed as a tuple. For example, 128813481Sgiacomo.travaglini@arm.com// 128913481Sgiacomo.travaglini@arm.com// MATCHER_P2(InClosedRange, low, hi, "") { ... } 129013481Sgiacomo.travaglini@arm.com// ... 129113481Sgiacomo.travaglini@arm.com// EXPECT_THAT(3, InClosedRange(4, 6)); 129213481Sgiacomo.travaglini@arm.com// EXPECT_THAT(3, Not(InClosedRange(2, 4))); 129313481Sgiacomo.travaglini@arm.com// 129413481Sgiacomo.travaglini@arm.com// would generate two failures that contain the text: 129513481Sgiacomo.travaglini@arm.com// 129613481Sgiacomo.travaglini@arm.com// Expected: in closed range (4, 6) 129713481Sgiacomo.travaglini@arm.com// ... 129813481Sgiacomo.travaglini@arm.com// Expected: not (in closed range (2, 4)) 129913481Sgiacomo.travaglini@arm.com// 130013481Sgiacomo.travaglini@arm.com// Types of Matcher Parameters 130113481Sgiacomo.travaglini@arm.com// =========================== 130213481Sgiacomo.travaglini@arm.com// 130313481Sgiacomo.travaglini@arm.com// For the purpose of typing, you can view 130413481Sgiacomo.travaglini@arm.com// 130513481Sgiacomo.travaglini@arm.com// MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... } 130613481Sgiacomo.travaglini@arm.com// 130713481Sgiacomo.travaglini@arm.com// as shorthand for 130813481Sgiacomo.travaglini@arm.com// 130913481Sgiacomo.travaglini@arm.com// template <typename p1_type, ..., typename pk_type> 131013481Sgiacomo.travaglini@arm.com// FooMatcherPk<p1_type, ..., pk_type> 131113481Sgiacomo.travaglini@arm.com// Foo(p1_type p1, ..., pk_type pk) { ... } 131213481Sgiacomo.travaglini@arm.com// 131313481Sgiacomo.travaglini@arm.com// When you write Foo(v1, ..., vk), the compiler infers the types of 131413481Sgiacomo.travaglini@arm.com// the parameters v1, ..., and vk for you. If you are not happy with 131513481Sgiacomo.travaglini@arm.com// the result of the type inference, you can specify the types by 131613481Sgiacomo.travaglini@arm.com// explicitly instantiating the template, as in Foo<long, bool>(5, 131713481Sgiacomo.travaglini@arm.com// false). As said earlier, you don't get to (or need to) specify 131813481Sgiacomo.travaglini@arm.com// 'arg_type' as that's determined by the context in which the matcher 131913481Sgiacomo.travaglini@arm.com// is used. You can assign the result of expression Foo(p1, ..., pk) 132013481Sgiacomo.travaglini@arm.com// to a variable of type FooMatcherPk<p1_type, ..., pk_type>. This 132113481Sgiacomo.travaglini@arm.com// can be useful when composing matchers. 132213481Sgiacomo.travaglini@arm.com// 132313481Sgiacomo.travaglini@arm.com// While you can instantiate a matcher template with reference types, 132413481Sgiacomo.travaglini@arm.com// passing the parameters by pointer usually makes your code more 132513481Sgiacomo.travaglini@arm.com// readable. If, however, you still want to pass a parameter by 132613481Sgiacomo.travaglini@arm.com// reference, be aware that in the failure message generated by the 132713481Sgiacomo.travaglini@arm.com// matcher you will see the value of the referenced object but not its 132813481Sgiacomo.travaglini@arm.com// address. 132913481Sgiacomo.travaglini@arm.com// 133013481Sgiacomo.travaglini@arm.com// Explaining Match Results 133113481Sgiacomo.travaglini@arm.com// ======================== 133213481Sgiacomo.travaglini@arm.com// 133313481Sgiacomo.travaglini@arm.com// Sometimes the matcher description alone isn't enough to explain why 133413481Sgiacomo.travaglini@arm.com// the match has failed or succeeded. For example, when expecting a 133513481Sgiacomo.travaglini@arm.com// long string, it can be very helpful to also print the diff between 133613481Sgiacomo.travaglini@arm.com// the expected string and the actual one. To achieve that, you can 133713481Sgiacomo.travaglini@arm.com// optionally stream additional information to a special variable 133813481Sgiacomo.travaglini@arm.com// named result_listener, whose type is a pointer to class 133913481Sgiacomo.travaglini@arm.com// MatchResultListener: 134013481Sgiacomo.travaglini@arm.com// 134113481Sgiacomo.travaglini@arm.com// MATCHER_P(EqualsLongString, str, "") { 134213481Sgiacomo.travaglini@arm.com// if (arg == str) return true; 134313481Sgiacomo.travaglini@arm.com// 134413481Sgiacomo.travaglini@arm.com// *result_listener << "the difference: " 134513481Sgiacomo.travaglini@arm.com/// << DiffStrings(str, arg); 134613481Sgiacomo.travaglini@arm.com// return false; 134713481Sgiacomo.travaglini@arm.com// } 134813481Sgiacomo.travaglini@arm.com// 134913481Sgiacomo.travaglini@arm.com// Overloading Matchers 135013481Sgiacomo.travaglini@arm.com// ==================== 135113481Sgiacomo.travaglini@arm.com// 135213481Sgiacomo.travaglini@arm.com// You can overload matchers with different numbers of parameters: 135313481Sgiacomo.travaglini@arm.com// 135413481Sgiacomo.travaglini@arm.com// MATCHER_P(Blah, a, description_string1) { ... } 135513481Sgiacomo.travaglini@arm.com// MATCHER_P2(Blah, a, b, description_string2) { ... } 135613481Sgiacomo.travaglini@arm.com// 135713481Sgiacomo.travaglini@arm.com// Caveats 135813481Sgiacomo.travaglini@arm.com// ======= 135913481Sgiacomo.travaglini@arm.com// 136013481Sgiacomo.travaglini@arm.com// When defining a new matcher, you should also consider implementing 136113481Sgiacomo.travaglini@arm.com// MatcherInterface or using MakePolymorphicMatcher(). These 136213481Sgiacomo.travaglini@arm.com// approaches require more work than the MATCHER* macros, but also 136313481Sgiacomo.travaglini@arm.com// give you more control on the types of the value being matched and 136413481Sgiacomo.travaglini@arm.com// the matcher parameters, which may leads to better compiler error 136513481Sgiacomo.travaglini@arm.com// messages when the matcher is used wrong. They also allow 136613481Sgiacomo.travaglini@arm.com// overloading matchers based on parameter types (as opposed to just 136713481Sgiacomo.travaglini@arm.com// based on the number of parameters). 136813481Sgiacomo.travaglini@arm.com// 136913481Sgiacomo.travaglini@arm.com// MATCHER*() can only be used in a namespace scope. The reason is 137013481Sgiacomo.travaglini@arm.com// that C++ doesn't yet allow function-local types to be used to 137113481Sgiacomo.travaglini@arm.com// instantiate templates. The up-coming C++0x standard will fix this. 137213481Sgiacomo.travaglini@arm.com// Once that's done, we'll consider supporting using MATCHER*() inside 137313481Sgiacomo.travaglini@arm.com// a function. 137413481Sgiacomo.travaglini@arm.com// 137513481Sgiacomo.travaglini@arm.com// More Information 137613481Sgiacomo.travaglini@arm.com// ================ 137713481Sgiacomo.travaglini@arm.com// 137813481Sgiacomo.travaglini@arm.com// To learn more about using these macros, please search for 'MATCHER' 137913481Sgiacomo.travaglini@arm.com// on http://code.google.com/p/googlemock/wiki/CookBook. 138013481Sgiacomo.travaglini@arm.com 138113481Sgiacomo.travaglini@arm.com#define MATCHER(name, description)\ 138213481Sgiacomo.travaglini@arm.com class name##Matcher {\ 138313481Sgiacomo.travaglini@arm.com public:\ 138413481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 138513481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 138613481Sgiacomo.travaglini@arm.com public:\ 138713481Sgiacomo.travaglini@arm.com gmock_Impl()\ 138813481Sgiacomo.travaglini@arm.com {}\ 138913481Sgiacomo.travaglini@arm.com virtual bool MatchAndExplain(\ 139013481Sgiacomo.travaglini@arm.com arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 139113481Sgiacomo.travaglini@arm.com virtual void DescribeTo(::std::ostream* gmock_os) const {\ 139213481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(false);\ 139313481Sgiacomo.travaglini@arm.com }\ 139413481Sgiacomo.travaglini@arm.com virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 139513481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(true);\ 139613481Sgiacomo.travaglini@arm.com }\ 139713481Sgiacomo.travaglini@arm.com private:\ 139813481Sgiacomo.travaglini@arm.com ::testing::internal::string FormatDescription(bool negation) const {\ 139913481Sgiacomo.travaglini@arm.com const ::testing::internal::string gmock_description = (description);\ 140013481Sgiacomo.travaglini@arm.com if (!gmock_description.empty())\ 140113481Sgiacomo.travaglini@arm.com return gmock_description;\ 140213481Sgiacomo.travaglini@arm.com return ::testing::internal::FormatMatcherDescription(\ 140313481Sgiacomo.travaglini@arm.com negation, #name, \ 140413481Sgiacomo.travaglini@arm.com ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 140513481Sgiacomo.travaglini@arm.com ::testing::tuple<>()));\ 140613481Sgiacomo.travaglini@arm.com }\ 140713481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 140813481Sgiacomo.travaglini@arm.com };\ 140913481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 141013481Sgiacomo.travaglini@arm.com operator ::testing::Matcher<arg_type>() const {\ 141113481Sgiacomo.travaglini@arm.com return ::testing::Matcher<arg_type>(\ 141213481Sgiacomo.travaglini@arm.com new gmock_Impl<arg_type>());\ 141313481Sgiacomo.travaglini@arm.com }\ 141413481Sgiacomo.travaglini@arm.com name##Matcher() {\ 141513481Sgiacomo.travaglini@arm.com }\ 141613481Sgiacomo.travaglini@arm.com private:\ 141713481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##Matcher);\ 141813481Sgiacomo.travaglini@arm.com };\ 141913481Sgiacomo.travaglini@arm.com inline name##Matcher name() {\ 142013481Sgiacomo.travaglini@arm.com return name##Matcher();\ 142113481Sgiacomo.travaglini@arm.com }\ 142213481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 142313481Sgiacomo.travaglini@arm.com bool name##Matcher::gmock_Impl<arg_type>::MatchAndExplain(\ 142413481Sgiacomo.travaglini@arm.com arg_type arg, \ 142513481Sgiacomo.travaglini@arm.com ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 142613481Sgiacomo.travaglini@arm.com const 142713481Sgiacomo.travaglini@arm.com 142813481Sgiacomo.travaglini@arm.com#define MATCHER_P(name, p0, description)\ 142913481Sgiacomo.travaglini@arm.com template <typename p0##_type>\ 143013481Sgiacomo.travaglini@arm.com class name##MatcherP {\ 143113481Sgiacomo.travaglini@arm.com public:\ 143213481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 143313481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 143413481Sgiacomo.travaglini@arm.com public:\ 143513481Sgiacomo.travaglini@arm.com explicit gmock_Impl(p0##_type gmock_p0)\ 143613481Sgiacomo.travaglini@arm.com : p0(gmock_p0) {}\ 143713481Sgiacomo.travaglini@arm.com virtual bool MatchAndExplain(\ 143813481Sgiacomo.travaglini@arm.com arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 143913481Sgiacomo.travaglini@arm.com virtual void DescribeTo(::std::ostream* gmock_os) const {\ 144013481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(false);\ 144113481Sgiacomo.travaglini@arm.com }\ 144213481Sgiacomo.travaglini@arm.com virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 144313481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(true);\ 144413481Sgiacomo.travaglini@arm.com }\ 144513481Sgiacomo.travaglini@arm.com p0##_type p0;\ 144613481Sgiacomo.travaglini@arm.com private:\ 144713481Sgiacomo.travaglini@arm.com ::testing::internal::string FormatDescription(bool negation) const {\ 144813481Sgiacomo.travaglini@arm.com const ::testing::internal::string gmock_description = (description);\ 144913481Sgiacomo.travaglini@arm.com if (!gmock_description.empty())\ 145013481Sgiacomo.travaglini@arm.com return gmock_description;\ 145113481Sgiacomo.travaglini@arm.com return ::testing::internal::FormatMatcherDescription(\ 145213481Sgiacomo.travaglini@arm.com negation, #name, \ 145313481Sgiacomo.travaglini@arm.com ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 145413481Sgiacomo.travaglini@arm.com ::testing::tuple<p0##_type>(p0)));\ 145513481Sgiacomo.travaglini@arm.com }\ 145613481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 145713481Sgiacomo.travaglini@arm.com };\ 145813481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 145913481Sgiacomo.travaglini@arm.com operator ::testing::Matcher<arg_type>() const {\ 146013481Sgiacomo.travaglini@arm.com return ::testing::Matcher<arg_type>(\ 146113481Sgiacomo.travaglini@arm.com new gmock_Impl<arg_type>(p0));\ 146213481Sgiacomo.travaglini@arm.com }\ 146313481Sgiacomo.travaglini@arm.com explicit name##MatcherP(p0##_type gmock_p0) : p0(gmock_p0) {\ 146413481Sgiacomo.travaglini@arm.com }\ 146513481Sgiacomo.travaglini@arm.com p0##_type p0;\ 146613481Sgiacomo.travaglini@arm.com private:\ 146713481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##MatcherP);\ 146813481Sgiacomo.travaglini@arm.com };\ 146913481Sgiacomo.travaglini@arm.com template <typename p0##_type>\ 147013481Sgiacomo.travaglini@arm.com inline name##MatcherP<p0##_type> name(p0##_type p0) {\ 147113481Sgiacomo.travaglini@arm.com return name##MatcherP<p0##_type>(p0);\ 147213481Sgiacomo.travaglini@arm.com }\ 147313481Sgiacomo.travaglini@arm.com template <typename p0##_type>\ 147413481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 147513481Sgiacomo.travaglini@arm.com bool name##MatcherP<p0##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 147613481Sgiacomo.travaglini@arm.com arg_type arg, \ 147713481Sgiacomo.travaglini@arm.com ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 147813481Sgiacomo.travaglini@arm.com const 147913481Sgiacomo.travaglini@arm.com 148013481Sgiacomo.travaglini@arm.com#define MATCHER_P2(name, p0, p1, description)\ 148113481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type>\ 148213481Sgiacomo.travaglini@arm.com class name##MatcherP2 {\ 148313481Sgiacomo.travaglini@arm.com public:\ 148413481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 148513481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 148613481Sgiacomo.travaglini@arm.com public:\ 148713481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1)\ 148813481Sgiacomo.travaglini@arm.com : p0(gmock_p0), p1(gmock_p1) {}\ 148913481Sgiacomo.travaglini@arm.com virtual bool MatchAndExplain(\ 149013481Sgiacomo.travaglini@arm.com arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 149113481Sgiacomo.travaglini@arm.com virtual void DescribeTo(::std::ostream* gmock_os) const {\ 149213481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(false);\ 149313481Sgiacomo.travaglini@arm.com }\ 149413481Sgiacomo.travaglini@arm.com virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 149513481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(true);\ 149613481Sgiacomo.travaglini@arm.com }\ 149713481Sgiacomo.travaglini@arm.com p0##_type p0;\ 149813481Sgiacomo.travaglini@arm.com p1##_type p1;\ 149913481Sgiacomo.travaglini@arm.com private:\ 150013481Sgiacomo.travaglini@arm.com ::testing::internal::string FormatDescription(bool negation) const {\ 150113481Sgiacomo.travaglini@arm.com const ::testing::internal::string gmock_description = (description);\ 150213481Sgiacomo.travaglini@arm.com if (!gmock_description.empty())\ 150313481Sgiacomo.travaglini@arm.com return gmock_description;\ 150413481Sgiacomo.travaglini@arm.com return ::testing::internal::FormatMatcherDescription(\ 150513481Sgiacomo.travaglini@arm.com negation, #name, \ 150613481Sgiacomo.travaglini@arm.com ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 150713481Sgiacomo.travaglini@arm.com ::testing::tuple<p0##_type, p1##_type>(p0, p1)));\ 150813481Sgiacomo.travaglini@arm.com }\ 150913481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 151013481Sgiacomo.travaglini@arm.com };\ 151113481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 151213481Sgiacomo.travaglini@arm.com operator ::testing::Matcher<arg_type>() const {\ 151313481Sgiacomo.travaglini@arm.com return ::testing::Matcher<arg_type>(\ 151413481Sgiacomo.travaglini@arm.com new gmock_Impl<arg_type>(p0, p1));\ 151513481Sgiacomo.travaglini@arm.com }\ 151613481Sgiacomo.travaglini@arm.com name##MatcherP2(p0##_type gmock_p0, p1##_type gmock_p1) : p0(gmock_p0), \ 151713481Sgiacomo.travaglini@arm.com p1(gmock_p1) {\ 151813481Sgiacomo.travaglini@arm.com }\ 151913481Sgiacomo.travaglini@arm.com p0##_type p0;\ 152013481Sgiacomo.travaglini@arm.com p1##_type p1;\ 152113481Sgiacomo.travaglini@arm.com private:\ 152213481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##MatcherP2);\ 152313481Sgiacomo.travaglini@arm.com };\ 152413481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type>\ 152513481Sgiacomo.travaglini@arm.com inline name##MatcherP2<p0##_type, p1##_type> name(p0##_type p0, \ 152613481Sgiacomo.travaglini@arm.com p1##_type p1) {\ 152713481Sgiacomo.travaglini@arm.com return name##MatcherP2<p0##_type, p1##_type>(p0, p1);\ 152813481Sgiacomo.travaglini@arm.com }\ 152913481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type>\ 153013481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 153113481Sgiacomo.travaglini@arm.com bool name##MatcherP2<p0##_type, \ 153213481Sgiacomo.travaglini@arm.com p1##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 153313481Sgiacomo.travaglini@arm.com arg_type arg, \ 153413481Sgiacomo.travaglini@arm.com ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 153513481Sgiacomo.travaglini@arm.com const 153613481Sgiacomo.travaglini@arm.com 153713481Sgiacomo.travaglini@arm.com#define MATCHER_P3(name, p0, p1, p2, description)\ 153813481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type>\ 153913481Sgiacomo.travaglini@arm.com class name##MatcherP3 {\ 154013481Sgiacomo.travaglini@arm.com public:\ 154113481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 154213481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 154313481Sgiacomo.travaglini@arm.com public:\ 154413481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2)\ 154513481Sgiacomo.travaglini@arm.com : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2) {}\ 154613481Sgiacomo.travaglini@arm.com virtual bool MatchAndExplain(\ 154713481Sgiacomo.travaglini@arm.com arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 154813481Sgiacomo.travaglini@arm.com virtual void DescribeTo(::std::ostream* gmock_os) const {\ 154913481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(false);\ 155013481Sgiacomo.travaglini@arm.com }\ 155113481Sgiacomo.travaglini@arm.com virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 155213481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(true);\ 155313481Sgiacomo.travaglini@arm.com }\ 155413481Sgiacomo.travaglini@arm.com p0##_type p0;\ 155513481Sgiacomo.travaglini@arm.com p1##_type p1;\ 155613481Sgiacomo.travaglini@arm.com p2##_type p2;\ 155713481Sgiacomo.travaglini@arm.com private:\ 155813481Sgiacomo.travaglini@arm.com ::testing::internal::string FormatDescription(bool negation) const {\ 155913481Sgiacomo.travaglini@arm.com const ::testing::internal::string gmock_description = (description);\ 156013481Sgiacomo.travaglini@arm.com if (!gmock_description.empty())\ 156113481Sgiacomo.travaglini@arm.com return gmock_description;\ 156213481Sgiacomo.travaglini@arm.com return ::testing::internal::FormatMatcherDescription(\ 156313481Sgiacomo.travaglini@arm.com negation, #name, \ 156413481Sgiacomo.travaglini@arm.com ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 156513481Sgiacomo.travaglini@arm.com ::testing::tuple<p0##_type, p1##_type, p2##_type>(p0, p1, \ 156613481Sgiacomo.travaglini@arm.com p2)));\ 156713481Sgiacomo.travaglini@arm.com }\ 156813481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 156913481Sgiacomo.travaglini@arm.com };\ 157013481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 157113481Sgiacomo.travaglini@arm.com operator ::testing::Matcher<arg_type>() const {\ 157213481Sgiacomo.travaglini@arm.com return ::testing::Matcher<arg_type>(\ 157313481Sgiacomo.travaglini@arm.com new gmock_Impl<arg_type>(p0, p1, p2));\ 157413481Sgiacomo.travaglini@arm.com }\ 157513481Sgiacomo.travaglini@arm.com name##MatcherP3(p0##_type gmock_p0, p1##_type gmock_p1, \ 157613481Sgiacomo.travaglini@arm.com p2##_type gmock_p2) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2) {\ 157713481Sgiacomo.travaglini@arm.com }\ 157813481Sgiacomo.travaglini@arm.com p0##_type p0;\ 157913481Sgiacomo.travaglini@arm.com p1##_type p1;\ 158013481Sgiacomo.travaglini@arm.com p2##_type p2;\ 158113481Sgiacomo.travaglini@arm.com private:\ 158213481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##MatcherP3);\ 158313481Sgiacomo.travaglini@arm.com };\ 158413481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type>\ 158513481Sgiacomo.travaglini@arm.com inline name##MatcherP3<p0##_type, p1##_type, p2##_type> name(p0##_type p0, \ 158613481Sgiacomo.travaglini@arm.com p1##_type p1, p2##_type p2) {\ 158713481Sgiacomo.travaglini@arm.com return name##MatcherP3<p0##_type, p1##_type, p2##_type>(p0, p1, p2);\ 158813481Sgiacomo.travaglini@arm.com }\ 158913481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type>\ 159013481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 159113481Sgiacomo.travaglini@arm.com bool name##MatcherP3<p0##_type, p1##_type, \ 159213481Sgiacomo.travaglini@arm.com p2##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 159313481Sgiacomo.travaglini@arm.com arg_type arg, \ 159413481Sgiacomo.travaglini@arm.com ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 159513481Sgiacomo.travaglini@arm.com const 159613481Sgiacomo.travaglini@arm.com 159713481Sgiacomo.travaglini@arm.com#define MATCHER_P4(name, p0, p1, p2, p3, description)\ 159813481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 159913481Sgiacomo.travaglini@arm.com typename p3##_type>\ 160013481Sgiacomo.travaglini@arm.com class name##MatcherP4 {\ 160113481Sgiacomo.travaglini@arm.com public:\ 160213481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 160313481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 160413481Sgiacomo.travaglini@arm.com public:\ 160513481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 160613481Sgiacomo.travaglini@arm.com p3##_type gmock_p3)\ 160713481Sgiacomo.travaglini@arm.com : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3) {}\ 160813481Sgiacomo.travaglini@arm.com virtual bool MatchAndExplain(\ 160913481Sgiacomo.travaglini@arm.com arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 161013481Sgiacomo.travaglini@arm.com virtual void DescribeTo(::std::ostream* gmock_os) const {\ 161113481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(false);\ 161213481Sgiacomo.travaglini@arm.com }\ 161313481Sgiacomo.travaglini@arm.com virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 161413481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(true);\ 161513481Sgiacomo.travaglini@arm.com }\ 161613481Sgiacomo.travaglini@arm.com p0##_type p0;\ 161713481Sgiacomo.travaglini@arm.com p1##_type p1;\ 161813481Sgiacomo.travaglini@arm.com p2##_type p2;\ 161913481Sgiacomo.travaglini@arm.com p3##_type p3;\ 162013481Sgiacomo.travaglini@arm.com private:\ 162113481Sgiacomo.travaglini@arm.com ::testing::internal::string FormatDescription(bool negation) const {\ 162213481Sgiacomo.travaglini@arm.com const ::testing::internal::string gmock_description = (description);\ 162313481Sgiacomo.travaglini@arm.com if (!gmock_description.empty())\ 162413481Sgiacomo.travaglini@arm.com return gmock_description;\ 162513481Sgiacomo.travaglini@arm.com return ::testing::internal::FormatMatcherDescription(\ 162613481Sgiacomo.travaglini@arm.com negation, #name, \ 162713481Sgiacomo.travaglini@arm.com ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 162813481Sgiacomo.travaglini@arm.com ::testing::tuple<p0##_type, p1##_type, p2##_type, \ 162913481Sgiacomo.travaglini@arm.com p3##_type>(p0, p1, p2, p3)));\ 163013481Sgiacomo.travaglini@arm.com }\ 163113481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 163213481Sgiacomo.travaglini@arm.com };\ 163313481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 163413481Sgiacomo.travaglini@arm.com operator ::testing::Matcher<arg_type>() const {\ 163513481Sgiacomo.travaglini@arm.com return ::testing::Matcher<arg_type>(\ 163613481Sgiacomo.travaglini@arm.com new gmock_Impl<arg_type>(p0, p1, p2, p3));\ 163713481Sgiacomo.travaglini@arm.com }\ 163813481Sgiacomo.travaglini@arm.com name##MatcherP4(p0##_type gmock_p0, p1##_type gmock_p1, \ 163913481Sgiacomo.travaglini@arm.com p2##_type gmock_p2, p3##_type gmock_p3) : p0(gmock_p0), p1(gmock_p1), \ 164013481Sgiacomo.travaglini@arm.com p2(gmock_p2), p3(gmock_p3) {\ 164113481Sgiacomo.travaglini@arm.com }\ 164213481Sgiacomo.travaglini@arm.com p0##_type p0;\ 164313481Sgiacomo.travaglini@arm.com p1##_type p1;\ 164413481Sgiacomo.travaglini@arm.com p2##_type p2;\ 164513481Sgiacomo.travaglini@arm.com p3##_type p3;\ 164613481Sgiacomo.travaglini@arm.com private:\ 164713481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##MatcherP4);\ 164813481Sgiacomo.travaglini@arm.com };\ 164913481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 165013481Sgiacomo.travaglini@arm.com typename p3##_type>\ 165113481Sgiacomo.travaglini@arm.com inline name##MatcherP4<p0##_type, p1##_type, p2##_type, \ 165213481Sgiacomo.travaglini@arm.com p3##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \ 165313481Sgiacomo.travaglini@arm.com p3##_type p3) {\ 165413481Sgiacomo.travaglini@arm.com return name##MatcherP4<p0##_type, p1##_type, p2##_type, p3##_type>(p0, \ 165513481Sgiacomo.travaglini@arm.com p1, p2, p3);\ 165613481Sgiacomo.travaglini@arm.com }\ 165713481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 165813481Sgiacomo.travaglini@arm.com typename p3##_type>\ 165913481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 166013481Sgiacomo.travaglini@arm.com bool name##MatcherP4<p0##_type, p1##_type, p2##_type, \ 166113481Sgiacomo.travaglini@arm.com p3##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 166213481Sgiacomo.travaglini@arm.com arg_type arg, \ 166313481Sgiacomo.travaglini@arm.com ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 166413481Sgiacomo.travaglini@arm.com const 166513481Sgiacomo.travaglini@arm.com 166613481Sgiacomo.travaglini@arm.com#define MATCHER_P5(name, p0, p1, p2, p3, p4, description)\ 166713481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 166813481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type>\ 166913481Sgiacomo.travaglini@arm.com class name##MatcherP5 {\ 167013481Sgiacomo.travaglini@arm.com public:\ 167113481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 167213481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 167313481Sgiacomo.travaglini@arm.com public:\ 167413481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 167513481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4)\ 167613481Sgiacomo.travaglini@arm.com : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \ 167713481Sgiacomo.travaglini@arm.com p4(gmock_p4) {}\ 167813481Sgiacomo.travaglini@arm.com virtual bool MatchAndExplain(\ 167913481Sgiacomo.travaglini@arm.com arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 168013481Sgiacomo.travaglini@arm.com virtual void DescribeTo(::std::ostream* gmock_os) const {\ 168113481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(false);\ 168213481Sgiacomo.travaglini@arm.com }\ 168313481Sgiacomo.travaglini@arm.com virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 168413481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(true);\ 168513481Sgiacomo.travaglini@arm.com }\ 168613481Sgiacomo.travaglini@arm.com p0##_type p0;\ 168713481Sgiacomo.travaglini@arm.com p1##_type p1;\ 168813481Sgiacomo.travaglini@arm.com p2##_type p2;\ 168913481Sgiacomo.travaglini@arm.com p3##_type p3;\ 169013481Sgiacomo.travaglini@arm.com p4##_type p4;\ 169113481Sgiacomo.travaglini@arm.com private:\ 169213481Sgiacomo.travaglini@arm.com ::testing::internal::string FormatDescription(bool negation) const {\ 169313481Sgiacomo.travaglini@arm.com const ::testing::internal::string gmock_description = (description);\ 169413481Sgiacomo.travaglini@arm.com if (!gmock_description.empty())\ 169513481Sgiacomo.travaglini@arm.com return gmock_description;\ 169613481Sgiacomo.travaglini@arm.com return ::testing::internal::FormatMatcherDescription(\ 169713481Sgiacomo.travaglini@arm.com negation, #name, \ 169813481Sgiacomo.travaglini@arm.com ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 169913481Sgiacomo.travaglini@arm.com ::testing::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 170013481Sgiacomo.travaglini@arm.com p4##_type>(p0, p1, p2, p3, p4)));\ 170113481Sgiacomo.travaglini@arm.com }\ 170213481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 170313481Sgiacomo.travaglini@arm.com };\ 170413481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 170513481Sgiacomo.travaglini@arm.com operator ::testing::Matcher<arg_type>() const {\ 170613481Sgiacomo.travaglini@arm.com return ::testing::Matcher<arg_type>(\ 170713481Sgiacomo.travaglini@arm.com new gmock_Impl<arg_type>(p0, p1, p2, p3, p4));\ 170813481Sgiacomo.travaglini@arm.com }\ 170913481Sgiacomo.travaglini@arm.com name##MatcherP5(p0##_type gmock_p0, p1##_type gmock_p1, \ 171013481Sgiacomo.travaglini@arm.com p2##_type gmock_p2, p3##_type gmock_p3, \ 171113481Sgiacomo.travaglini@arm.com p4##_type gmock_p4) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 171213481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4) {\ 171313481Sgiacomo.travaglini@arm.com }\ 171413481Sgiacomo.travaglini@arm.com p0##_type p0;\ 171513481Sgiacomo.travaglini@arm.com p1##_type p1;\ 171613481Sgiacomo.travaglini@arm.com p2##_type p2;\ 171713481Sgiacomo.travaglini@arm.com p3##_type p3;\ 171813481Sgiacomo.travaglini@arm.com p4##_type p4;\ 171913481Sgiacomo.travaglini@arm.com private:\ 172013481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##MatcherP5);\ 172113481Sgiacomo.travaglini@arm.com };\ 172213481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 172313481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type>\ 172413481Sgiacomo.travaglini@arm.com inline name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 172513481Sgiacomo.travaglini@arm.com p4##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 172613481Sgiacomo.travaglini@arm.com p4##_type p4) {\ 172713481Sgiacomo.travaglini@arm.com return name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 172813481Sgiacomo.travaglini@arm.com p4##_type>(p0, p1, p2, p3, p4);\ 172913481Sgiacomo.travaglini@arm.com }\ 173013481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 173113481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type>\ 173213481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 173313481Sgiacomo.travaglini@arm.com bool name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 173413481Sgiacomo.travaglini@arm.com p4##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 173513481Sgiacomo.travaglini@arm.com arg_type arg, \ 173613481Sgiacomo.travaglini@arm.com ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 173713481Sgiacomo.travaglini@arm.com const 173813481Sgiacomo.travaglini@arm.com 173913481Sgiacomo.travaglini@arm.com#define MATCHER_P6(name, p0, p1, p2, p3, p4, p5, description)\ 174013481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 174113481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type>\ 174213481Sgiacomo.travaglini@arm.com class name##MatcherP6 {\ 174313481Sgiacomo.travaglini@arm.com public:\ 174413481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 174513481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 174613481Sgiacomo.travaglini@arm.com public:\ 174713481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 174813481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5)\ 174913481Sgiacomo.travaglini@arm.com : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \ 175013481Sgiacomo.travaglini@arm.com p4(gmock_p4), p5(gmock_p5) {}\ 175113481Sgiacomo.travaglini@arm.com virtual bool MatchAndExplain(\ 175213481Sgiacomo.travaglini@arm.com arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 175313481Sgiacomo.travaglini@arm.com virtual void DescribeTo(::std::ostream* gmock_os) const {\ 175413481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(false);\ 175513481Sgiacomo.travaglini@arm.com }\ 175613481Sgiacomo.travaglini@arm.com virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 175713481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(true);\ 175813481Sgiacomo.travaglini@arm.com }\ 175913481Sgiacomo.travaglini@arm.com p0##_type p0;\ 176013481Sgiacomo.travaglini@arm.com p1##_type p1;\ 176113481Sgiacomo.travaglini@arm.com p2##_type p2;\ 176213481Sgiacomo.travaglini@arm.com p3##_type p3;\ 176313481Sgiacomo.travaglini@arm.com p4##_type p4;\ 176413481Sgiacomo.travaglini@arm.com p5##_type p5;\ 176513481Sgiacomo.travaglini@arm.com private:\ 176613481Sgiacomo.travaglini@arm.com ::testing::internal::string FormatDescription(bool negation) const {\ 176713481Sgiacomo.travaglini@arm.com const ::testing::internal::string gmock_description = (description);\ 176813481Sgiacomo.travaglini@arm.com if (!gmock_description.empty())\ 176913481Sgiacomo.travaglini@arm.com return gmock_description;\ 177013481Sgiacomo.travaglini@arm.com return ::testing::internal::FormatMatcherDescription(\ 177113481Sgiacomo.travaglini@arm.com negation, #name, \ 177213481Sgiacomo.travaglini@arm.com ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 177313481Sgiacomo.travaglini@arm.com ::testing::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 177413481Sgiacomo.travaglini@arm.com p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5)));\ 177513481Sgiacomo.travaglini@arm.com }\ 177613481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 177713481Sgiacomo.travaglini@arm.com };\ 177813481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 177913481Sgiacomo.travaglini@arm.com operator ::testing::Matcher<arg_type>() const {\ 178013481Sgiacomo.travaglini@arm.com return ::testing::Matcher<arg_type>(\ 178113481Sgiacomo.travaglini@arm.com new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5));\ 178213481Sgiacomo.travaglini@arm.com }\ 178313481Sgiacomo.travaglini@arm.com name##MatcherP6(p0##_type gmock_p0, p1##_type gmock_p1, \ 178413481Sgiacomo.travaglini@arm.com p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 178513481Sgiacomo.travaglini@arm.com p5##_type gmock_p5) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 178613481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4), p5(gmock_p5) {\ 178713481Sgiacomo.travaglini@arm.com }\ 178813481Sgiacomo.travaglini@arm.com p0##_type p0;\ 178913481Sgiacomo.travaglini@arm.com p1##_type p1;\ 179013481Sgiacomo.travaglini@arm.com p2##_type p2;\ 179113481Sgiacomo.travaglini@arm.com p3##_type p3;\ 179213481Sgiacomo.travaglini@arm.com p4##_type p4;\ 179313481Sgiacomo.travaglini@arm.com p5##_type p5;\ 179413481Sgiacomo.travaglini@arm.com private:\ 179513481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##MatcherP6);\ 179613481Sgiacomo.travaglini@arm.com };\ 179713481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 179813481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type>\ 179913481Sgiacomo.travaglini@arm.com inline name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, \ 180013481Sgiacomo.travaglini@arm.com p4##_type, p5##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \ 180113481Sgiacomo.travaglini@arm.com p3##_type p3, p4##_type p4, p5##_type p5) {\ 180213481Sgiacomo.travaglini@arm.com return name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, \ 180313481Sgiacomo.travaglini@arm.com p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5);\ 180413481Sgiacomo.travaglini@arm.com }\ 180513481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 180613481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type>\ 180713481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 180813481Sgiacomo.travaglini@arm.com bool name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 180913481Sgiacomo.travaglini@arm.com p5##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 181013481Sgiacomo.travaglini@arm.com arg_type arg, \ 181113481Sgiacomo.travaglini@arm.com ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 181213481Sgiacomo.travaglini@arm.com const 181313481Sgiacomo.travaglini@arm.com 181413481Sgiacomo.travaglini@arm.com#define MATCHER_P7(name, p0, p1, p2, p3, p4, p5, p6, description)\ 181513481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 181613481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 181713481Sgiacomo.travaglini@arm.com typename p6##_type>\ 181813481Sgiacomo.travaglini@arm.com class name##MatcherP7 {\ 181913481Sgiacomo.travaglini@arm.com public:\ 182013481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 182113481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 182213481Sgiacomo.travaglini@arm.com public:\ 182313481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 182413481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 182513481Sgiacomo.travaglini@arm.com p6##_type gmock_p6)\ 182613481Sgiacomo.travaglini@arm.com : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \ 182713481Sgiacomo.travaglini@arm.com p4(gmock_p4), p5(gmock_p5), p6(gmock_p6) {}\ 182813481Sgiacomo.travaglini@arm.com virtual bool MatchAndExplain(\ 182913481Sgiacomo.travaglini@arm.com arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 183013481Sgiacomo.travaglini@arm.com virtual void DescribeTo(::std::ostream* gmock_os) const {\ 183113481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(false);\ 183213481Sgiacomo.travaglini@arm.com }\ 183313481Sgiacomo.travaglini@arm.com virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 183413481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(true);\ 183513481Sgiacomo.travaglini@arm.com }\ 183613481Sgiacomo.travaglini@arm.com p0##_type p0;\ 183713481Sgiacomo.travaglini@arm.com p1##_type p1;\ 183813481Sgiacomo.travaglini@arm.com p2##_type p2;\ 183913481Sgiacomo.travaglini@arm.com p3##_type p3;\ 184013481Sgiacomo.travaglini@arm.com p4##_type p4;\ 184113481Sgiacomo.travaglini@arm.com p5##_type p5;\ 184213481Sgiacomo.travaglini@arm.com p6##_type p6;\ 184313481Sgiacomo.travaglini@arm.com private:\ 184413481Sgiacomo.travaglini@arm.com ::testing::internal::string FormatDescription(bool negation) const {\ 184513481Sgiacomo.travaglini@arm.com const ::testing::internal::string gmock_description = (description);\ 184613481Sgiacomo.travaglini@arm.com if (!gmock_description.empty())\ 184713481Sgiacomo.travaglini@arm.com return gmock_description;\ 184813481Sgiacomo.travaglini@arm.com return ::testing::internal::FormatMatcherDescription(\ 184913481Sgiacomo.travaglini@arm.com negation, #name, \ 185013481Sgiacomo.travaglini@arm.com ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 185113481Sgiacomo.travaglini@arm.com ::testing::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 185213481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, \ 185313481Sgiacomo.travaglini@arm.com p6)));\ 185413481Sgiacomo.travaglini@arm.com }\ 185513481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 185613481Sgiacomo.travaglini@arm.com };\ 185713481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 185813481Sgiacomo.travaglini@arm.com operator ::testing::Matcher<arg_type>() const {\ 185913481Sgiacomo.travaglini@arm.com return ::testing::Matcher<arg_type>(\ 186013481Sgiacomo.travaglini@arm.com new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6));\ 186113481Sgiacomo.travaglini@arm.com }\ 186213481Sgiacomo.travaglini@arm.com name##MatcherP7(p0##_type gmock_p0, p1##_type gmock_p1, \ 186313481Sgiacomo.travaglini@arm.com p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 186413481Sgiacomo.travaglini@arm.com p5##_type gmock_p5, p6##_type gmock_p6) : p0(gmock_p0), p1(gmock_p1), \ 186513481Sgiacomo.travaglini@arm.com p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), \ 186613481Sgiacomo.travaglini@arm.com p6(gmock_p6) {\ 186713481Sgiacomo.travaglini@arm.com }\ 186813481Sgiacomo.travaglini@arm.com p0##_type p0;\ 186913481Sgiacomo.travaglini@arm.com p1##_type p1;\ 187013481Sgiacomo.travaglini@arm.com p2##_type p2;\ 187113481Sgiacomo.travaglini@arm.com p3##_type p3;\ 187213481Sgiacomo.travaglini@arm.com p4##_type p4;\ 187313481Sgiacomo.travaglini@arm.com p5##_type p5;\ 187413481Sgiacomo.travaglini@arm.com p6##_type p6;\ 187513481Sgiacomo.travaglini@arm.com private:\ 187613481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##MatcherP7);\ 187713481Sgiacomo.travaglini@arm.com };\ 187813481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 187913481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 188013481Sgiacomo.travaglini@arm.com typename p6##_type>\ 188113481Sgiacomo.travaglini@arm.com inline name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, \ 188213481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type> name(p0##_type p0, p1##_type p1, \ 188313481Sgiacomo.travaglini@arm.com p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ 188413481Sgiacomo.travaglini@arm.com p6##_type p6) {\ 188513481Sgiacomo.travaglini@arm.com return name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, \ 188613481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, p6);\ 188713481Sgiacomo.travaglini@arm.com }\ 188813481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 188913481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 189013481Sgiacomo.travaglini@arm.com typename p6##_type>\ 189113481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 189213481Sgiacomo.travaglini@arm.com bool name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 189313481Sgiacomo.travaglini@arm.com p5##_type, p6##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 189413481Sgiacomo.travaglini@arm.com arg_type arg, \ 189513481Sgiacomo.travaglini@arm.com ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 189613481Sgiacomo.travaglini@arm.com const 189713481Sgiacomo.travaglini@arm.com 189813481Sgiacomo.travaglini@arm.com#define MATCHER_P8(name, p0, p1, p2, p3, p4, p5, p6, p7, description)\ 189913481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 190013481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 190113481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type>\ 190213481Sgiacomo.travaglini@arm.com class name##MatcherP8 {\ 190313481Sgiacomo.travaglini@arm.com public:\ 190413481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 190513481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 190613481Sgiacomo.travaglini@arm.com public:\ 190713481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 190813481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 190913481Sgiacomo.travaglini@arm.com p6##_type gmock_p6, p7##_type gmock_p7)\ 191013481Sgiacomo.travaglini@arm.com : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \ 191113481Sgiacomo.travaglini@arm.com p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7) {}\ 191213481Sgiacomo.travaglini@arm.com virtual bool MatchAndExplain(\ 191313481Sgiacomo.travaglini@arm.com arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 191413481Sgiacomo.travaglini@arm.com virtual void DescribeTo(::std::ostream* gmock_os) const {\ 191513481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(false);\ 191613481Sgiacomo.travaglini@arm.com }\ 191713481Sgiacomo.travaglini@arm.com virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 191813481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(true);\ 191913481Sgiacomo.travaglini@arm.com }\ 192013481Sgiacomo.travaglini@arm.com p0##_type p0;\ 192113481Sgiacomo.travaglini@arm.com p1##_type p1;\ 192213481Sgiacomo.travaglini@arm.com p2##_type p2;\ 192313481Sgiacomo.travaglini@arm.com p3##_type p3;\ 192413481Sgiacomo.travaglini@arm.com p4##_type p4;\ 192513481Sgiacomo.travaglini@arm.com p5##_type p5;\ 192613481Sgiacomo.travaglini@arm.com p6##_type p6;\ 192713481Sgiacomo.travaglini@arm.com p7##_type p7;\ 192813481Sgiacomo.travaglini@arm.com private:\ 192913481Sgiacomo.travaglini@arm.com ::testing::internal::string FormatDescription(bool negation) const {\ 193013481Sgiacomo.travaglini@arm.com const ::testing::internal::string gmock_description = (description);\ 193113481Sgiacomo.travaglini@arm.com if (!gmock_description.empty())\ 193213481Sgiacomo.travaglini@arm.com return gmock_description;\ 193313481Sgiacomo.travaglini@arm.com return ::testing::internal::FormatMatcherDescription(\ 193413481Sgiacomo.travaglini@arm.com negation, #name, \ 193513481Sgiacomo.travaglini@arm.com ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 193613481Sgiacomo.travaglini@arm.com ::testing::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 193713481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, \ 193813481Sgiacomo.travaglini@arm.com p3, p4, p5, p6, p7)));\ 193913481Sgiacomo.travaglini@arm.com }\ 194013481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 194113481Sgiacomo.travaglini@arm.com };\ 194213481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 194313481Sgiacomo.travaglini@arm.com operator ::testing::Matcher<arg_type>() const {\ 194413481Sgiacomo.travaglini@arm.com return ::testing::Matcher<arg_type>(\ 194513481Sgiacomo.travaglini@arm.com new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6, p7));\ 194613481Sgiacomo.travaglini@arm.com }\ 194713481Sgiacomo.travaglini@arm.com name##MatcherP8(p0##_type gmock_p0, p1##_type gmock_p1, \ 194813481Sgiacomo.travaglini@arm.com p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 194913481Sgiacomo.travaglini@arm.com p5##_type gmock_p5, p6##_type gmock_p6, \ 195013481Sgiacomo.travaglini@arm.com p7##_type gmock_p7) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 195113481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ 195213481Sgiacomo.travaglini@arm.com p7(gmock_p7) {\ 195313481Sgiacomo.travaglini@arm.com }\ 195413481Sgiacomo.travaglini@arm.com p0##_type p0;\ 195513481Sgiacomo.travaglini@arm.com p1##_type p1;\ 195613481Sgiacomo.travaglini@arm.com p2##_type p2;\ 195713481Sgiacomo.travaglini@arm.com p3##_type p3;\ 195813481Sgiacomo.travaglini@arm.com p4##_type p4;\ 195913481Sgiacomo.travaglini@arm.com p5##_type p5;\ 196013481Sgiacomo.travaglini@arm.com p6##_type p6;\ 196113481Sgiacomo.travaglini@arm.com p7##_type p7;\ 196213481Sgiacomo.travaglini@arm.com private:\ 196313481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##MatcherP8);\ 196413481Sgiacomo.travaglini@arm.com };\ 196513481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 196613481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 196713481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type>\ 196813481Sgiacomo.travaglini@arm.com inline name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, \ 196913481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type> name(p0##_type p0, \ 197013481Sgiacomo.travaglini@arm.com p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ 197113481Sgiacomo.travaglini@arm.com p6##_type p6, p7##_type p7) {\ 197213481Sgiacomo.travaglini@arm.com return name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, \ 197313481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, p3, p4, p5, \ 197413481Sgiacomo.travaglini@arm.com p6, p7);\ 197513481Sgiacomo.travaglini@arm.com }\ 197613481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 197713481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 197813481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type>\ 197913481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 198013481Sgiacomo.travaglini@arm.com bool name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 198113481Sgiacomo.travaglini@arm.com p5##_type, p6##_type, \ 198213481Sgiacomo.travaglini@arm.com p7##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 198313481Sgiacomo.travaglini@arm.com arg_type arg, \ 198413481Sgiacomo.travaglini@arm.com ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 198513481Sgiacomo.travaglini@arm.com const 198613481Sgiacomo.travaglini@arm.com 198713481Sgiacomo.travaglini@arm.com#define MATCHER_P9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, description)\ 198813481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 198913481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 199013481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type, typename p8##_type>\ 199113481Sgiacomo.travaglini@arm.com class name##MatcherP9 {\ 199213481Sgiacomo.travaglini@arm.com public:\ 199313481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 199413481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 199513481Sgiacomo.travaglini@arm.com public:\ 199613481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 199713481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 199813481Sgiacomo.travaglini@arm.com p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8)\ 199913481Sgiacomo.travaglini@arm.com : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \ 200013481Sgiacomo.travaglini@arm.com p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \ 200113481Sgiacomo.travaglini@arm.com p8(gmock_p8) {}\ 200213481Sgiacomo.travaglini@arm.com virtual bool MatchAndExplain(\ 200313481Sgiacomo.travaglini@arm.com arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 200413481Sgiacomo.travaglini@arm.com virtual void DescribeTo(::std::ostream* gmock_os) const {\ 200513481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(false);\ 200613481Sgiacomo.travaglini@arm.com }\ 200713481Sgiacomo.travaglini@arm.com virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 200813481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(true);\ 200913481Sgiacomo.travaglini@arm.com }\ 201013481Sgiacomo.travaglini@arm.com p0##_type p0;\ 201113481Sgiacomo.travaglini@arm.com p1##_type p1;\ 201213481Sgiacomo.travaglini@arm.com p2##_type p2;\ 201313481Sgiacomo.travaglini@arm.com p3##_type p3;\ 201413481Sgiacomo.travaglini@arm.com p4##_type p4;\ 201513481Sgiacomo.travaglini@arm.com p5##_type p5;\ 201613481Sgiacomo.travaglini@arm.com p6##_type p6;\ 201713481Sgiacomo.travaglini@arm.com p7##_type p7;\ 201813481Sgiacomo.travaglini@arm.com p8##_type p8;\ 201913481Sgiacomo.travaglini@arm.com private:\ 202013481Sgiacomo.travaglini@arm.com ::testing::internal::string FormatDescription(bool negation) const {\ 202113481Sgiacomo.travaglini@arm.com const ::testing::internal::string gmock_description = (description);\ 202213481Sgiacomo.travaglini@arm.com if (!gmock_description.empty())\ 202313481Sgiacomo.travaglini@arm.com return gmock_description;\ 202413481Sgiacomo.travaglini@arm.com return ::testing::internal::FormatMatcherDescription(\ 202513481Sgiacomo.travaglini@arm.com negation, #name, \ 202613481Sgiacomo.travaglini@arm.com ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 202713481Sgiacomo.travaglini@arm.com ::testing::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 202813481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type, \ 202913481Sgiacomo.travaglini@arm.com p8##_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8)));\ 203013481Sgiacomo.travaglini@arm.com }\ 203113481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 203213481Sgiacomo.travaglini@arm.com };\ 203313481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 203413481Sgiacomo.travaglini@arm.com operator ::testing::Matcher<arg_type>() const {\ 203513481Sgiacomo.travaglini@arm.com return ::testing::Matcher<arg_type>(\ 203613481Sgiacomo.travaglini@arm.com new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8));\ 203713481Sgiacomo.travaglini@arm.com }\ 203813481Sgiacomo.travaglini@arm.com name##MatcherP9(p0##_type gmock_p0, p1##_type gmock_p1, \ 203913481Sgiacomo.travaglini@arm.com p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 204013481Sgiacomo.travaglini@arm.com p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ 204113481Sgiacomo.travaglini@arm.com p8##_type gmock_p8) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 204213481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \ 204313481Sgiacomo.travaglini@arm.com p8(gmock_p8) {\ 204413481Sgiacomo.travaglini@arm.com }\ 204513481Sgiacomo.travaglini@arm.com p0##_type p0;\ 204613481Sgiacomo.travaglini@arm.com p1##_type p1;\ 204713481Sgiacomo.travaglini@arm.com p2##_type p2;\ 204813481Sgiacomo.travaglini@arm.com p3##_type p3;\ 204913481Sgiacomo.travaglini@arm.com p4##_type p4;\ 205013481Sgiacomo.travaglini@arm.com p5##_type p5;\ 205113481Sgiacomo.travaglini@arm.com p6##_type p6;\ 205213481Sgiacomo.travaglini@arm.com p7##_type p7;\ 205313481Sgiacomo.travaglini@arm.com p8##_type p8;\ 205413481Sgiacomo.travaglini@arm.com private:\ 205513481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##MatcherP9);\ 205613481Sgiacomo.travaglini@arm.com };\ 205713481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 205813481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 205913481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type, typename p8##_type>\ 206013481Sgiacomo.travaglini@arm.com inline name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, \ 206113481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type, \ 206213481Sgiacomo.travaglini@arm.com p8##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 206313481Sgiacomo.travaglini@arm.com p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, \ 206413481Sgiacomo.travaglini@arm.com p8##_type p8) {\ 206513481Sgiacomo.travaglini@arm.com return name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, \ 206613481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type, p8##_type>(p0, p1, p2, \ 206713481Sgiacomo.travaglini@arm.com p3, p4, p5, p6, p7, p8);\ 206813481Sgiacomo.travaglini@arm.com }\ 206913481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 207013481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 207113481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type, typename p8##_type>\ 207213481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 207313481Sgiacomo.travaglini@arm.com bool name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 207413481Sgiacomo.travaglini@arm.com p5##_type, p6##_type, p7##_type, \ 207513481Sgiacomo.travaglini@arm.com p8##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 207613481Sgiacomo.travaglini@arm.com arg_type arg, \ 207713481Sgiacomo.travaglini@arm.com ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 207813481Sgiacomo.travaglini@arm.com const 207913481Sgiacomo.travaglini@arm.com 208013481Sgiacomo.travaglini@arm.com#define MATCHER_P10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, description)\ 208113481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 208213481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 208313481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type, typename p8##_type, \ 208413481Sgiacomo.travaglini@arm.com typename p9##_type>\ 208513481Sgiacomo.travaglini@arm.com class name##MatcherP10 {\ 208613481Sgiacomo.travaglini@arm.com public:\ 208713481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 208813481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 208913481Sgiacomo.travaglini@arm.com public:\ 209013481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 209113481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 209213481Sgiacomo.travaglini@arm.com p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ 209313481Sgiacomo.travaglini@arm.com p9##_type gmock_p9)\ 209413481Sgiacomo.travaglini@arm.com : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \ 209513481Sgiacomo.travaglini@arm.com p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \ 209613481Sgiacomo.travaglini@arm.com p8(gmock_p8), p9(gmock_p9) {}\ 209713481Sgiacomo.travaglini@arm.com virtual bool MatchAndExplain(\ 209813481Sgiacomo.travaglini@arm.com arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 209913481Sgiacomo.travaglini@arm.com virtual void DescribeTo(::std::ostream* gmock_os) const {\ 210013481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(false);\ 210113481Sgiacomo.travaglini@arm.com }\ 210213481Sgiacomo.travaglini@arm.com virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 210313481Sgiacomo.travaglini@arm.com *gmock_os << FormatDescription(true);\ 210413481Sgiacomo.travaglini@arm.com }\ 210513481Sgiacomo.travaglini@arm.com p0##_type p0;\ 210613481Sgiacomo.travaglini@arm.com p1##_type p1;\ 210713481Sgiacomo.travaglini@arm.com p2##_type p2;\ 210813481Sgiacomo.travaglini@arm.com p3##_type p3;\ 210913481Sgiacomo.travaglini@arm.com p4##_type p4;\ 211013481Sgiacomo.travaglini@arm.com p5##_type p5;\ 211113481Sgiacomo.travaglini@arm.com p6##_type p6;\ 211213481Sgiacomo.travaglini@arm.com p7##_type p7;\ 211313481Sgiacomo.travaglini@arm.com p8##_type p8;\ 211413481Sgiacomo.travaglini@arm.com p9##_type p9;\ 211513481Sgiacomo.travaglini@arm.com private:\ 211613481Sgiacomo.travaglini@arm.com ::testing::internal::string FormatDescription(bool negation) const {\ 211713481Sgiacomo.travaglini@arm.com const ::testing::internal::string gmock_description = (description);\ 211813481Sgiacomo.travaglini@arm.com if (!gmock_description.empty())\ 211913481Sgiacomo.travaglini@arm.com return gmock_description;\ 212013481Sgiacomo.travaglini@arm.com return ::testing::internal::FormatMatcherDescription(\ 212113481Sgiacomo.travaglini@arm.com negation, #name, \ 212213481Sgiacomo.travaglini@arm.com ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 212313481Sgiacomo.travaglini@arm.com ::testing::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 212413481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \ 212513481Sgiacomo.travaglini@arm.com p9##_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)));\ 212613481Sgiacomo.travaglini@arm.com }\ 212713481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 212813481Sgiacomo.travaglini@arm.com };\ 212913481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 213013481Sgiacomo.travaglini@arm.com operator ::testing::Matcher<arg_type>() const {\ 213113481Sgiacomo.travaglini@arm.com return ::testing::Matcher<arg_type>(\ 213213481Sgiacomo.travaglini@arm.com new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9));\ 213313481Sgiacomo.travaglini@arm.com }\ 213413481Sgiacomo.travaglini@arm.com name##MatcherP10(p0##_type gmock_p0, p1##_type gmock_p1, \ 213513481Sgiacomo.travaglini@arm.com p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 213613481Sgiacomo.travaglini@arm.com p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ 213713481Sgiacomo.travaglini@arm.com p8##_type gmock_p8, p9##_type gmock_p9) : p0(gmock_p0), p1(gmock_p1), \ 213813481Sgiacomo.travaglini@arm.com p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ 213913481Sgiacomo.travaglini@arm.com p7(gmock_p7), p8(gmock_p8), p9(gmock_p9) {\ 214013481Sgiacomo.travaglini@arm.com }\ 214113481Sgiacomo.travaglini@arm.com p0##_type p0;\ 214213481Sgiacomo.travaglini@arm.com p1##_type p1;\ 214313481Sgiacomo.travaglini@arm.com p2##_type p2;\ 214413481Sgiacomo.travaglini@arm.com p3##_type p3;\ 214513481Sgiacomo.travaglini@arm.com p4##_type p4;\ 214613481Sgiacomo.travaglini@arm.com p5##_type p5;\ 214713481Sgiacomo.travaglini@arm.com p6##_type p6;\ 214813481Sgiacomo.travaglini@arm.com p7##_type p7;\ 214913481Sgiacomo.travaglini@arm.com p8##_type p8;\ 215013481Sgiacomo.travaglini@arm.com p9##_type p9;\ 215113481Sgiacomo.travaglini@arm.com private:\ 215213481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##MatcherP10);\ 215313481Sgiacomo.travaglini@arm.com };\ 215413481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 215513481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 215613481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type, typename p8##_type, \ 215713481Sgiacomo.travaglini@arm.com typename p9##_type>\ 215813481Sgiacomo.travaglini@arm.com inline name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 215913481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \ 216013481Sgiacomo.travaglini@arm.com p9##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 216113481Sgiacomo.travaglini@arm.com p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \ 216213481Sgiacomo.travaglini@arm.com p9##_type p9) {\ 216313481Sgiacomo.travaglini@arm.com return name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 216413481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, p9##_type>(p0, \ 216513481Sgiacomo.travaglini@arm.com p1, p2, p3, p4, p5, p6, p7, p8, p9);\ 216613481Sgiacomo.travaglini@arm.com }\ 216713481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 216813481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 216913481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type, typename p8##_type, \ 217013481Sgiacomo.travaglini@arm.com typename p9##_type>\ 217113481Sgiacomo.travaglini@arm.com template <typename arg_type>\ 217213481Sgiacomo.travaglini@arm.com bool name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 217313481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \ 217413481Sgiacomo.travaglini@arm.com p9##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 217513481Sgiacomo.travaglini@arm.com arg_type arg, \ 217613481Sgiacomo.travaglini@arm.com ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 217713481Sgiacomo.travaglini@arm.com const 217813481Sgiacomo.travaglini@arm.com 217913481Sgiacomo.travaglini@arm.com#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ 2180