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