37 # pragma warning(push)
38 # pragma warning(disable:4100)
42 # pragma warning(disable:4800)
46 #include "gmock/gmock-actions.h"
51 #include <type_traits>
52 #include "gmock/gmock.h"
53 #include "gmock/internal/gmock-port.h"
54 #include "gtest/gtest.h"
55 #include "gtest/gtest-spi.h"
60 using ::testing::Action;
61 using ::testing::ActionInterface;
72 using ::testing::PolymorphicAction;
83 using ::testing::internal::BuiltInDefaultValue;
85 #if !GTEST_OS_WINDOWS_MOBILE
90 TEST(BuiltInDefaultValueTest, IsNullForPointerTypes) {
97 TEST(BuiltInDefaultValueTest, ExistsForPointerTypes) {
99 EXPECT_TRUE(BuiltInDefaultValue<const char*>::Exists());
105 TEST(BuiltInDefaultValueTest, IsZeroForNumericTypes) {
109 #if GMOCK_WCHAR_T_IS_NATIVE_
110 #if !defined(__WCHAR_UNSIGNED__)
134 TEST(BuiltInDefaultValueTest, ExistsForNumericTypes) {
135 EXPECT_TRUE(BuiltInDefaultValue<unsigned char>::Exists());
136 EXPECT_TRUE(BuiltInDefaultValue<signed char>::Exists());
138 #if GMOCK_WCHAR_T_IS_NATIVE_
139 EXPECT_TRUE(BuiltInDefaultValue<wchar_t>::Exists());
141 EXPECT_TRUE(BuiltInDefaultValue<unsigned short>::Exists());
142 EXPECT_TRUE(BuiltInDefaultValue<signed short>::Exists());
144 EXPECT_TRUE(BuiltInDefaultValue<unsigned int>::Exists());
145 EXPECT_TRUE(BuiltInDefaultValue<signed int>::Exists());
147 EXPECT_TRUE(BuiltInDefaultValue<unsigned long>::Exists());
148 EXPECT_TRUE(BuiltInDefaultValue<signed long>::Exists());
150 EXPECT_TRUE(BuiltInDefaultValue<unsigned long long>::Exists());
151 EXPECT_TRUE(BuiltInDefaultValue<signed long long>::Exists());
152 EXPECT_TRUE(BuiltInDefaultValue<long long>::Exists());
154 EXPECT_TRUE(BuiltInDefaultValue<double>::Exists());
158 TEST(BuiltInDefaultValueTest, IsFalseForBool) {
163 TEST(BuiltInDefaultValueTest, BoolExists) {
169 TEST(BuiltInDefaultValueTest, IsEmptyStringForString) {
175 TEST(BuiltInDefaultValueTest, ExistsForString) {
176 EXPECT_TRUE(BuiltInDefaultValue< ::std::string>::Exists());
181 TEST(BuiltInDefaultValueTest, WorksForConstTypes) {
189 class MyDefaultConstructible {
191 MyDefaultConstructible() :
value_(42) {}
200 class MyNonDefaultConstructible {
203 explicit MyNonDefaultConstructible(
int a_value) :
value_(a_value) {}
212 TEST(BuiltInDefaultValueTest, ExistsForDefaultConstructibleType) {
213 EXPECT_TRUE(BuiltInDefaultValue<MyDefaultConstructible>::Exists());
216 TEST(BuiltInDefaultValueTest, IsDefaultConstructedForDefaultConstructibleType) {
221 TEST(BuiltInDefaultValueTest, DoesNotExistForNonDefaultConstructibleType) {
222 EXPECT_FALSE(BuiltInDefaultValue<MyNonDefaultConstructible>::Exists());
226 TEST(BuiltInDefaultValueDeathTest, IsUndefinedForReferences) {
235 TEST(BuiltInDefaultValueDeathTest, IsUndefinedForNonDefaultConstructibleType) {
242 TEST(DefaultValueTest, IsInitiallyUnset) {
244 EXPECT_FALSE(DefaultValue<MyDefaultConstructible>::IsSet());
245 EXPECT_FALSE(DefaultValue<const MyNonDefaultConstructible>::IsSet());
249 TEST(DefaultValueTest, CanBeSetAndUnset) {
251 EXPECT_FALSE(DefaultValue<const MyNonDefaultConstructible>::Exists());
253 DefaultValue<int>::Set(1);
254 DefaultValue<const MyNonDefaultConstructible>::Set(
255 MyNonDefaultConstructible(42));
261 EXPECT_TRUE(DefaultValue<const MyNonDefaultConstructible>::Exists());
267 EXPECT_FALSE(DefaultValue<const MyNonDefaultConstructible>::IsSet());
270 EXPECT_FALSE(DefaultValue<const MyNonDefaultConstructible>::Exists());
276 TEST(DefaultValueDeathTest, GetReturnsBuiltInDefaultValueWhenUnset) {
279 EXPECT_FALSE(DefaultValue<MyNonDefaultConstructible>::IsSet());
280 EXPECT_FALSE(DefaultValue<MyNonDefaultConstructible>::Exists());
289 TEST(DefaultValueTest, GetWorksForMoveOnlyIfSet) {
292 DefaultValue<std::unique_ptr<int>>::SetFactory([] {
293 return std::unique_ptr<int>(
new int(42));
296 std::unique_ptr<int>
i = DefaultValue<std::unique_ptr<int>>
::Get();
301 TEST(DefaultValueTest, GetWorksForVoid) {
308 TEST(DefaultValueOfReferenceTest, IsInitiallyUnset) {
310 EXPECT_FALSE(DefaultValue<MyDefaultConstructible&>::IsSet());
311 EXPECT_FALSE(DefaultValue<MyNonDefaultConstructible&>::IsSet());
315 TEST(DefaultValueOfReferenceTest, IsInitiallyNotExisting) {
317 EXPECT_FALSE(DefaultValue<MyDefaultConstructible&>::Exists());
318 EXPECT_FALSE(DefaultValue<MyNonDefaultConstructible&>::Exists());
322 TEST(DefaultValueOfReferenceTest, CanBeSetAndUnset) {
324 DefaultValue<const int&>::Set(
n);
325 MyNonDefaultConstructible
x(42);
326 DefaultValue<MyNonDefaultConstructible&>::Set(
x);
329 EXPECT_TRUE(DefaultValue<MyNonDefaultConstructible&>::Exists());
338 EXPECT_FALSE(DefaultValue<MyNonDefaultConstructible&>::Exists());
341 EXPECT_FALSE(DefaultValue<MyNonDefaultConstructible&>::IsSet());
347 TEST(DefaultValueOfReferenceDeathTest, GetReturnsBuiltInDefaultValueWhenUnset) {
349 EXPECT_FALSE(DefaultValue<MyNonDefaultConstructible&>::IsSet());
362 typedef int MyGlobalFunction(
bool,
int);
364 class MyActionImpl :
public ActionInterface<MyGlobalFunction> {
366 int Perform(
const std::tuple<bool, int>&
args)
override {
367 return std::get<0>(
args) ? std::get<1>(
args) : 0;
371 TEST(ActionInterfaceTest, CanBeImplementedByDefiningPerform) {
372 MyActionImpl my_action_impl;
373 (void)my_action_impl;
389 TEST(ActionTest, CanBeConstructedFromActionInterface) {
390 Action<MyGlobalFunction>
action(
new MyActionImpl);
394 TEST(ActionTest, DelegatesWorkToActionInterface) {
395 const Action<MyGlobalFunction>
action(
new MyActionImpl);
402 TEST(ActionTest, IsCopyable) {
403 Action<MyGlobalFunction>
a1(
new MyActionImpl);
404 Action<MyGlobalFunction>
a2(
a1);
428 class IsNotZero :
public ActionInterface<bool(int)> {
430 bool Perform(
const std::tuple<int>&
arg)
override {
431 return std::get<0>(
arg) != 0;
435 TEST(ActionTest, CanBeConvertedToOtherActionType) {
436 const Action<
bool(
int)>
a1(
new IsNotZero);
437 const Action<
int(
char)>
a2 = Action<int(char)>(
a1);
446 class ReturnSecondArgumentAction {
451 template <
typename Result,
typename ArgumentTuple>
453 return std::get<1>(
args);
459 class ReturnZeroFromNullaryFunctionAction {
468 template <
typename Result>
469 Result Perform(
const std::tuple<>&)
const {
477 PolymorphicAction<ReturnSecondArgumentAction> ReturnSecondArgument() {
481 PolymorphicAction<ReturnZeroFromNullaryFunctionAction>
482 ReturnZeroFromNullaryFunction() {
488 TEST(MakePolymorphicActionTest, ConstructsActionFromImpl) {
489 Action<
int(
bool,
int,
double)>
a1 = ReturnSecondArgument();
495 TEST(MakePolymorphicActionTest, WorksWhenPerformHasOneTemplateParameter) {
496 Action<
int()>
a1 = ReturnZeroFromNullaryFunction();
499 Action<
void*()>
a2 = ReturnZeroFromNullaryFunction();
505 TEST(ReturnTest, WorksForVoid) {
511 TEST(ReturnTest, ReturnsGivenValue) {
520 TEST(ReturnTest, AcceptsStringLiteral) {
521 Action<
const char*()>
a1 =
Return(
"Hello");
530 struct IntegerVectorWrapper {
531 std::vector<int> *
v;
532 IntegerVectorWrapper(std::vector<int>& _v) :
v(&_v) {}
536 TEST(ReturnTest, SupportsWrapperReturnType) {
539 for (
int i = 0;
i < 5; ++
i)
v.push_back(
i);
543 Action<IntegerVectorWrapper()>
a =
Return(
v);
554 struct Derived :
public Base {
555 bool operator==(
const Derived&) {
return true; }
558 TEST(ReturnTest, IsCovariant) {
574 explicit FromType(
bool* is_converted) : converted_(is_converted) {}
575 bool* converted()
const {
return converted_; }
578 bool*
const converted_;
584 ToType(
const FromType&
x) { *
x.converted() =
true; }
587 TEST(ReturnTest, ConvertsArgumentWhenConverted) {
588 bool converted =
false;
589 FromType
x(&converted);
591 EXPECT_TRUE(converted) <<
"Return must convert its argument in its own "
592 <<
"conversion operator.";
594 action.Perform(std::tuple<>());
595 EXPECT_FALSE(converted) <<
"Action must NOT convert its argument "
596 <<
"when performed.";
599 class DestinationType {};
604 operator DestinationType() {
return DestinationType(); }
607 TEST(ReturnTest, CanConvertArgumentUsingNonConstTypeCastOperator) {
613 TEST(ReturnNullTest, WorksInPointerReturningFunction) {
623 TEST(ReturnNullTest, WorksInSmartPointerReturningFunction) {
624 const Action<std::unique_ptr<const int>()>
a1 =
ReturnNull();
632 TEST(ReturnRefTest, WorksForReference) {
640 TEST(ReturnRefTest, IsCovariant) {
650 template <typename T, typename = decltype(ReturnRef(std::declval<T&&>()))>
651 bool CanCallReturnRef(
T&&) {
return true; }
652 bool CanCallReturnRef(
Unused) {
return false; }
655 TEST(ReturnRefTest, WorksForNonTemporary) {
656 int scalar_value = 123;
662 const int const_scalar_value{321};
666 EXPECT_TRUE(CanCallReturnRef(const_non_scalar_value));
670 TEST(ReturnRefTest, DoesNotWorkForTemporary) {
671 auto scalar_value = []() ->
int {
return 123; };
674 auto non_scalar_value = []() ->
std::string {
return "ABC"; };
679 EXPECT_FALSE(CanCallReturnRef(
static_cast<const int>(321)));
681 auto const_non_scalar_value = []() ->
const std::string {
return "CBA"; };
682 EXPECT_FALSE(CanCallReturnRef(const_non_scalar_value()));
686 TEST(ReturnRefOfCopyTest, WorksForReference) {
699 TEST(ReturnRefOfCopyTest, IsCovariant) {
710 TEST(ReturnRoundRobinTest, WorksForInitList) {
722 TEST(ReturnRoundRobinTest, WorksForVector) {
723 std::vector<double>
v = {4.4, 5.5, 6.6};
744 MOCK_METHOD0(MakeVectorUnique, std::vector<std::unique_ptr<int>>());
747 int(
const std::unique_ptr<int>&, std::unique_ptr<int>));
755 TEST(DoDefaultTest, ReturnsBuiltInDefaultValueByDefault) {
764 TEST(DoDefaultDeathTest, DiesForUnknowType) {
768 #if GTEST_HAS_EXCEPTIONS
780 void VoidFunc(
bool ) {}
782 TEST(DoDefaultDeathTest, DiesIfUsedInCompositeAction) {
799 TEST(DoDefaultTest, ReturnsUserSpecifiedPerTypeDefaultValueWhenThereIsOne) {
800 DefaultValue<int>::Set(1);
809 TEST(DoDefaultTest, DoesWhatOnCallSpecifies) {
812 .WillByDefault(
Return(2));
819 TEST(DoDefaultTest, CannotBeUsedInOnCall) {
824 },
"DoDefault() cannot be used in ON_CALL()");
829 TEST(SetArgPointeeTest, SetsTheNthPointee) {
831 Action<MyFunction>
a = SetArgPointee<1>(2);
839 a = SetArgPointee<2>(
'a');
848 TEST(SetArgPointeeTest, AcceptsStringLiteral) {
850 Action<MyFunction>
a = SetArgPointee<0>(
"hi");
852 const char*
ptr =
nullptr;
857 a = SetArgPointee<1>(
"world");
864 TEST(SetArgPointeeTest, AcceptsWideStringLiteral) {
866 Action<MyFunction>
a = SetArgPointee<0>(
L"world");
867 const wchar_t*
ptr =
nullptr;
871 # if GTEST_HAS_STD_WSTRING
874 Action<MyStringFunction>
a2 = SetArgPointee<0>(
L"world");
883 TEST(SetArgPointeeTest, AcceptsCharPointer) {
885 const char*
const hi =
"hi";
886 Action<MyFunction>
a = SetArgPointee<1>(hi);
888 const char*
ptr =
nullptr;
893 char world_array[] =
"world";
894 char*
const world = world_array;
895 a = SetArgPointee<2>(world);
902 TEST(SetArgPointeeTest, AcceptsWideCharPointer) {
903 typedef void MyFunction(
bool,
const wchar_t**);
904 const wchar_t*
const hi =
L"hi";
905 Action<MyFunction>
a = SetArgPointee<1>(hi);
906 const wchar_t*
ptr =
nullptr;
910 # if GTEST_HAS_STD_WSTRING
913 wchar_t world_array[] =
L"world";
914 wchar_t*
const world = world_array;
915 Action<MyStringFunction>
a2 = SetArgPointee<1>(world);
924 TEST(SetArgumentPointeeTest, SetsTheNthPointee) {
926 Action<MyFunction>
a = SetArgumentPointee<1>(2);
934 a = SetArgumentPointee<2>(
'a');
945 class NullaryFunctor {
947 int operator()() {
return 2; }
953 class VoidNullaryFunctor {
955 void operator()() {
g_done =
true; }
958 short Short(
short n) {
return n; }
961 const char*
CharPtr(
const char* s) {
return s; }
963 bool Unary(
int x) {
return x < 0; }
1001 TEST(InvokeWithoutArgsTest, Functor) {
1007 Action<
int(
int,
double,
char)>
a2 =
1021 Action<
int(
bool,
char)>
a =
1027 TEST(IgnoreResultTest, PolymorphicAction) {
1039 TEST(IgnoreResultTest, MonomorphicAction) {
1048 MyNonDefaultConstructible ReturnMyNonDefaultConstructible(
double ) {
1050 return MyNonDefaultConstructible(42);
1053 TEST(IgnoreResultTest, ActionReturningClass) {
1055 Action<void(
int)>
a =
1063 Action<void(
int)>
a =
Assign(&
x, 5);
1068 TEST(AssignTest, String) {
1070 Action<void(
void)>
a =
Assign(&
x,
"Hello, world");
1075 TEST(AssignTest, CompatibleTypes) {
1077 Action<void(
int)>
a =
Assign(&
x, 5);
1084 TEST(WithArgsTest, OneArg) {
1091 TEST(WithArgsTest, TwoArgs) {
1092 Action<
const char*(
const char*
s,
double x,
short n)>
a =
1094 const char s[] =
"Hello";
1100 template <
typename...
I>
1102 return a + ConcatAll()(
i...);
1107 TEST(WithArgsTest, TenArgs) {
1108 Action<
std::string(
const char*,
const char*,
const char*,
const char*)>
a =
1109 WithArgs<0, 1, 2, 3, 2, 1, 0, 1, 2, 3>(
Invoke(ConcatAll{}));
1116 class SubtractAction :
public ActionInterface<int(int, int)> {
1118 int Perform(
const std::tuple<int, int>&
args)
override {
1119 return std::get<0>(
args) - std::get<1>(
args);
1123 TEST(WithArgsTest, NonInvokeAction) {
1125 WithArgs<2, 1>(
MakeAction(
new SubtractAction));
1126 std::tuple<std::string, int, int>
dummy =
1133 Action<
int(
int x,
char y,
short z)>
a =
1139 TEST(WithArgsTest, RepeatedArguments) {
1140 Action<
int(
bool,
int m,
int n)>
a =
1146 TEST(WithArgsTest, ReversedArgumentOrder) {
1147 Action<
const char*(
short n,
const char*
input)>
a =
1149 const char s[] =
"Hello";
1154 TEST(WithArgsTest, ArgsOfCompatibleTypes) {
1155 Action<
long(
short x,
char y,
double z,
char c)>
a =
1162 TEST(WithArgsTest, VoidAction) {
1169 TEST(WithArgsTest, ReturnReference) {
1170 Action<
int&(
int&,
void*)> aa = WithArgs<0>([](
int&
a) ->
int& {
return a; });
1172 const int& res = aa.Perform(std::forward_as_tuple(
i,
nullptr));
1176 TEST(WithArgsTest, InnerActionWithConversion) {
1177 Action<Derived*()> inner = [] {
return nullptr; };
1182 #if !GTEST_OS_WINDOWS_MOBILE
1186 void SetUp()
override { errno = 0; }
1187 void TearDown()
override { errno = 0; }
1196 TEST_F(SetErrnoAndReturnTest, Ptr) {
1203 TEST_F(SetErrnoAndReturnTest, CompatibleTypes) {
1209 #endif // !GTEST_OS_WINDOWS_MOBILE
1214 TEST(ByRefTest, IsCopyable) {
1218 auto ref_wrapper =
ByRef(s1);
1223 ref_wrapper =
ByRef(s2);
1227 auto ref_wrapper1 =
ByRef(s1);
1229 ref_wrapper = ref_wrapper1;
1235 TEST(ByRefTest, ConstValue) {
1239 const int& const_ref =
ByRef(
n);
1244 TEST(ByRefTest, NonConstValue) {
1252 const int& const_ref =
ByRef(
n);
1257 TEST(ByRefTest, ExplicitType) {
1259 const int& r1 = ByRef<const int>(
n);
1266 Derived& r2 = ByRef<Derived>(
d);
1269 const Derived& r3 = ByRef<const Derived>(
d);
1272 Base& r4 = ByRef<Base>(
d);
1275 const Base& r5 = ByRef<const Base>(
d);
1286 TEST(ByRefTest, PrintsCorrectly) {
1288 ::std::stringstream expected, actual;
1291 EXPECT_EQ(expected.str(), actual.str());
1294 struct UnaryConstructorClass {
1295 explicit UnaryConstructorClass(
int v) :
value(
v) {}
1301 Action<UnaryConstructorClass*()>
a = ReturnNew<UnaryConstructorClass>(4000);
1307 TEST(ReturnNewTest, UnaryWorksWhenMockMethodHasArgs) {
1308 Action<UnaryConstructorClass*(
bool,
int)>
a =
1309 ReturnNew<UnaryConstructorClass>(4000);
1315 TEST(ReturnNewTest, UnaryWorksWhenMockMethodReturnsPointerToConst) {
1316 Action<
const UnaryConstructorClass*()>
a =
1317 ReturnNew<UnaryConstructorClass>(4000);
1323 class TenArgConstructorClass {
1325 TenArgConstructorClass(
int a1,
int a2,
int a3,
int a4,
int a5,
int a6,
int a7,
1326 int a8,
int a9,
int a10)
1327 :
value_(
a1 +
a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10) {}
1332 TEST(ReturnNewTest, ConstructorThatTakes10Arguments) {
1333 Action<TenArgConstructorClass*()>
a = ReturnNew<TenArgConstructorClass>(
1334 1000000000, 200000000, 30000000, 4000000, 500000, 60000, 7000, 800, 90,
1341 std::unique_ptr<int> UniquePtrSource() {
1342 return std::unique_ptr<int>(
new int(19));
1345 std::vector<std::unique_ptr<int>> VectorUniquePtrSource() {
1346 std::vector<std::unique_ptr<int>>
out;
1347 out.emplace_back(
new int(7));
1351 TEST(MockMethodTest, CanReturnMoveOnlyValue_Return) {
1353 std::unique_ptr<int>
i(
new int(19));
1357 Derived*
d =
new Derived;
1361 std::unique_ptr<int> result1 = mock.MakeUnique();
1364 std::vector<std::unique_ptr<int>> vresult = mock.MakeVectorUnique();
1369 std::unique_ptr<Base> result2 = mock.MakeUniqueBase();
1373 TEST(MockMethodTest, CanReturnMoveOnlyValue_DoAllReturn) {
1376 std::unique_ptr<int>
i(
new int(19));
1382 std::unique_ptr<int> result1 = mock.MakeUnique();
1386 TEST(MockMethodTest, CanReturnMoveOnlyValue_Invoke) {
1390 DefaultValue<std::unique_ptr<int>>::SetFactory([] {
1391 return std::unique_ptr<int>(
new int(42));
1397 .WillRepeatedly(
Invoke(VectorUniquePtrSource));
1398 std::unique_ptr<int> result1 = mock.MakeUnique();
1400 std::unique_ptr<int> result2 = mock.MakeUnique();
1404 std::vector<std::unique_ptr<int>> vresult = mock.MakeVectorUnique();
1410 TEST(MockMethodTest, CanTakeMoveOnlyValue) {
1412 auto make = [](
int i) {
return std::unique_ptr<int>(
new int(
i)); };
1414 EXPECT_CALL(mock, TakeUnique(
_)).WillRepeatedly([](std::unique_ptr<int>
i) {
1423 .RetiresOnSaturation();
1426 .RetiresOnSaturation();
1429 EXPECT_EQ(-7, mock.TakeUnique(make(7)));
1435 auto lvalue = make(6);
1437 .WillOnce([](
const std::unique_ptr<int>&
i, std::unique_ptr<int> j) {
1440 EXPECT_EQ(42, mock.TakeUnique(lvalue, make(7)));
1443 std::unique_ptr<int> saved;
1444 EXPECT_CALL(mock, TakeUnique(
_)).WillOnce([&saved](std::unique_ptr<int>
i) {
1448 EXPECT_EQ(0, mock.TakeUnique(make(42)));
1462 int Deref(std::unique_ptr<int>
ptr) {
return *
ptr; }
1465 template <
typename T>
1466 T operator()(
T t) {
return 2 *
t; }
1469 std::unique_ptr<int> UniqueInt(
int i) {
1470 return std::unique_ptr<int>(
new int(
i));
1473 TEST(FunctorActionTest, ActionFromFunction) {
1474 Action<
int(
int,
int&,
int*)>
a = &
Add;
1475 int x = 1,
y = 2,
z = 3;
1480 Action<
int(std::unique_ptr<int>)>
a1 = &Deref;
1484 TEST(FunctorActionTest, ActionFromLambda) {
1485 Action<
int(
bool,
int)>
a1 = [](
bool b,
int i) {
return b ?
i : 0; };
1489 std::unique_ptr<int> saved;
1490 Action<void(std::unique_ptr<int>)>
a2 = [&saved](std::unique_ptr<int>
p) {
1497 TEST(FunctorActionTest, PolymorphicFunctor) {
1500 Action<double(
double)> ad =
Double();
1504 TEST(FunctorActionTest, TypeConversion) {
1506 const Action<
bool(
int)>
a1 = [](
int i) {
return i > 1; };
1507 const Action<
int(
bool)>
a2 = Action<int(bool)>(
a1);
1513 const Action<
int(
const char*)> s2 = Action<int(const char*)>(s1);
1525 Action<
int(
int)>
d =
f;
1530 Action<void(int)>(
nullptr);
1533 TEST(FunctorActionTest, UnusedArguments) {
1535 Action<
int(
int,
double y,
double z)>
a =
1542 TEST(MoveOnlyArgumentsTest, ReturningActions) {
1543 Action<
int(std::unique_ptr<int>)>
a =
Return(1);
1549 Action<void(std::unique_ptr<int>,
int*)>
a2 = testing::SetArgPointee<1>(3);
1559 TEST(ActionMacro, LargeArity) {
1564 testing::Action<
int(
int,
int,
int,
int,
int,
int,
int,
int,
int,
int)>(
1569 testing::Action<
int(
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
1570 int,
int,
int,
int,
int,
int,
int,
int,
int)>(
1572 .Perform(
std::make_tuple(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
1573 14, 15, 16, 17, 18, 19)));
1579 #if _MSC_VER == 1900
1580 # pragma warning(pop)