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