1// This file was GENERATED by a script. DO NOT EDIT BY HAND!!! 2 3// Copyright 2008, Google Inc. 4// All rights reserved. 5// 6// Redistribution and use in source and binary forms, with or without 7// modification, are permitted provided that the following conditions are 8// met: 9// 10// * Redistributions of source code must retain the above copyright 11// notice, this list of conditions and the following disclaimer. 12// * Redistributions in binary form must reproduce the above 13// copyright notice, this list of conditions and the following disclaimer 14// in the documentation and/or other materials provided with the 15// distribution. 16// * Neither the name of Google Inc. nor the names of its 17// contributors may be used to endorse or promote products derived from 18// this software without specific prior written permission. 19// 20// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31// 32// Authors: vladl@google.com (Vlad Losev) 33// 34// Macros and functions for implementing parameterized tests 35// in Google C++ Testing Framework (Google Test) 36// 37// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! 38// 39#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ 40#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ 41 42 43// Value-parameterized tests allow you to test your code with different 44// parameters without writing multiple copies of the same test. 45// 46// Here is how you use value-parameterized tests: 47 48#if 0 49 50// To write value-parameterized tests, first you should define a fixture 51// class. It must be derived from testing::TestWithParam<T>, where T is 52// the type of your parameter values. TestWithParam<T> is itself derived 53// from testing::Test. T can be any copyable type. If it's a raw pointer, 54// you are responsible for managing the lifespan of the pointed values. 55 56class FooTest : public ::testing::TestWithParam<const char*> { 57 // You can implement all the usual class fixture members here. 58}; 59 60// Then, use the TEST_P macro to define as many parameterized tests 61// for this fixture as you want. The _P suffix is for "parameterized" 62// or "pattern", whichever you prefer to think. 63 64TEST_P(FooTest, DoesBlah) { 65 // Inside a test, access the test parameter with the GetParam() method 66 // of the TestWithParam<T> class: 67 EXPECT_TRUE(foo.Blah(GetParam())); 68 ... 69} 70 71TEST_P(FooTest, HasBlahBlah) { 72 ... 73} 74 75// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test 76// case with any set of parameters you want. Google Test defines a number 77// of functions for generating test parameters. They return what we call 78// (surprise!) parameter generators. Here is a summary of them, which 79// are all in the testing namespace: 80// 81// 82// Range(begin, end [, step]) - Yields values {begin, begin+step, 83// begin+step+step, ...}. The values do not 84// include end. step defaults to 1. 85// Values(v1, v2, ..., vN) - Yields values {v1, v2, ..., vN}. 86// ValuesIn(container) - Yields values from a C-style array, an STL 87// ValuesIn(begin,end) container, or an iterator range [begin, end). 88// Bool() - Yields sequence {false, true}. 89// Combine(g1, g2, ..., gN) - Yields all combinations (the Cartesian product 90// for the math savvy) of the values generated 91// by the N generators. 92// 93// For more details, see comments at the definitions of these functions below 94// in this file. 95// 96// The following statement will instantiate tests from the FooTest test case 97// each with parameter values "meeny", "miny", and "moe". 98 99INSTANTIATE_TEST_CASE_P(InstantiationName, 100 FooTest, 101 Values("meeny", "miny", "moe")); 102 103// To distinguish different instances of the pattern, (yes, you 104// can instantiate it more then once) the first argument to the 105// INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the 106// actual test case name. Remember to pick unique prefixes for different 107// instantiations. The tests from the instantiation above will have 108// these names: 109// 110// * InstantiationName/FooTest.DoesBlah/0 for "meeny" 111// * InstantiationName/FooTest.DoesBlah/1 for "miny" 112// * InstantiationName/FooTest.DoesBlah/2 for "moe" 113// * InstantiationName/FooTest.HasBlahBlah/0 for "meeny" 114// * InstantiationName/FooTest.HasBlahBlah/1 for "miny" 115// * InstantiationName/FooTest.HasBlahBlah/2 for "moe" 116// 117// You can use these names in --gtest_filter. 118// 119// This statement will instantiate all tests from FooTest again, each 120// with parameter values "cat" and "dog": 121 122const char* pets[] = {"cat", "dog"}; 123INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets)); 124 125// The tests from the instantiation above will have these names: 126// 127// * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat" 128// * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog" 129// * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat" 130// * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog" 131// 132// Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests 133// in the given test case, whether their definitions come before or 134// AFTER the INSTANTIATE_TEST_CASE_P statement. 135// 136// Please also note that generator expressions (including parameters to the 137// generators) are evaluated in InitGoogleTest(), after main() has started. 138// This allows the user on one hand, to adjust generator parameters in order 139// to dynamically determine a set of tests to run and on the other hand, 140// give the user a chance to inspect the generated tests with Google Test 141// reflection API before RUN_ALL_TESTS() is executed. 142// 143// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc 144// for more examples. 145// 146// In the future, we plan to publish the API for defining new parameter 147// generators. But for now this interface remains part of the internal 148// implementation and is subject to change. 149 150#endif // 0 151 152#include <gtest/internal/gtest-port.h> 153 154#if !GTEST_OS_SYMBIAN 155#include <utility> 156#endif 157 158// scripts/fuse_gtest.py depends on gtest's own header being #included 159// *unconditionally*. Therefore these #includes cannot be moved 160// inside #if GTEST_HAS_PARAM_TEST. 161#include <gtest/internal/gtest-internal.h> 162#include <gtest/internal/gtest-param-util.h> 163#include <gtest/internal/gtest-param-util-generated.h> 164 165#if GTEST_HAS_PARAM_TEST 166 167namespace testing { 168 169// Functions producing parameter generators. 170// 171// Google Test uses these generators to produce parameters for value- 172// parameterized tests. When a parameterized test case is instantiated 173// with a particular generator, Google Test creates and runs tests 174// for each element in the sequence produced by the generator. 175// 176// In the following sample, tests from test case FooTest are instantiated 177// each three times with parameter values 3, 5, and 8: 178// 179// class FooTest : public TestWithParam<int> { ... }; 180// 181// TEST_P(FooTest, TestThis) { 182// } 183// TEST_P(FooTest, TestThat) { 184// } 185// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8)); 186// 187 188// Range() returns generators providing sequences of values in a range. 189// 190// Synopsis: 191// Range(start, end) 192// - returns a generator producing a sequence of values {start, start+1, 193// start+2, ..., }. 194// Range(start, end, step) 195// - returns a generator producing a sequence of values {start, start+step, 196// start+step+step, ..., }. 197// Notes: 198// * The generated sequences never include end. For example, Range(1, 5) 199// returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2) 200// returns a generator producing {1, 3, 5, 7}. 201// * start and end must have the same type. That type may be any integral or 202// floating-point type or a user defined type satisfying these conditions: 203// * It must be assignable (have operator=() defined). 204// * It must have operator+() (operator+(int-compatible type) for 205// two-operand version). 206// * It must have operator<() defined. 207// Elements in the resulting sequences will also have that type. 208// * Condition start < end must be satisfied in order for resulting sequences 209// to contain any elements. 210// 211template <typename T, typename IncrementT> 212internal::ParamGenerator<T> Range(T start, T end, IncrementT step) { 213 return internal::ParamGenerator<T>( 214 new internal::RangeGenerator<T, IncrementT>(start, end, step)); 215} 216 217template <typename T> 218internal::ParamGenerator<T> Range(T start, T end) { 219 return Range(start, end, 1); 220} 221 222// ValuesIn() function allows generation of tests with parameters coming from 223// a container. 224// 225// Synopsis: 226// ValuesIn(const T (&array)[N]) 227// - returns a generator producing sequences with elements from 228// a C-style array. 229// ValuesIn(const Container& container) 230// - returns a generator producing sequences with elements from 231// an STL-style container. 232// ValuesIn(Iterator begin, Iterator end) 233// - returns a generator producing sequences with elements from 234// a range [begin, end) defined by a pair of STL-style iterators. These 235// iterators can also be plain C pointers. 236// 237// Please note that ValuesIn copies the values from the containers 238// passed in and keeps them to generate tests in RUN_ALL_TESTS(). 239// 240// Examples: 241// 242// This instantiates tests from test case StringTest 243// each with C-string values of "foo", "bar", and "baz": 244// 245// const char* strings[] = {"foo", "bar", "baz"}; 246// INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings)); 247// 248// This instantiates tests from test case StlStringTest 249// each with STL strings with values "a" and "b": 250// 251// ::std::vector< ::std::string> GetParameterStrings() { 252// ::std::vector< ::std::string> v; 253// v.push_back("a"); 254// v.push_back("b"); 255// return v; 256// } 257// 258// INSTANTIATE_TEST_CASE_P(CharSequence, 259// StlStringTest, 260// ValuesIn(GetParameterStrings())); 261// 262// 263// This will also instantiate tests from CharTest 264// each with parameter values 'a' and 'b': 265// 266// ::std::list<char> GetParameterChars() { 267// ::std::list<char> list; 268// list.push_back('a'); 269// list.push_back('b'); 270// return list; 271// } 272// ::std::list<char> l = GetParameterChars(); 273// INSTANTIATE_TEST_CASE_P(CharSequence2, 274// CharTest, 275// ValuesIn(l.begin(), l.end())); 276// 277template <typename ForwardIterator> 278internal::ParamGenerator< 279 typename ::std::iterator_traits<ForwardIterator>::value_type> ValuesIn( 280 ForwardIterator begin, 281 ForwardIterator end) { 282 typedef typename ::std::iterator_traits<ForwardIterator>::value_type 283 ParamType; 284 return internal::ParamGenerator<ParamType>( 285 new internal::ValuesInIteratorRangeGenerator<ParamType>(begin, end)); 286} 287 288template <typename T, size_t N> 289internal::ParamGenerator<T> ValuesIn(const T (&array)[N]) { 290 return ValuesIn(array, array + N); 291} 292 293template <class Container> 294internal::ParamGenerator<typename Container::value_type> ValuesIn( 295 const Container& container) { 296 return ValuesIn(container.begin(), container.end()); 297} 298 299// Values() allows generating tests from explicitly specified list of 300// parameters. 301// 302// Synopsis: 303// Values(T v1, T v2, ..., T vN) 304// - returns a generator producing sequences with elements v1, v2, ..., vN. 305// 306// For example, this instantiates tests from test case BarTest each 307// with values "one", "two", and "three": 308// 309// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three")); 310// 311// This instantiates tests from test case BazTest each with values 1, 2, 3.5. 312// The exact type of values will depend on the type of parameter in BazTest. 313// 314// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5)); 315// 316// Currently, Values() supports from 1 to 50 parameters. 317// 318template <typename T1> 319internal::ValueArray1<T1> Values(T1 v1) { 320 return internal::ValueArray1<T1>(v1); 321} 322 323template <typename T1, typename T2> 324internal::ValueArray2<T1, T2> Values(T1 v1, T2 v2) { 325 return internal::ValueArray2<T1, T2>(v1, v2); 326} 327 328template <typename T1, typename T2, typename T3> 329internal::ValueArray3<T1, T2, T3> Values(T1 v1, T2 v2, T3 v3) { 330 return internal::ValueArray3<T1, T2, T3>(v1, v2, v3); 331} 332 333template <typename T1, typename T2, typename T3, typename T4> 334internal::ValueArray4<T1, T2, T3, T4> Values(T1 v1, T2 v2, T3 v3, T4 v4) { 335 return internal::ValueArray4<T1, T2, T3, T4>(v1, v2, v3, v4); 336} 337 338template <typename T1, typename T2, typename T3, typename T4, typename T5> 339internal::ValueArray5<T1, T2, T3, T4, T5> Values(T1 v1, T2 v2, T3 v3, T4 v4, 340 T5 v5) { 341 return internal::ValueArray5<T1, T2, T3, T4, T5>(v1, v2, v3, v4, v5); 342} 343 344template <typename T1, typename T2, typename T3, typename T4, typename T5, 345 typename T6> 346internal::ValueArray6<T1, T2, T3, T4, T5, T6> Values(T1 v1, T2 v2, T3 v3, 347 T4 v4, T5 v5, T6 v6) { 348 return internal::ValueArray6<T1, T2, T3, T4, T5, T6>(v1, v2, v3, v4, v5, v6); 349} 350 351template <typename T1, typename T2, typename T3, typename T4, typename T5, 352 typename T6, typename T7> 353internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7> Values(T1 v1, T2 v2, T3 v3, 354 T4 v4, T5 v5, T6 v6, T7 v7) { 355 return internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7>(v1, v2, v3, v4, v5, 356 v6, v7); 357} 358 359template <typename T1, typename T2, typename T3, typename T4, typename T5, 360 typename T6, typename T7, typename T8> 361internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8> Values(T1 v1, T2 v2, 362 T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) { 363 return internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8>(v1, v2, v3, v4, 364 v5, v6, v7, v8); 365} 366 367template <typename T1, typename T2, typename T3, typename T4, typename T5, 368 typename T6, typename T7, typename T8, typename T9> 369internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9> Values(T1 v1, T2 v2, 370 T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) { 371 return internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(v1, v2, v3, 372 v4, v5, v6, v7, v8, v9); 373} 374 375template <typename T1, typename T2, typename T3, typename T4, typename T5, 376 typename T6, typename T7, typename T8, typename T9, typename T10> 377internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Values(T1 v1, 378 T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) { 379 return internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(v1, 380 v2, v3, v4, v5, v6, v7, v8, v9, v10); 381} 382 383template <typename T1, typename T2, typename T3, typename T4, typename T5, 384 typename T6, typename T7, typename T8, typename T9, typename T10, 385 typename T11> 386internal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 387 T11> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 388 T10 v10, T11 v11) { 389 return internal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 390 T11>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11); 391} 392 393template <typename T1, typename T2, typename T3, typename T4, typename T5, 394 typename T6, typename T7, typename T8, typename T9, typename T10, 395 typename T11, typename T12> 396internal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 397 T12> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 398 T10 v10, T11 v11, T12 v12) { 399 return internal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 400 T12>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12); 401} 402 403template <typename T1, typename T2, typename T3, typename T4, typename T5, 404 typename T6, typename T7, typename T8, typename T9, typename T10, 405 typename T11, typename T12, typename T13> 406internal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, 407 T13> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 408 T10 v10, T11 v11, T12 v12, T13 v13) { 409 return internal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 410 T12, T13>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13); 411} 412 413template <typename T1, typename T2, typename T3, typename T4, typename T5, 414 typename T6, typename T7, typename T8, typename T9, typename T10, 415 typename T11, typename T12, typename T13, typename T14> 416internal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 417 T14> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 418 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) { 419 return internal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 420 T12, T13, T14>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, 421 v14); 422} 423 424template <typename T1, typename T2, typename T3, typename T4, typename T5, 425 typename T6, typename T7, typename T8, typename T9, typename T10, 426 typename T11, typename T12, typename T13, typename T14, typename T15> 427internal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 428 T14, T15> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, 429 T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) { 430 return internal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 431 T12, T13, T14, T15>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, 432 v13, v14, v15); 433} 434 435template <typename T1, typename T2, typename T3, typename T4, typename T5, 436 typename T6, typename T7, typename T8, typename T9, typename T10, 437 typename T11, typename T12, typename T13, typename T14, typename T15, 438 typename T16> 439internal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 440 T14, T15, T16> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, 441 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 442 T16 v16) { 443 return internal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 444 T12, T13, T14, T15, T16>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, 445 v12, v13, v14, v15, v16); 446} 447 448template <typename T1, typename T2, typename T3, typename T4, typename T5, 449 typename T6, typename T7, typename T8, typename T9, typename T10, 450 typename T11, typename T12, typename T13, typename T14, typename T15, 451 typename T16, typename T17> 452internal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 453 T14, T15, T16, T17> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, 454 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 455 T16 v16, T17 v17) { 456 return internal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 457 T12, T13, T14, T15, T16, T17>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, 458 v11, v12, v13, v14, v15, v16, v17); 459} 460 461template <typename T1, typename T2, typename T3, typename T4, typename T5, 462 typename T6, typename T7, typename T8, typename T9, typename T10, 463 typename T11, typename T12, typename T13, typename T14, typename T15, 464 typename T16, typename T17, typename T18> 465internal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 466 T14, T15, T16, T17, T18> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, 467 T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 468 T16 v16, T17 v17, T18 v18) { 469 return internal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 470 T12, T13, T14, T15, T16, T17, T18>(v1, v2, v3, v4, v5, v6, v7, v8, v9, 471 v10, v11, v12, v13, v14, v15, v16, v17, v18); 472} 473 474template <typename T1, typename T2, typename T3, typename T4, typename T5, 475 typename T6, typename T7, typename T8, typename T9, typename T10, 476 typename T11, typename T12, typename T13, typename T14, typename T15, 477 typename T16, typename T17, typename T18, typename T19> 478internal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 479 T14, T15, T16, T17, T18, T19> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, 480 T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, 481 T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) { 482 return internal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 483 T12, T13, T14, T15, T16, T17, T18, T19>(v1, v2, v3, v4, v5, v6, v7, v8, 484 v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19); 485} 486 487template <typename T1, typename T2, typename T3, typename T4, typename T5, 488 typename T6, typename T7, typename T8, typename T9, typename T10, 489 typename T11, typename T12, typename T13, typename T14, typename T15, 490 typename T16, typename T17, typename T18, typename T19, typename T20> 491internal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 492 T14, T15, T16, T17, T18, T19, T20> Values(T1 v1, T2 v2, T3 v3, T4 v4, 493 T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, 494 T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) { 495 return internal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 496 T12, T13, T14, T15, T16, T17, T18, T19, T20>(v1, v2, v3, v4, v5, v6, v7, 497 v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20); 498} 499 500template <typename T1, typename T2, typename T3, typename T4, typename T5, 501 typename T6, typename T7, typename T8, typename T9, typename T10, 502 typename T11, typename T12, typename T13, typename T14, typename T15, 503 typename T16, typename T17, typename T18, typename T19, typename T20, 504 typename T21> 505internal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 506 T14, T15, T16, T17, T18, T19, T20, T21> Values(T1 v1, T2 v2, T3 v3, T4 v4, 507 T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, 508 T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) { 509 return internal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 510 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>(v1, v2, v3, v4, v5, v6, 511 v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21); 512} 513 514template <typename T1, typename T2, typename T3, typename T4, typename T5, 515 typename T6, typename T7, typename T8, typename T9, typename T10, 516 typename T11, typename T12, typename T13, typename T14, typename T15, 517 typename T16, typename T17, typename T18, typename T19, typename T20, 518 typename T21, typename T22> 519internal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 520 T14, T15, T16, T17, T18, T19, T20, T21, T22> Values(T1 v1, T2 v2, T3 v3, 521 T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, 522 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, 523 T21 v21, T22 v22) { 524 return internal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 525 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>(v1, v2, v3, v4, 526 v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, 527 v20, v21, v22); 528} 529 530template <typename T1, typename T2, typename T3, typename T4, typename T5, 531 typename T6, typename T7, typename T8, typename T9, typename T10, 532 typename T11, typename T12, typename T13, typename T14, typename T15, 533 typename T16, typename T17, typename T18, typename T19, typename T20, 534 typename T21, typename T22, typename T23> 535internal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 536 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> Values(T1 v1, T2 v2, 537 T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, 538 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, 539 T21 v21, T22 v22, T23 v23) { 540 return internal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 541 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23>(v1, v2, v3, 542 v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, 543 v20, v21, v22, v23); 544} 545 546template <typename T1, typename T2, typename T3, typename T4, typename T5, 547 typename T6, typename T7, typename T8, typename T9, typename T10, 548 typename T11, typename T12, typename T13, typename T14, typename T15, 549 typename T16, typename T17, typename T18, typename T19, typename T20, 550 typename T21, typename T22, typename T23, typename T24> 551internal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 552 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Values(T1 v1, T2 v2, 553 T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, 554 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, 555 T21 v21, T22 v22, T23 v23, T24 v24) { 556 return internal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 557 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24>(v1, v2, 558 v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, 559 v19, v20, v21, v22, v23, v24); 560} 561 562template <typename T1, typename T2, typename T3, typename T4, typename T5, 563 typename T6, typename T7, typename T8, typename T9, typename T10, 564 typename T11, typename T12, typename T13, typename T14, typename T15, 565 typename T16, typename T17, typename T18, typename T19, typename T20, 566 typename T21, typename T22, typename T23, typename T24, typename T25> 567internal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 568 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Values(T1 v1, 569 T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, 570 T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, 571 T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) { 572 return internal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 573 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25>(v1, 574 v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, 575 v18, v19, v20, v21, v22, v23, v24, v25); 576} 577 578template <typename T1, typename T2, typename T3, typename T4, typename T5, 579 typename T6, typename T7, typename T8, typename T9, typename T10, 580 typename T11, typename T12, typename T13, typename T14, typename T15, 581 typename T16, typename T17, typename T18, typename T19, typename T20, 582 typename T21, typename T22, typename T23, typename T24, typename T25, 583 typename T26> 584internal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 585 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 586 T26> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 587 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 588 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 589 T26 v26) { 590 return internal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 591 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 592 T26>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, 593 v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26); 594} 595 596template <typename T1, typename T2, typename T3, typename T4, typename T5, 597 typename T6, typename T7, typename T8, typename T9, typename T10, 598 typename T11, typename T12, typename T13, typename T14, typename T15, 599 typename T16, typename T17, typename T18, typename T19, typename T20, 600 typename T21, typename T22, typename T23, typename T24, typename T25, 601 typename T26, typename T27> 602internal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 603 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, 604 T27> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 605 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 606 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 607 T26 v26, T27 v27) { 608 return internal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 609 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 610 T26, T27>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, 611 v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27); 612} 613 614template <typename T1, typename T2, typename T3, typename T4, typename T5, 615 typename T6, typename T7, typename T8, typename T9, typename T10, 616 typename T11, typename T12, typename T13, typename T14, typename T15, 617 typename T16, typename T17, typename T18, typename T19, typename T20, 618 typename T21, typename T22, typename T23, typename T24, typename T25, 619 typename T26, typename T27, typename T28> 620internal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 621 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, 622 T28> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 623 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 624 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 625 T26 v26, T27 v27, T28 v28) { 626 return internal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 627 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 628 T26, T27, T28>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, 629 v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, 630 v28); 631} 632 633template <typename T1, typename T2, typename T3, typename T4, typename T5, 634 typename T6, typename T7, typename T8, typename T9, typename T10, 635 typename T11, typename T12, typename T13, typename T14, typename T15, 636 typename T16, typename T17, typename T18, typename T19, typename T20, 637 typename T21, typename T22, typename T23, typename T24, typename T25, 638 typename T26, typename T27, typename T28, typename T29> 639internal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 640 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 641 T29> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 642 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 643 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 644 T26 v26, T27 v27, T28 v28, T29 v29) { 645 return internal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 646 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 647 T26, T27, T28, T29>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, 648 v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, 649 v27, v28, v29); 650} 651 652template <typename T1, typename T2, typename T3, typename T4, typename T5, 653 typename T6, typename T7, typename T8, typename T9, typename T10, 654 typename T11, typename T12, typename T13, typename T14, typename T15, 655 typename T16, typename T17, typename T18, typename T19, typename T20, 656 typename T21, typename T22, typename T23, typename T24, typename T25, 657 typename T26, typename T27, typename T28, typename T29, typename T30> 658internal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 659 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 660 T29, T30> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, 661 T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, 662 T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, 663 T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) { 664 return internal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 665 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 666 T26, T27, T28, T29, T30>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, 667 v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, 668 v26, v27, v28, v29, v30); 669} 670 671template <typename T1, typename T2, typename T3, typename T4, typename T5, 672 typename T6, typename T7, typename T8, typename T9, typename T10, 673 typename T11, typename T12, typename T13, typename T14, typename T15, 674 typename T16, typename T17, typename T18, typename T19, typename T20, 675 typename T21, typename T22, typename T23, typename T24, typename T25, 676 typename T26, typename T27, typename T28, typename T29, typename T30, 677 typename T31> 678internal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 679 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 680 T29, T30, T31> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, 681 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 682 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, 683 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) { 684 return internal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 685 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 686 T26, T27, T28, T29, T30, T31>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, 687 v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, 688 v25, v26, v27, v28, v29, v30, v31); 689} 690 691template <typename T1, typename T2, typename T3, typename T4, typename T5, 692 typename T6, typename T7, typename T8, typename T9, typename T10, 693 typename T11, typename T12, typename T13, typename T14, typename T15, 694 typename T16, typename T17, typename T18, typename T19, typename T20, 695 typename T21, typename T22, typename T23, typename T24, typename T25, 696 typename T26, typename T27, typename T28, typename T29, typename T30, 697 typename T31, typename T32> 698internal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 699 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 700 T29, T30, T31, T32> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, 701 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 702 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, 703 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, 704 T32 v32) { 705 return internal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 706 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 707 T26, T27, T28, T29, T30, T31, T32>(v1, v2, v3, v4, v5, v6, v7, v8, v9, 708 v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, 709 v24, v25, v26, v27, v28, v29, v30, v31, v32); 710} 711 712template <typename T1, typename T2, typename T3, typename T4, typename T5, 713 typename T6, typename T7, typename T8, typename T9, typename T10, 714 typename T11, typename T12, typename T13, typename T14, typename T15, 715 typename T16, typename T17, typename T18, typename T19, typename T20, 716 typename T21, typename T22, typename T23, typename T24, typename T25, 717 typename T26, typename T27, typename T28, typename T29, typename T30, 718 typename T31, typename T32, typename T33> 719internal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 720 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 721 T29, T30, T31, T32, T33> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, 722 T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 723 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, 724 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, 725 T32 v32, T33 v33) { 726 return internal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 727 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 728 T26, T27, T28, T29, T30, T31, T32, T33>(v1, v2, v3, v4, v5, v6, v7, v8, 729 v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, 730 v24, v25, v26, v27, v28, v29, v30, v31, v32, v33); 731} 732 733template <typename T1, typename T2, typename T3, typename T4, typename T5, 734 typename T6, typename T7, typename T8, typename T9, typename T10, 735 typename T11, typename T12, typename T13, typename T14, typename T15, 736 typename T16, typename T17, typename T18, typename T19, typename T20, 737 typename T21, typename T22, typename T23, typename T24, typename T25, 738 typename T26, typename T27, typename T28, typename T29, typename T30, 739 typename T31, typename T32, typename T33, typename T34> 740internal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 741 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 742 T29, T30, T31, T32, T33, T34> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, 743 T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, 744 T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, 745 T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, 746 T31 v31, T32 v32, T33 v33, T34 v34) { 747 return internal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 748 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 749 T26, T27, T28, T29, T30, T31, T32, T33, T34>(v1, v2, v3, v4, v5, v6, v7, 750 v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, 751 v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34); 752} 753 754template <typename T1, typename T2, typename T3, typename T4, typename T5, 755 typename T6, typename T7, typename T8, typename T9, typename T10, 756 typename T11, typename T12, typename T13, typename T14, typename T15, 757 typename T16, typename T17, typename T18, typename T19, typename T20, 758 typename T21, typename T22, typename T23, typename T24, typename T25, 759 typename T26, typename T27, typename T28, typename T29, typename T30, 760 typename T31, typename T32, typename T33, typename T34, typename T35> 761internal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 762 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 763 T29, T30, T31, T32, T33, T34, T35> Values(T1 v1, T2 v2, T3 v3, T4 v4, 764 T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, 765 T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, 766 T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, 767 T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) { 768 return internal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 769 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 770 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35>(v1, v2, v3, v4, v5, v6, 771 v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, 772 v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35); 773} 774 775template <typename T1, typename T2, typename T3, typename T4, typename T5, 776 typename T6, typename T7, typename T8, typename T9, typename T10, 777 typename T11, typename T12, typename T13, typename T14, typename T15, 778 typename T16, typename T17, typename T18, typename T19, typename T20, 779 typename T21, typename T22, typename T23, typename T24, typename T25, 780 typename T26, typename T27, typename T28, typename T29, typename T30, 781 typename T31, typename T32, typename T33, typename T34, typename T35, 782 typename T36> 783internal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 784 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 785 T29, T30, T31, T32, T33, T34, T35, T36> Values(T1 v1, T2 v2, T3 v3, T4 v4, 786 T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, 787 T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, 788 T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, 789 T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) { 790 return internal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 791 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 792 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36>(v1, v2, v3, v4, 793 v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, 794 v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, 795 v34, v35, v36); 796} 797 798template <typename T1, typename T2, typename T3, typename T4, typename T5, 799 typename T6, typename T7, typename T8, typename T9, typename T10, 800 typename T11, typename T12, typename T13, typename T14, typename T15, 801 typename T16, typename T17, typename T18, typename T19, typename T20, 802 typename T21, typename T22, typename T23, typename T24, typename T25, 803 typename T26, typename T27, typename T28, typename T29, typename T30, 804 typename T31, typename T32, typename T33, typename T34, typename T35, 805 typename T36, typename T37> 806internal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 807 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 808 T29, T30, T31, T32, T33, T34, T35, T36, T37> Values(T1 v1, T2 v2, T3 v3, 809 T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, 810 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, 811 T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, 812 T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, 813 T37 v37) { 814 return internal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 815 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 816 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37>(v1, v2, v3, 817 v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, 818 v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, 819 v34, v35, v36, v37); 820} 821 822template <typename T1, typename T2, typename T3, typename T4, typename T5, 823 typename T6, typename T7, typename T8, typename T9, typename T10, 824 typename T11, typename T12, typename T13, typename T14, typename T15, 825 typename T16, typename T17, typename T18, typename T19, typename T20, 826 typename T21, typename T22, typename T23, typename T24, typename T25, 827 typename T26, typename T27, typename T28, typename T29, typename T30, 828 typename T31, typename T32, typename T33, typename T34, typename T35, 829 typename T36, typename T37, typename T38> 830internal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 831 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 832 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Values(T1 v1, T2 v2, 833 T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, 834 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, 835 T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, 836 T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, 837 T37 v37, T38 v38) { 838 return internal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 839 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 840 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38>(v1, v2, 841 v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, 842 v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, 843 v33, v34, v35, v36, v37, v38); 844} 845 846template <typename T1, typename T2, typename T3, typename T4, typename T5, 847 typename T6, typename T7, typename T8, typename T9, typename T10, 848 typename T11, typename T12, typename T13, typename T14, typename T15, 849 typename T16, typename T17, typename T18, typename T19, typename T20, 850 typename T21, typename T22, typename T23, typename T24, typename T25, 851 typename T26, typename T27, typename T28, typename T29, typename T30, 852 typename T31, typename T32, typename T33, typename T34, typename T35, 853 typename T36, typename T37, typename T38, typename T39> 854internal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 855 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 856 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Values(T1 v1, T2 v2, 857 T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, 858 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, 859 T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, 860 T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, 861 T37 v37, T38 v38, T39 v39) { 862 return internal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 863 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 864 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>(v1, 865 v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, 866 v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, 867 v32, v33, v34, v35, v36, v37, v38, v39); 868} 869 870template <typename T1, typename T2, typename T3, typename T4, typename T5, 871 typename T6, typename T7, typename T8, typename T9, typename T10, 872 typename T11, typename T12, typename T13, typename T14, typename T15, 873 typename T16, typename T17, typename T18, typename T19, typename T20, 874 typename T21, typename T22, typename T23, typename T24, typename T25, 875 typename T26, typename T27, typename T28, typename T29, typename T30, 876 typename T31, typename T32, typename T33, typename T34, typename T35, 877 typename T36, typename T37, typename T38, typename T39, typename T40> 878internal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 879 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 880 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Values(T1 v1, 881 T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, 882 T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, 883 T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, 884 T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, 885 T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) { 886 return internal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 887 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 888 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 889 T40>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, 890 v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, 891 v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40); 892} 893 894template <typename T1, typename T2, typename T3, typename T4, typename T5, 895 typename T6, typename T7, typename T8, typename T9, typename T10, 896 typename T11, typename T12, typename T13, typename T14, typename T15, 897 typename T16, typename T17, typename T18, typename T19, typename T20, 898 typename T21, typename T22, typename T23, typename T24, typename T25, 899 typename T26, typename T27, typename T28, typename T29, typename T30, 900 typename T31, typename T32, typename T33, typename T34, typename T35, 901 typename T36, typename T37, typename T38, typename T39, typename T40, 902 typename T41> 903internal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 904 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 905 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, 906 T41> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 907 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 908 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 909 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 910 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) { 911 return internal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 912 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 913 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 914 T40, T41>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, 915 v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, 916 v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41); 917} 918 919template <typename T1, typename T2, typename T3, typename T4, typename T5, 920 typename T6, typename T7, typename T8, typename T9, typename T10, 921 typename T11, typename T12, typename T13, typename T14, typename T15, 922 typename T16, typename T17, typename T18, typename T19, typename T20, 923 typename T21, typename T22, typename T23, typename T24, typename T25, 924 typename T26, typename T27, typename T28, typename T29, typename T30, 925 typename T31, typename T32, typename T33, typename T34, typename T35, 926 typename T36, typename T37, typename T38, typename T39, typename T40, 927 typename T41, typename T42> 928internal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 929 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 930 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, 931 T42> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 932 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 933 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 934 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 935 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 936 T42 v42) { 937 return internal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 938 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 939 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 940 T40, T41, T42>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, 941 v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, 942 v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, 943 v42); 944} 945 946template <typename T1, typename T2, typename T3, typename T4, typename T5, 947 typename T6, typename T7, typename T8, typename T9, typename T10, 948 typename T11, typename T12, typename T13, typename T14, typename T15, 949 typename T16, typename T17, typename T18, typename T19, typename T20, 950 typename T21, typename T22, typename T23, typename T24, typename T25, 951 typename T26, typename T27, typename T28, typename T29, typename T30, 952 typename T31, typename T32, typename T33, typename T34, typename T35, 953 typename T36, typename T37, typename T38, typename T39, typename T40, 954 typename T41, typename T42, typename T43> 955internal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 956 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 957 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, 958 T43> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 959 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 960 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 961 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 962 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 963 T42 v42, T43 v43) { 964 return internal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 965 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 966 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 967 T40, T41, T42, T43>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, 968 v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, 969 v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, 970 v41, v42, v43); 971} 972 973template <typename T1, typename T2, typename T3, typename T4, typename T5, 974 typename T6, typename T7, typename T8, typename T9, typename T10, 975 typename T11, typename T12, typename T13, typename T14, typename T15, 976 typename T16, typename T17, typename T18, typename T19, typename T20, 977 typename T21, typename T22, typename T23, typename T24, typename T25, 978 typename T26, typename T27, typename T28, typename T29, typename T30, 979 typename T31, typename T32, typename T33, typename T34, typename T35, 980 typename T36, typename T37, typename T38, typename T39, typename T40, 981 typename T41, typename T42, typename T43, typename T44> 982internal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 983 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 984 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, 985 T44> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 986 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 987 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 988 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 989 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 990 T42 v42, T43 v43, T44 v44) { 991 return internal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 992 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 993 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 994 T40, T41, T42, T43, T44>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, 995 v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, 996 v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, 997 v40, v41, v42, v43, v44); 998} 999 1000template <typename T1, typename T2, typename T3, typename T4, typename T5, 1001 typename T6, typename T7, typename T8, typename T9, typename T10, 1002 typename T11, typename T12, typename T13, typename T14, typename T15, 1003 typename T16, typename T17, typename T18, typename T19, typename T20, 1004 typename T21, typename T22, typename T23, typename T24, typename T25, 1005 typename T26, typename T27, typename T28, typename T29, typename T30, 1006 typename T31, typename T32, typename T33, typename T34, typename T35, 1007 typename T36, typename T37, typename T38, typename T39, typename T40, 1008 typename T41, typename T42, typename T43, typename T44, typename T45> 1009internal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 1010 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 1011 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, 1012 T44, T45> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, 1013 T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, 1014 T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, 1015 T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, 1016 T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, 1017 T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) { 1018 return internal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 1019 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 1020 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 1021 T40, T41, T42, T43, T44, T45>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, 1022 v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, 1023 v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, 1024 v39, v40, v41, v42, v43, v44, v45); 1025} 1026 1027template <typename T1, typename T2, typename T3, typename T4, typename T5, 1028 typename T6, typename T7, typename T8, typename T9, typename T10, 1029 typename T11, typename T12, typename T13, typename T14, typename T15, 1030 typename T16, typename T17, typename T18, typename T19, typename T20, 1031 typename T21, typename T22, typename T23, typename T24, typename T25, 1032 typename T26, typename T27, typename T28, typename T29, typename T30, 1033 typename T31, typename T32, typename T33, typename T34, typename T35, 1034 typename T36, typename T37, typename T38, typename T39, typename T40, 1035 typename T41, typename T42, typename T43, typename T44, typename T45, 1036 typename T46> 1037internal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 1038 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 1039 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, 1040 T44, T45, T46> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, 1041 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 1042 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, 1043 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, 1044 T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, 1045 T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) { 1046 return internal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 1047 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 1048 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 1049 T40, T41, T42, T43, T44, T45, T46>(v1, v2, v3, v4, v5, v6, v7, v8, v9, 1050 v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, 1051 v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, 1052 v38, v39, v40, v41, v42, v43, v44, v45, v46); 1053} 1054 1055template <typename T1, typename T2, typename T3, typename T4, typename T5, 1056 typename T6, typename T7, typename T8, typename T9, typename T10, 1057 typename T11, typename T12, typename T13, typename T14, typename T15, 1058 typename T16, typename T17, typename T18, typename T19, typename T20, 1059 typename T21, typename T22, typename T23, typename T24, typename T25, 1060 typename T26, typename T27, typename T28, typename T29, typename T30, 1061 typename T31, typename T32, typename T33, typename T34, typename T35, 1062 typename T36, typename T37, typename T38, typename T39, typename T40, 1063 typename T41, typename T42, typename T43, typename T44, typename T45, 1064 typename T46, typename T47> 1065internal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 1066 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 1067 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, 1068 T44, T45, T46, T47> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, 1069 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 1070 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, 1071 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, 1072 T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, 1073 T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) { 1074 return internal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 1075 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 1076 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 1077 T40, T41, T42, T43, T44, T45, T46, T47>(v1, v2, v3, v4, v5, v6, v7, v8, 1078 v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, 1079 v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, 1080 v38, v39, v40, v41, v42, v43, v44, v45, v46, v47); 1081} 1082 1083template <typename T1, typename T2, typename T3, typename T4, typename T5, 1084 typename T6, typename T7, typename T8, typename T9, typename T10, 1085 typename T11, typename T12, typename T13, typename T14, typename T15, 1086 typename T16, typename T17, typename T18, typename T19, typename T20, 1087 typename T21, typename T22, typename T23, typename T24, typename T25, 1088 typename T26, typename T27, typename T28, typename T29, typename T30, 1089 typename T31, typename T32, typename T33, typename T34, typename T35, 1090 typename T36, typename T37, typename T38, typename T39, typename T40, 1091 typename T41, typename T42, typename T43, typename T44, typename T45, 1092 typename T46, typename T47, typename T48> 1093internal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 1094 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 1095 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, 1096 T44, T45, T46, T47, T48> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, 1097 T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 1098 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, 1099 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, 1100 T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, 1101 T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, 1102 T48 v48) { 1103 return internal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 1104 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 1105 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 1106 T40, T41, T42, T43, T44, T45, T46, T47, T48>(v1, v2, v3, v4, v5, v6, v7, 1107 v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, 1108 v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, 1109 v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48); 1110} 1111 1112template <typename T1, typename T2, typename T3, typename T4, typename T5, 1113 typename T6, typename T7, typename T8, typename T9, typename T10, 1114 typename T11, typename T12, typename T13, typename T14, typename T15, 1115 typename T16, typename T17, typename T18, typename T19, typename T20, 1116 typename T21, typename T22, typename T23, typename T24, typename T25, 1117 typename T26, typename T27, typename T28, typename T29, typename T30, 1118 typename T31, typename T32, typename T33, typename T34, typename T35, 1119 typename T36, typename T37, typename T38, typename T39, typename T40, 1120 typename T41, typename T42, typename T43, typename T44, typename T45, 1121 typename T46, typename T47, typename T48, typename T49> 1122internal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 1123 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 1124 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, 1125 T44, T45, T46, T47, T48, T49> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, 1126 T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, 1127 T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, 1128 T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, 1129 T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, 1130 T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, 1131 T47 v47, T48 v48, T49 v49) { 1132 return internal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 1133 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 1134 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 1135 T40, T41, T42, T43, T44, T45, T46, T47, T48, T49>(v1, v2, v3, v4, v5, v6, 1136 v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, 1137 v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, 1138 v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49); 1139} 1140 1141template <typename T1, typename T2, typename T3, typename T4, typename T5, 1142 typename T6, typename T7, typename T8, typename T9, typename T10, 1143 typename T11, typename T12, typename T13, typename T14, typename T15, 1144 typename T16, typename T17, typename T18, typename T19, typename T20, 1145 typename T21, typename T22, typename T23, typename T24, typename T25, 1146 typename T26, typename T27, typename T28, typename T29, typename T30, 1147 typename T31, typename T32, typename T33, typename T34, typename T35, 1148 typename T36, typename T37, typename T38, typename T39, typename T40, 1149 typename T41, typename T42, typename T43, typename T44, typename T45, 1150 typename T46, typename T47, typename T48, typename T49, typename T50> 1151internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 1152 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 1153 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, 1154 T44, T45, T46, T47, T48, T49, T50> Values(T1 v1, T2 v2, T3 v3, T4 v4, 1155 T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, 1156 T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, 1157 T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, 1158 T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, 1159 T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, 1160 T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) { 1161 return internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 1162 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 1163 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 1164 T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>(v1, v2, v3, v4, 1165 v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, 1166 v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, 1167 v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, 1168 v48, v49, v50); 1169} 1170 1171// Bool() allows generating tests with parameters in a set of (false, true). 1172// 1173// Synopsis: 1174// Bool() 1175// - returns a generator producing sequences with elements {false, true}. 1176// 1177// It is useful when testing code that depends on Boolean flags. Combinations 1178// of multiple flags can be tested when several Bool()'s are combined using 1179// Combine() function. 1180// 1181// In the following example all tests in the test case FlagDependentTest 1182// will be instantiated twice with parameters false and true. 1183// 1184// class FlagDependentTest : public testing::TestWithParam<bool> { 1185// virtual void SetUp() { 1186// external_flag = GetParam(); 1187// } 1188// } 1189// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool()); 1190// 1191inline internal::ParamGenerator<bool> Bool() { 1192 return Values(false, true); 1193} 1194 1195#if GTEST_HAS_COMBINE 1196// Combine() allows the user to combine two or more sequences to produce 1197// values of a Cartesian product of those sequences' elements. 1198// 1199// Synopsis: 1200// Combine(gen1, gen2, ..., genN) 1201// - returns a generator producing sequences with elements coming from 1202// the Cartesian product of elements from the sequences generated by 1203// gen1, gen2, ..., genN. The sequence elements will have a type of 1204// tuple<T1, T2, ..., TN> where T1, T2, ..., TN are the types 1205// of elements from sequences produces by gen1, gen2, ..., genN. 1206// 1207// Combine can have up to 10 arguments. This number is currently limited 1208// by the maximum number of elements in the tuple implementation used by Google 1209// Test. 1210// 1211// Example: 1212// 1213// This will instantiate tests in test case AnimalTest each one with 1214// the parameter values tuple("cat", BLACK), tuple("cat", WHITE), 1215// tuple("dog", BLACK), and tuple("dog", WHITE): 1216// 1217// enum Color { BLACK, GRAY, WHITE }; 1218// class AnimalTest 1219// : public testing::TestWithParam<tuple<const char*, Color> > {...}; 1220// 1221// TEST_P(AnimalTest, AnimalLooksNice) {...} 1222// 1223// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest, 1224// Combine(Values("cat", "dog"), 1225// Values(BLACK, WHITE))); 1226// 1227// This will instantiate tests in FlagDependentTest with all variations of two 1228// Boolean flags: 1229// 1230// class FlagDependentTest 1231// : public testing::TestWithParam<tuple(bool, bool)> > { 1232// virtual void SetUp() { 1233// // Assigns external_flag_1 and external_flag_2 values from the tuple. 1234// tie(external_flag_1, external_flag_2) = GetParam(); 1235// } 1236// }; 1237// 1238// TEST_P(FlagDependentTest, TestFeature1) { 1239// // Test your code using external_flag_1 and external_flag_2 here. 1240// } 1241// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest, 1242// Combine(Bool(), Bool())); 1243// 1244template <typename Generator1, typename Generator2> 1245internal::CartesianProductHolder2<Generator1, Generator2> Combine( 1246 const Generator1& g1, const Generator2& g2) { 1247 return internal::CartesianProductHolder2<Generator1, Generator2>( 1248 g1, g2); 1249} 1250 1251template <typename Generator1, typename Generator2, typename Generator3> 1252internal::CartesianProductHolder3<Generator1, Generator2, Generator3> Combine( 1253 const Generator1& g1, const Generator2& g2, const Generator3& g3) { 1254 return internal::CartesianProductHolder3<Generator1, Generator2, Generator3>( 1255 g1, g2, g3); 1256} 1257 1258template <typename Generator1, typename Generator2, typename Generator3, 1259 typename Generator4> 1260internal::CartesianProductHolder4<Generator1, Generator2, Generator3, 1261 Generator4> Combine( 1262 const Generator1& g1, const Generator2& g2, const Generator3& g3, 1263 const Generator4& g4) { 1264 return internal::CartesianProductHolder4<Generator1, Generator2, Generator3, 1265 Generator4>( 1266 g1, g2, g3, g4); 1267} 1268 1269template <typename Generator1, typename Generator2, typename Generator3, 1270 typename Generator4, typename Generator5> 1271internal::CartesianProductHolder5<Generator1, Generator2, Generator3, 1272 Generator4, Generator5> Combine( 1273 const Generator1& g1, const Generator2& g2, const Generator3& g3, 1274 const Generator4& g4, const Generator5& g5) { 1275 return internal::CartesianProductHolder5<Generator1, Generator2, Generator3, 1276 Generator4, Generator5>( 1277 g1, g2, g3, g4, g5); 1278} 1279 1280template <typename Generator1, typename Generator2, typename Generator3, 1281 typename Generator4, typename Generator5, typename Generator6> 1282internal::CartesianProductHolder6<Generator1, Generator2, Generator3, 1283 Generator4, Generator5, Generator6> Combine( 1284 const Generator1& g1, const Generator2& g2, const Generator3& g3, 1285 const Generator4& g4, const Generator5& g5, const Generator6& g6) { 1286 return internal::CartesianProductHolder6<Generator1, Generator2, Generator3, 1287 Generator4, Generator5, Generator6>( 1288 g1, g2, g3, g4, g5, g6); 1289} 1290 1291template <typename Generator1, typename Generator2, typename Generator3, 1292 typename Generator4, typename Generator5, typename Generator6, 1293 typename Generator7> 1294internal::CartesianProductHolder7<Generator1, Generator2, Generator3, 1295 Generator4, Generator5, Generator6, Generator7> Combine( 1296 const Generator1& g1, const Generator2& g2, const Generator3& g3, 1297 const Generator4& g4, const Generator5& g5, const Generator6& g6, 1298 const Generator7& g7) { 1299 return internal::CartesianProductHolder7<Generator1, Generator2, Generator3, 1300 Generator4, Generator5, Generator6, Generator7>( 1301 g1, g2, g3, g4, g5, g6, g7); 1302} 1303 1304template <typename Generator1, typename Generator2, typename Generator3, 1305 typename Generator4, typename Generator5, typename Generator6, 1306 typename Generator7, typename Generator8> 1307internal::CartesianProductHolder8<Generator1, Generator2, Generator3, 1308 Generator4, Generator5, Generator6, Generator7, Generator8> Combine( 1309 const Generator1& g1, const Generator2& g2, const Generator3& g3, 1310 const Generator4& g4, const Generator5& g5, const Generator6& g6, 1311 const Generator7& g7, const Generator8& g8) { 1312 return internal::CartesianProductHolder8<Generator1, Generator2, Generator3, 1313 Generator4, Generator5, Generator6, Generator7, Generator8>( 1314 g1, g2, g3, g4, g5, g6, g7, g8); 1315} 1316 1317template <typename Generator1, typename Generator2, typename Generator3, 1318 typename Generator4, typename Generator5, typename Generator6, 1319 typename Generator7, typename Generator8, typename Generator9> 1320internal::CartesianProductHolder9<Generator1, Generator2, Generator3, 1321 Generator4, Generator5, Generator6, Generator7, Generator8, 1322 Generator9> Combine( 1323 const Generator1& g1, const Generator2& g2, const Generator3& g3, 1324 const Generator4& g4, const Generator5& g5, const Generator6& g6, 1325 const Generator7& g7, const Generator8& g8, const Generator9& g9) { 1326 return internal::CartesianProductHolder9<Generator1, Generator2, Generator3, 1327 Generator4, Generator5, Generator6, Generator7, Generator8, Generator9>( 1328 g1, g2, g3, g4, g5, g6, g7, g8, g9); 1329} 1330 1331template <typename Generator1, typename Generator2, typename Generator3, 1332 typename Generator4, typename Generator5, typename Generator6, 1333 typename Generator7, typename Generator8, typename Generator9, 1334 typename Generator10> 1335internal::CartesianProductHolder10<Generator1, Generator2, Generator3, 1336 Generator4, Generator5, Generator6, Generator7, Generator8, Generator9, 1337 Generator10> Combine( 1338 const Generator1& g1, const Generator2& g2, const Generator3& g3, 1339 const Generator4& g4, const Generator5& g5, const Generator6& g6, 1340 const Generator7& g7, const Generator8& g8, const Generator9& g9, 1341 const Generator10& g10) { 1342 return internal::CartesianProductHolder10<Generator1, Generator2, Generator3, 1343 Generator4, Generator5, Generator6, Generator7, Generator8, Generator9, 1344 Generator10>( 1345 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10); 1346} 1347#endif // GTEST_HAS_COMBINE 1348 1349 1350 1351#define TEST_P(test_case_name, test_name) \ 1352 class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ 1353 : public test_case_name { \ 1354 public: \ 1355 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ 1356 virtual void TestBody(); \ 1357 private: \ 1358 static int AddToRegistry() { \ 1359 ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ 1360 GetTestCasePatternHolder<test_case_name>(\ 1361 #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ 1362 #test_case_name, \ 1363 #test_name, \ 1364 new ::testing::internal::TestMetaFactory< \ 1365 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ 1366 return 0; \ 1367 } \ 1368 static int gtest_registering_dummy_; \ 1369 GTEST_DISALLOW_COPY_AND_ASSIGN_(\ 1370 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ 1371 }; \ 1372 int GTEST_TEST_CLASS_NAME_(test_case_name, \ 1373 test_name)::gtest_registering_dummy_ = \ 1374 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ 1375 void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() 1376 1377#define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ 1378 ::testing::internal::ParamGenerator<test_case_name::ParamType> \ 1379 gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \ 1380 int gtest_##prefix##test_case_name##_dummy_ = \ 1381 ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ 1382 GetTestCasePatternHolder<test_case_name>(\ 1383 #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\ 1384 #prefix, \ 1385 >est_##prefix##test_case_name##_EvalGenerator_, \ 1386 __FILE__, __LINE__) 1387 1388} // namespace testing 1389 1390#endif // GTEST_HAS_PARAM_TEST 1391 1392#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ 1393