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