1
// This file was GENERATED by a script. DO NOT EDIT BY HAND!!!
3
// Copyright 2008, Google Inc.
4
// All rights reserved.
6
// Redistribution and use in source and binary forms, with or without
7
// modification, are permitted provided that the following conditions are
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
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.
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.
32
// Authors: vladl@google.com (Vlad Losev)
34
// Macros and functions for implementing parameterized tests
35
// in Google C++ Testing Framework (Google Test)
37
// This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
39
#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
40
#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
43
// Value-parameterized tests allow you to test your code with different
44
// parameters without writing multiple copies of the same test.
46
// Here is how you use value-parameterized tests:
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.
56
class FooTest : public ::testing::TestWithParam<const char*> {
57
// You can implement all the usual class fixture members here.
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.
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()));
71
TEST_P(FooTest, HasBlahBlah) {
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:
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.
93
// For more details, see comments at the definitions of these functions below
96
// The following statement will instantiate tests from the FooTest test case
97
// each with parameter values "meeny", "miny", and "moe".
99
INSTANTIATE_TEST_CASE_P(InstantiationName,
101
Values("meeny", "miny", "moe"));
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
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"
117
// You can use these names in --gtest_filter.
119
// This statement will instantiate all tests from FooTest again, each
120
// with parameter values "cat" and "dog":
122
const char* pets[] = {"cat", "dog"};
123
INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets));
125
// The tests from the instantiation above will have these names:
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"
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.
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.
143
// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc
144
// for more examples.
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.
152
#include <gtest/internal/gtest-port.h>
154
#if !GTEST_OS_SYMBIAN
158
// scripts/fuse_gtest.py depends on gtest's own header being #included
159
// *unconditionally*. Therefore these #includes cannot be moved
160
// inside #if GTEST_HAS_PARAM_TEST.
161
#include <gtest/internal/gtest-internal.h>
162
#include <gtest/internal/gtest-param-util.h>
163
#include <gtest/internal/gtest-param-util-generated.h>
165
#if GTEST_HAS_PARAM_TEST
169
// Functions producing parameter generators.
171
// Google Test uses these generators to produce parameters for value-
172
// parameterized tests. When a parameterized test case is instantiated
173
// with a particular generator, Google Test creates and runs tests
174
// for each element in the sequence produced by the generator.
176
// In the following sample, tests from test case FooTest are instantiated
177
// each three times with parameter values 3, 5, and 8:
179
// class FooTest : public TestWithParam<int> { ... };
181
// TEST_P(FooTest, TestThis) {
183
// TEST_P(FooTest, TestThat) {
185
// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8));
188
// Range() returns generators providing sequences of values in a range.
192
// - returns a generator producing a sequence of values {start, start+1,
194
// Range(start, end, step)
195
// - returns a generator producing a sequence of values {start, start+step,
196
// start+step+step, ..., }.
198
// * The generated sequences never include end. For example, Range(1, 5)
199
// returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2)
200
// returns a generator producing {1, 3, 5, 7}.
201
// * start and end must have the same type. That type may be any integral or
202
// floating-point type or a user defined type satisfying these conditions:
203
// * It must be assignable (have operator=() defined).
204
// * It must have operator+() (operator+(int-compatible type) for
205
// two-operand version).
206
// * It must have operator<() defined.
207
// Elements in the resulting sequences will also have that type.
208
// * Condition start < end must be satisfied in order for resulting sequences
209
// to contain any elements.
211
template <typename T, typename IncrementT>
212
internal::ParamGenerator<T> Range(T start, T end, IncrementT step) {
213
return internal::ParamGenerator<T>(
214
new internal::RangeGenerator<T, IncrementT>(start, end, step));
217
template <typename T>
218
internal::ParamGenerator<T> Range(T start, T end) {
219
return Range(start, end, 1);
222
// ValuesIn() function allows generation of tests with parameters coming from
226
// ValuesIn(const T (&array)[N])
227
// - returns a generator producing sequences with elements from
229
// ValuesIn(const Container& container)
230
// - returns a generator producing sequences with elements from
231
// an STL-style container.
232
// ValuesIn(Iterator begin, Iterator end)
233
// - returns a generator producing sequences with elements from
234
// a range [begin, end) defined by a pair of STL-style iterators. These
235
// iterators can also be plain C pointers.
237
// Please note that ValuesIn copies the values from the containers
238
// passed in and keeps them to generate tests in RUN_ALL_TESTS().
242
// This instantiates tests from test case StringTest
243
// each with C-string values of "foo", "bar", and "baz":
245
// const char* strings[] = {"foo", "bar", "baz"};
246
// INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings));
248
// This instantiates tests from test case StlStringTest
249
// each with STL strings with values "a" and "b":
251
// ::std::vector< ::std::string> GetParameterStrings() {
252
// ::std::vector< ::std::string> v;
258
// INSTANTIATE_TEST_CASE_P(CharSequence,
260
// ValuesIn(GetParameterStrings()));
263
// This will also instantiate tests from CharTest
264
// each with parameter values 'a' and 'b':
266
// ::std::list<char> GetParameterChars() {
267
// ::std::list<char> list;
268
// list.push_back('a');
269
// list.push_back('b');
272
// ::std::list<char> l = GetParameterChars();
273
// INSTANTIATE_TEST_CASE_P(CharSequence2,
275
// ValuesIn(l.begin(), l.end()));
277
template <typename ForwardIterator>
278
internal::ParamGenerator<
279
typename ::std::iterator_traits<ForwardIterator>::value_type> ValuesIn(
280
ForwardIterator begin,
281
ForwardIterator end) {
282
typedef typename ::std::iterator_traits<ForwardIterator>::value_type
284
return internal::ParamGenerator<ParamType>(
285
new internal::ValuesInIteratorRangeGenerator<ParamType>(begin, end));
288
template <typename T, size_t N>
289
internal::ParamGenerator<T> ValuesIn(const T (&array)[N]) {
290
return ValuesIn(array, array + N);
293
template <class Container>
294
internal::ParamGenerator<typename Container::value_type> ValuesIn(
295
const Container& container) {
296
return ValuesIn(container.begin(), container.end());
299
// Values() allows generating tests from explicitly specified list of
303
// Values(T v1, T v2, ..., T vN)
304
// - returns a generator producing sequences with elements v1, v2, ..., vN.
306
// For example, this instantiates tests from test case BarTest each
307
// with values "one", "two", and "three":
309
// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three"));
311
// This instantiates tests from test case BazTest each with values 1, 2, 3.5.
312
// The exact type of values will depend on the type of parameter in BazTest.
314
// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5));
316
// Currently, Values() supports from 1 to 50 parameters.
318
template <typename T1>
319
internal::ValueArray1<T1> Values(T1 v1) {
320
return internal::ValueArray1<T1>(v1);
323
template <typename T1, typename T2>
324
internal::ValueArray2<T1, T2> Values(T1 v1, T2 v2) {
325
return internal::ValueArray2<T1, T2>(v1, v2);
328
template <typename T1, typename T2, typename T3>
329
internal::ValueArray3<T1, T2, T3> Values(T1 v1, T2 v2, T3 v3) {
330
return internal::ValueArray3<T1, T2, T3>(v1, v2, v3);
333
template <typename T1, typename T2, typename T3, typename T4>
334
internal::ValueArray4<T1, T2, T3, T4> Values(T1 v1, T2 v2, T3 v3, T4 v4) {
335
return internal::ValueArray4<T1, T2, T3, T4>(v1, v2, v3, v4);
338
template <typename T1, typename T2, typename T3, typename T4, typename T5>
339
internal::ValueArray5<T1, T2, T3, T4, T5> Values(T1 v1, T2 v2, T3 v3, T4 v4,
341
return internal::ValueArray5<T1, T2, T3, T4, T5>(v1, v2, v3, v4, v5);
344
template <typename T1, typename T2, typename T3, typename T4, typename T5,
346
internal::ValueArray6<T1, T2, T3, T4, T5, T6> Values(T1 v1, T2 v2, T3 v3,
347
T4 v4, T5 v5, T6 v6) {
348
return internal::ValueArray6<T1, T2, T3, T4, T5, T6>(v1, v2, v3, v4, v5, v6);
351
template <typename T1, typename T2, typename T3, typename T4, typename T5,
352
typename T6, typename T7>
353
internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7> Values(T1 v1, T2 v2, T3 v3,
354
T4 v4, T5 v5, T6 v6, T7 v7) {
355
return internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7>(v1, v2, v3, v4, v5,
359
template <typename T1, typename T2, typename T3, typename T4, typename T5,
360
typename T6, typename T7, typename T8>
361
internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8> Values(T1 v1, T2 v2,
362
T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) {
363
return internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8>(v1, v2, v3, v4,
367
template <typename T1, typename T2, typename T3, typename T4, typename T5,
368
typename T6, typename T7, typename T8, typename T9>
369
internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9> Values(T1 v1, T2 v2,
370
T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) {
371
return internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(v1, v2, v3,
372
v4, v5, v6, v7, v8, v9);
375
template <typename T1, typename T2, typename T3, typename T4, typename T5,
376
typename T6, typename T7, typename T8, typename T9, typename T10>
377
internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Values(T1 v1,
378
T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) {
379
return internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(v1,
380
v2, v3, v4, v5, v6, v7, v8, v9, v10);
383
template <typename T1, typename T2, typename T3, typename T4, typename T5,
384
typename T6, typename T7, typename T8, typename T9, typename T10,
386
internal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
387
T11> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
389
return internal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
390
T11>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11);
393
template <typename T1, typename T2, typename T3, typename T4, typename T5,
394
typename T6, typename T7, typename T8, typename T9, typename T10,
395
typename T11, typename T12>
396
internal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
397
T12> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
398
T10 v10, T11 v11, T12 v12) {
399
return internal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
400
T12>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12);
403
template <typename T1, typename T2, typename T3, typename T4, typename T5,
404
typename T6, typename T7, typename T8, typename T9, typename T10,
405
typename T11, typename T12, typename T13>
406
internal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
407
T13> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
408
T10 v10, T11 v11, T12 v12, T13 v13) {
409
return internal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
410
T12, T13>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13);
413
template <typename T1, typename T2, typename T3, typename T4, typename T5,
414
typename T6, typename T7, typename T8, typename T9, typename T10,
415
typename T11, typename T12, typename T13, typename T14>
416
internal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
417
T14> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
418
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) {
419
return internal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
420
T12, T13, T14>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
424
template <typename T1, typename T2, typename T3, typename T4, typename T5,
425
typename T6, typename T7, typename T8, typename T9, typename T10,
426
typename T11, typename T12, typename T13, typename T14, typename T15>
427
internal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
428
T14, T15> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
429
T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) {
430
return internal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
431
T12, T13, T14, T15>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
435
template <typename T1, typename T2, typename T3, typename T4, typename T5,
436
typename T6, typename T7, typename T8, typename T9, typename T10,
437
typename T11, typename T12, typename T13, typename T14, typename T15,
439
internal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
440
T14, T15, T16> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
441
T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
443
return internal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
444
T12, T13, T14, T15, T16>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
445
v12, v13, v14, v15, v16);
448
template <typename T1, typename T2, typename T3, typename T4, typename T5,
449
typename T6, typename T7, typename T8, typename T9, typename T10,
450
typename T11, typename T12, typename T13, typename T14, typename T15,
451
typename T16, typename T17>
452
internal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
453
T14, T15, T16, T17> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
454
T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
456
return internal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
457
T12, T13, T14, T15, T16, T17>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
458
v11, v12, v13, v14, v15, v16, v17);
461
template <typename T1, typename T2, typename T3, typename T4, typename T5,
462
typename T6, typename T7, typename T8, typename T9, typename T10,
463
typename T11, typename T12, typename T13, typename T14, typename T15,
464
typename T16, typename T17, typename T18>
465
internal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
466
T14, T15, T16, T17, T18> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
467
T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
468
T16 v16, T17 v17, T18 v18) {
469
return internal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
470
T12, T13, T14, T15, T16, T17, T18>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
471
v10, v11, v12, v13, v14, v15, v16, v17, v18);
474
template <typename T1, typename T2, typename T3, typename T4, typename T5,
475
typename T6, typename T7, typename T8, typename T9, typename T10,
476
typename T11, typename T12, typename T13, typename T14, typename T15,
477
typename T16, typename T17, typename T18, typename T19>
478
internal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
479
T14, T15, T16, T17, T18, T19> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
480
T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
481
T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) {
482
return internal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
483
T12, T13, T14, T15, T16, T17, T18, T19>(v1, v2, v3, v4, v5, v6, v7, v8,
484
v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19);
487
template <typename T1, typename T2, typename T3, typename T4, typename T5,
488
typename T6, typename T7, typename T8, typename T9, typename T10,
489
typename T11, typename T12, typename T13, typename T14, typename T15,
490
typename T16, typename T17, typename T18, typename T19, typename T20>
491
internal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
492
T14, T15, T16, T17, T18, T19, T20> Values(T1 v1, T2 v2, T3 v3, T4 v4,
493
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
494
T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) {
495
return internal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
496
T12, T13, T14, T15, T16, T17, T18, T19, T20>(v1, v2, v3, v4, v5, v6, v7,
497
v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20);
500
template <typename T1, typename T2, typename T3, typename T4, typename T5,
501
typename T6, typename T7, typename T8, typename T9, typename T10,
502
typename T11, typename T12, typename T13, typename T14, typename T15,
503
typename T16, typename T17, typename T18, typename T19, typename T20,
505
internal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
506
T14, T15, T16, T17, T18, T19, T20, T21> Values(T1 v1, T2 v2, T3 v3, T4 v4,
507
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
508
T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) {
509
return internal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
510
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>(v1, v2, v3, v4, v5, v6,
511
v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21);
514
template <typename T1, typename T2, typename T3, typename T4, typename T5,
515
typename T6, typename T7, typename T8, typename T9, typename T10,
516
typename T11, typename T12, typename T13, typename T14, typename T15,
517
typename T16, typename T17, typename T18, typename T19, typename T20,
518
typename T21, typename T22>
519
internal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
520
T14, T15, T16, T17, T18, T19, T20, T21, T22> Values(T1 v1, T2 v2, T3 v3,
521
T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
522
T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
524
return internal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
525
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>(v1, v2, v3, v4,
526
v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
530
template <typename T1, typename T2, typename T3, typename T4, typename T5,
531
typename T6, typename T7, typename T8, typename T9, typename T10,
532
typename T11, typename T12, typename T13, typename T14, typename T15,
533
typename T16, typename T17, typename T18, typename T19, typename T20,
534
typename T21, typename T22, typename T23>
535
internal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
536
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> Values(T1 v1, T2 v2,
537
T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
538
T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
539
T21 v21, T22 v22, T23 v23) {
540
return internal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
541
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23>(v1, v2, v3,
542
v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
546
template <typename T1, typename T2, typename T3, typename T4, typename T5,
547
typename T6, typename T7, typename T8, typename T9, typename T10,
548
typename T11, typename T12, typename T13, typename T14, typename T15,
549
typename T16, typename T17, typename T18, typename T19, typename T20,
550
typename T21, typename T22, typename T23, typename T24>
551
internal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
552
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Values(T1 v1, T2 v2,
553
T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
554
T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
555
T21 v21, T22 v22, T23 v23, T24 v24) {
556
return internal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
557
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24>(v1, v2,
558
v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18,
559
v19, v20, v21, v22, v23, v24);
562
template <typename T1, typename T2, typename T3, typename T4, typename T5,
563
typename T6, typename T7, typename T8, typename T9, typename T10,
564
typename T11, typename T12, typename T13, typename T14, typename T15,
565
typename T16, typename T17, typename T18, typename T19, typename T20,
566
typename T21, typename T22, typename T23, typename T24, typename T25>
567
internal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
568
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Values(T1 v1,
569
T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11,
570
T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19,
571
T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) {
572
return internal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
573
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25>(v1,
574
v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17,
575
v18, v19, v20, v21, v22, v23, v24, v25);
578
template <typename T1, typename T2, typename T3, typename T4, typename T5,
579
typename T6, typename T7, typename T8, typename T9, typename T10,
580
typename T11, typename T12, typename T13, typename T14, typename T15,
581
typename T16, typename T17, typename T18, typename T19, typename T20,
582
typename T21, typename T22, typename T23, typename T24, typename T25,
584
internal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
585
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
586
T26> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
587
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
588
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
590
return internal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
591
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
592
T26>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
593
v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26);
596
template <typename T1, typename T2, typename T3, typename T4, typename T5,
597
typename T6, typename T7, typename T8, typename T9, typename T10,
598
typename T11, typename T12, typename T13, typename T14, typename T15,
599
typename T16, typename T17, typename T18, typename T19, typename T20,
600
typename T21, typename T22, typename T23, typename T24, typename T25,
601
typename T26, typename T27>
602
internal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
603
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
604
T27> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
605
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
606
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
608
return internal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
609
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
610
T26, T27>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14,
611
v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27);
614
template <typename T1, typename T2, typename T3, typename T4, typename T5,
615
typename T6, typename T7, typename T8, typename T9, typename T10,
616
typename T11, typename T12, typename T13, typename T14, typename T15,
617
typename T16, typename T17, typename T18, typename T19, typename T20,
618
typename T21, typename T22, typename T23, typename T24, typename T25,
619
typename T26, typename T27, typename T28>
620
internal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
621
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
622
T28> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
623
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
624
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
625
T26 v26, T27 v27, T28 v28) {
626
return internal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
627
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
628
T26, T27, T28>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
629
v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27,
633
template <typename T1, typename T2, typename T3, typename T4, typename T5,
634
typename T6, typename T7, typename T8, typename T9, typename T10,
635
typename T11, typename T12, typename T13, typename T14, typename T15,
636
typename T16, typename T17, typename T18, typename T19, typename T20,
637
typename T21, typename T22, typename T23, typename T24, typename T25,
638
typename T26, typename T27, typename T28, typename T29>
639
internal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
640
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
641
T29> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
642
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
643
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
644
T26 v26, T27 v27, T28 v28, T29 v29) {
645
return internal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
646
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
647
T26, T27, T28, T29>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
648
v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26,
652
template <typename T1, typename T2, typename T3, typename T4, typename T5,
653
typename T6, typename T7, typename T8, typename T9, typename T10,
654
typename T11, typename T12, typename T13, typename T14, typename T15,
655
typename T16, typename T17, typename T18, typename T19, typename T20,
656
typename T21, typename T22, typename T23, typename T24, typename T25,
657
typename T26, typename T27, typename T28, typename T29, typename T30>
658
internal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
659
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
660
T29, T30> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
661
T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
662
T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
663
T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) {
664
return internal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
665
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
666
T26, T27, T28, T29, T30>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
667
v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25,
668
v26, v27, v28, v29, v30);
671
template <typename T1, typename T2, typename T3, typename T4, typename T5,
672
typename T6, typename T7, typename T8, typename T9, typename T10,
673
typename T11, typename T12, typename T13, typename T14, typename T15,
674
typename T16, typename T17, typename T18, typename T19, typename T20,
675
typename T21, typename T22, typename T23, typename T24, typename T25,
676
typename T26, typename T27, typename T28, typename T29, typename T30,
678
internal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
679
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
680
T29, T30, T31> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
681
T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
682
T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
683
T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) {
684
return internal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
685
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
686
T26, T27, T28, T29, T30, T31>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
687
v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24,
688
v25, v26, v27, v28, v29, v30, v31);
691
template <typename T1, typename T2, typename T3, typename T4, typename T5,
692
typename T6, typename T7, typename T8, typename T9, typename T10,
693
typename T11, typename T12, typename T13, typename T14, typename T15,
694
typename T16, typename T17, typename T18, typename T19, typename T20,
695
typename T21, typename T22, typename T23, typename T24, typename T25,
696
typename T26, typename T27, typename T28, typename T29, typename T30,
697
typename T31, typename T32>
698
internal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
699
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
700
T29, T30, T31, T32> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
701
T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
702
T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
703
T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
705
return internal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
706
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
707
T26, T27, T28, T29, T30, T31, T32>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
708
v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
709
v24, v25, v26, v27, v28, v29, v30, v31, v32);
712
template <typename T1, typename T2, typename T3, typename T4, typename T5,
713
typename T6, typename T7, typename T8, typename T9, typename T10,
714
typename T11, typename T12, typename T13, typename T14, typename T15,
715
typename T16, typename T17, typename T18, typename T19, typename T20,
716
typename T21, typename T22, typename T23, typename T24, typename T25,
717
typename T26, typename T27, typename T28, typename T29, typename T30,
718
typename T31, typename T32, typename T33>
719
internal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
720
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
721
T29, T30, T31, T32, T33> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
722
T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
723
T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
724
T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
726
return internal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
727
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
728
T26, T27, T28, T29, T30, T31, T32, T33>(v1, v2, v3, v4, v5, v6, v7, v8,
729
v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
730
v24, v25, v26, v27, v28, v29, v30, v31, v32, v33);
733
template <typename T1, typename T2, typename T3, typename T4, typename T5,
734
typename T6, typename T7, typename T8, typename T9, typename T10,
735
typename T11, typename T12, typename T13, typename T14, typename T15,
736
typename T16, typename T17, typename T18, typename T19, typename T20,
737
typename T21, typename T22, typename T23, typename T24, typename T25,
738
typename T26, typename T27, typename T28, typename T29, typename T30,
739
typename T31, typename T32, typename T33, typename T34>
740
internal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
741
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
742
T29, T30, T31, T32, T33, T34> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
743
T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
744
T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22,
745
T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30,
746
T31 v31, T32 v32, T33 v33, T34 v34) {
747
return internal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
748
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
749
T26, T27, T28, T29, T30, T31, T32, T33, T34>(v1, v2, v3, v4, v5, v6, v7,
750
v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22,
751
v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34);
754
template <typename T1, typename T2, typename T3, typename T4, typename T5,
755
typename T6, typename T7, typename T8, typename T9, typename T10,
756
typename T11, typename T12, typename T13, typename T14, typename T15,
757
typename T16, typename T17, typename T18, typename T19, typename T20,
758
typename T21, typename T22, typename T23, typename T24, typename T25,
759
typename T26, typename T27, typename T28, typename T29, typename T30,
760
typename T31, typename T32, typename T33, typename T34, typename T35>
761
internal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
762
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
763
T29, T30, T31, T32, T33, T34, T35> Values(T1 v1, T2 v2, T3 v3, T4 v4,
764
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
765
T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
766
T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
767
T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) {
768
return internal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
769
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
770
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35>(v1, v2, v3, v4, v5, v6,
771
v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21,
772
v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35);
775
template <typename T1, typename T2, typename T3, typename T4, typename T5,
776
typename T6, typename T7, typename T8, typename T9, typename T10,
777
typename T11, typename T12, typename T13, typename T14, typename T15,
778
typename T16, typename T17, typename T18, typename T19, typename T20,
779
typename T21, typename T22, typename T23, typename T24, typename T25,
780
typename T26, typename T27, typename T28, typename T29, typename T30,
781
typename T31, typename T32, typename T33, typename T34, typename T35,
783
internal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
784
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
785
T29, T30, T31, T32, T33, T34, T35, T36> Values(T1 v1, T2 v2, T3 v3, T4 v4,
786
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
787
T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
788
T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
789
T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) {
790
return internal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
791
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
792
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36>(v1, v2, v3, v4,
793
v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
794
v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
798
template <typename T1, typename T2, typename T3, typename T4, typename T5,
799
typename T6, typename T7, typename T8, typename T9, typename T10,
800
typename T11, typename T12, typename T13, typename T14, typename T15,
801
typename T16, typename T17, typename T18, typename T19, typename T20,
802
typename T21, typename T22, typename T23, typename T24, typename T25,
803
typename T26, typename T27, typename T28, typename T29, typename T30,
804
typename T31, typename T32, typename T33, typename T34, typename T35,
805
typename T36, typename T37>
806
internal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
807
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
808
T29, T30, T31, T32, T33, T34, T35, T36, T37> Values(T1 v1, T2 v2, T3 v3,
809
T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
810
T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
811
T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
812
T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
814
return internal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
815
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
816
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37>(v1, v2, v3,
817
v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
818
v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
822
template <typename T1, typename T2, typename T3, typename T4, typename T5,
823
typename T6, typename T7, typename T8, typename T9, typename T10,
824
typename T11, typename T12, typename T13, typename T14, typename T15,
825
typename T16, typename T17, typename T18, typename T19, typename T20,
826
typename T21, typename T22, typename T23, typename T24, typename T25,
827
typename T26, typename T27, typename T28, typename T29, typename T30,
828
typename T31, typename T32, typename T33, typename T34, typename T35,
829
typename T36, typename T37, typename T38>
830
internal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
831
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
832
T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Values(T1 v1, T2 v2,
833
T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
834
T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
835
T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
836
T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
838
return internal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
839
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
840
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38>(v1, v2,
841
v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18,
842
v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32,
843
v33, v34, v35, v36, v37, v38);
846
template <typename T1, typename T2, typename T3, typename T4, typename T5,
847
typename T6, typename T7, typename T8, typename T9, typename T10,
848
typename T11, typename T12, typename T13, typename T14, typename T15,
849
typename T16, typename T17, typename T18, typename T19, typename T20,
850
typename T21, typename T22, typename T23, typename T24, typename T25,
851
typename T26, typename T27, typename T28, typename T29, typename T30,
852
typename T31, typename T32, typename T33, typename T34, typename T35,
853
typename T36, typename T37, typename T38, typename T39>
854
internal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
855
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
856
T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Values(T1 v1, T2 v2,
857
T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
858
T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
859
T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
860
T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
861
T37 v37, T38 v38, T39 v39) {
862
return internal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
863
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
864
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>(v1,
865
v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17,
866
v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31,
867
v32, v33, v34, v35, v36, v37, v38, v39);
870
template <typename T1, typename T2, typename T3, typename T4, typename T5,
871
typename T6, typename T7, typename T8, typename T9, typename T10,
872
typename T11, typename T12, typename T13, typename T14, typename T15,
873
typename T16, typename T17, typename T18, typename T19, typename T20,
874
typename T21, typename T22, typename T23, typename T24, typename T25,
875
typename T26, typename T27, typename T28, typename T29, typename T30,
876
typename T31, typename T32, typename T33, typename T34, typename T35,
877
typename T36, typename T37, typename T38, typename T39, typename T40>
878
internal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
879
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
880
T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Values(T1 v1,
881
T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11,
882
T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19,
883
T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27,
884
T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35,
885
T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) {
886
return internal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
887
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
888
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
889
T40>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
890
v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29,
891
v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40);
894
template <typename T1, typename T2, typename T3, typename T4, typename T5,
895
typename T6, typename T7, typename T8, typename T9, typename T10,
896
typename T11, typename T12, typename T13, typename T14, typename T15,
897
typename T16, typename T17, typename T18, typename T19, typename T20,
898
typename T21, typename T22, typename T23, typename T24, typename T25,
899
typename T26, typename T27, typename T28, typename T29, typename T30,
900
typename T31, typename T32, typename T33, typename T34, typename T35,
901
typename T36, typename T37, typename T38, typename T39, typename T40,
903
internal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
904
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
905
T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
906
T41> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
907
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
908
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
909
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
910
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) {
911
return internal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
912
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
913
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
914
T40, T41>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14,
915
v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28,
916
v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41);
919
template <typename T1, typename T2, typename T3, typename T4, typename T5,
920
typename T6, typename T7, typename T8, typename T9, typename T10,
921
typename T11, typename T12, typename T13, typename T14, typename T15,
922
typename T16, typename T17, typename T18, typename T19, typename T20,
923
typename T21, typename T22, typename T23, typename T24, typename T25,
924
typename T26, typename T27, typename T28, typename T29, typename T30,
925
typename T31, typename T32, typename T33, typename T34, typename T35,
926
typename T36, typename T37, typename T38, typename T39, typename T40,
927
typename T41, typename T42>
928
internal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
929
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
930
T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
931
T42> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
932
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
933
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
934
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
935
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
937
return internal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
938
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
939
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
940
T40, T41, T42>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
941
v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27,
942
v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41,
946
template <typename T1, typename T2, typename T3, typename T4, typename T5,
947
typename T6, typename T7, typename T8, typename T9, typename T10,
948
typename T11, typename T12, typename T13, typename T14, typename T15,
949
typename T16, typename T17, typename T18, typename T19, typename T20,
950
typename T21, typename T22, typename T23, typename T24, typename T25,
951
typename T26, typename T27, typename T28, typename T29, typename T30,
952
typename T31, typename T32, typename T33, typename T34, typename T35,
953
typename T36, typename T37, typename T38, typename T39, typename T40,
954
typename T41, typename T42, typename T43>
955
internal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
956
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
957
T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
958
T43> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
959
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
960
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
961
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
962
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
964
return internal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
965
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
966
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
967
T40, T41, T42, T43>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
968
v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26,
969
v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40,
973
template <typename T1, typename T2, typename T3, typename T4, typename T5,
974
typename T6, typename T7, typename T8, typename T9, typename T10,
975
typename T11, typename T12, typename T13, typename T14, typename T15,
976
typename T16, typename T17, typename T18, typename T19, typename T20,
977
typename T21, typename T22, typename T23, typename T24, typename T25,
978
typename T26, typename T27, typename T28, typename T29, typename T30,
979
typename T31, typename T32, typename T33, typename T34, typename T35,
980
typename T36, typename T37, typename T38, typename T39, typename T40,
981
typename T41, typename T42, typename T43, typename T44>
982
internal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
983
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
984
T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
985
T44> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
986
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
987
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
988
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
989
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
990
T42 v42, T43 v43, T44 v44) {
991
return internal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
992
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
993
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
994
T40, T41, T42, T43, T44>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
995
v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25,
996
v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39,
997
v40, v41, v42, v43, v44);
1000
template <typename T1, typename T2, typename T3, typename T4, typename T5,
1001
typename T6, typename T7, typename T8, typename T9, typename T10,
1002
typename T11, typename T12, typename T13, typename T14, typename T15,
1003
typename T16, typename T17, typename T18, typename T19, typename T20,
1004
typename T21, typename T22, typename T23, typename T24, typename T25,
1005
typename T26, typename T27, typename T28, typename T29, typename T30,
1006
typename T31, typename T32, typename T33, typename T34, typename T35,
1007
typename T36, typename T37, typename T38, typename T39, typename T40,
1008
typename T41, typename T42, typename T43, typename T44, typename T45>
1009
internal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
1010
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
1011
T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
1012
T44, T45> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
1013
T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
1014
T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
1015
T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
1016
T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
1017
T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) {
1018
return internal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
1019
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
1020
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
1021
T40, T41, T42, T43, T44, T45>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
1022
v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24,
1023
v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38,
1024
v39, v40, v41, v42, v43, v44, v45);
1027
template <typename T1, typename T2, typename T3, typename T4, typename T5,
1028
typename T6, typename T7, typename T8, typename T9, typename T10,
1029
typename T11, typename T12, typename T13, typename T14, typename T15,
1030
typename T16, typename T17, typename T18, typename T19, typename T20,
1031
typename T21, typename T22, typename T23, typename T24, typename T25,
1032
typename T26, typename T27, typename T28, typename T29, typename T30,
1033
typename T31, typename T32, typename T33, typename T34, typename T35,
1034
typename T36, typename T37, typename T38, typename T39, typename T40,
1035
typename T41, typename T42, typename T43, typename T44, typename T45,
1037
internal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
1038
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
1039
T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
1040
T44, T45, T46> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
1041
T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
1042
T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
1043
T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
1044
T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
1045
T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) {
1046
return internal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
1047
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
1048
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
1049
T40, T41, T42, T43, T44, T45, T46>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
1050
v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
1051
v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37,
1052
v38, v39, v40, v41, v42, v43, v44, v45, v46);
1055
template <typename T1, typename T2, typename T3, typename T4, typename T5,
1056
typename T6, typename T7, typename T8, typename T9, typename T10,
1057
typename T11, typename T12, typename T13, typename T14, typename T15,
1058
typename T16, typename T17, typename T18, typename T19, typename T20,
1059
typename T21, typename T22, typename T23, typename T24, typename T25,
1060
typename T26, typename T27, typename T28, typename T29, typename T30,
1061
typename T31, typename T32, typename T33, typename T34, typename T35,
1062
typename T36, typename T37, typename T38, typename T39, typename T40,
1063
typename T41, typename T42, typename T43, typename T44, typename T45,
1064
typename T46, typename T47>
1065
internal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
1066
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
1067
T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
1068
T44, T45, T46, T47> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
1069
T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
1070
T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
1071
T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
1072
T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
1073
T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) {
1074
return internal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
1075
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
1076
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
1077
T40, T41, T42, T43, T44, T45, T46, T47>(v1, v2, v3, v4, v5, v6, v7, v8,
1078
v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
1079
v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37,
1080
v38, v39, v40, v41, v42, v43, v44, v45, v46, v47);
1083
template <typename T1, typename T2, typename T3, typename T4, typename T5,
1084
typename T6, typename T7, typename T8, typename T9, typename T10,
1085
typename T11, typename T12, typename T13, typename T14, typename T15,
1086
typename T16, typename T17, typename T18, typename T19, typename T20,
1087
typename T21, typename T22, typename T23, typename T24, typename T25,
1088
typename T26, typename T27, typename T28, typename T29, typename T30,
1089
typename T31, typename T32, typename T33, typename T34, typename T35,
1090
typename T36, typename T37, typename T38, typename T39, typename T40,
1091
typename T41, typename T42, typename T43, typename T44, typename T45,
1092
typename T46, typename T47, typename T48>
1093
internal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
1094
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
1095
T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
1096
T44, T45, T46, T47, T48> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
1097
T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
1098
T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
1099
T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
1100
T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
1101
T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47,
1103
return internal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
1104
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
1105
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
1106
T40, T41, T42, T43, T44, T45, T46, T47, T48>(v1, v2, v3, v4, v5, v6, v7,
1107
v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22,
1108
v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36,
1109
v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48);
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, typename T49>
1122
internal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
1123
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
1124
T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
1125
T44, T45, T46, T47, T48, T49> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
1126
T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
1127
T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22,
1128
T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30,
1129
T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38,
1130
T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46,
1131
T47 v47, T48 v48, T49 v49) {
1132
return internal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
1133
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
1134
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
1135
T40, T41, T42, T43, T44, T45, T46, T47, T48, T49>(v1, v2, v3, v4, v5, v6,
1136
v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21,
1137
v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35,
1138
v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49);
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, typename T50>
1151
internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
1152
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
1153
T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
1154
T44, T45, T46, T47, T48, T49, T50> Values(T1 v1, T2 v2, T3 v3, T4 v4,
1155
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
1156
T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
1157
T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
1158
T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37,
1159
T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45,
1160
T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) {
1161
return internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
1162
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
1163
T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
1164
T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>(v1, v2, v3, v4,
1165
v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
1166
v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
1167
v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47,
1171
// Bool() allows generating tests with parameters in a set of (false, true).
1175
// - returns a generator producing sequences with elements {false, true}.
1177
// It is useful when testing code that depends on Boolean flags. Combinations
1178
// of multiple flags can be tested when several Bool()'s are combined using
1179
// Combine() function.
1181
// In the following example all tests in the test case FlagDependentTest
1182
// will be instantiated twice with parameters false and true.
1184
// class FlagDependentTest : public testing::TestWithParam<bool> {
1185
// virtual void SetUp() {
1186
// external_flag = GetParam();
1189
// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool());
1191
inline internal::ParamGenerator<bool> Bool() {
1192
return Values(false, true);
1195
#if GTEST_HAS_COMBINE
1196
// Combine() allows the user to combine two or more sequences to produce
1197
// values of a Cartesian product of those sequences' elements.
1200
// Combine(gen1, gen2, ..., genN)
1201
// - returns a generator producing sequences with elements coming from
1202
// the Cartesian product of elements from the sequences generated by
1203
// gen1, gen2, ..., genN. The sequence elements will have a type of
1204
// tuple<T1, T2, ..., TN> where T1, T2, ..., TN are the types
1205
// of elements from sequences produces by gen1, gen2, ..., genN.
1207
// Combine can have up to 10 arguments. This number is currently limited
1208
// by the maximum number of elements in the tuple implementation used by Google
1213
// This will instantiate tests in test case AnimalTest each one with
1214
// the parameter values tuple("cat", BLACK), tuple("cat", WHITE),
1215
// tuple("dog", BLACK), and tuple("dog", WHITE):
1217
// enum Color { BLACK, GRAY, WHITE };
1219
// : public testing::TestWithParam<tuple<const char*, Color> > {...};
1221
// TEST_P(AnimalTest, AnimalLooksNice) {...}
1223
// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest,
1224
// Combine(Values("cat", "dog"),
1225
// Values(BLACK, WHITE)));
1227
// This will instantiate tests in FlagDependentTest with all variations of two
1230
// class FlagDependentTest
1231
// : public testing::TestWithParam<tuple(bool, bool)> > {
1232
// virtual void SetUp() {
1233
// // Assigns external_flag_1 and external_flag_2 values from the tuple.
1234
// tie(external_flag_1, external_flag_2) = GetParam();
1238
// TEST_P(FlagDependentTest, TestFeature1) {
1239
// // Test your code using external_flag_1 and external_flag_2 here.
1241
// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest,
1242
// Combine(Bool(), Bool()));
1244
template <typename Generator1, typename Generator2>
1245
internal::CartesianProductHolder2<Generator1, Generator2> Combine(
1246
const Generator1& g1, const Generator2& g2) {
1247
return internal::CartesianProductHolder2<Generator1, Generator2>(
1251
template <typename Generator1, typename Generator2, typename Generator3>
1252
internal::CartesianProductHolder3<Generator1, Generator2, Generator3> Combine(
1253
const Generator1& g1, const Generator2& g2, const Generator3& g3) {
1254
return internal::CartesianProductHolder3<Generator1, Generator2, Generator3>(
1258
template <typename Generator1, typename Generator2, typename Generator3,
1259
typename Generator4>
1260
internal::CartesianProductHolder4<Generator1, Generator2, Generator3,
1261
Generator4> Combine(
1262
const Generator1& g1, const Generator2& g2, const Generator3& g3,
1263
const Generator4& g4) {
1264
return internal::CartesianProductHolder4<Generator1, Generator2, Generator3,
1269
template <typename Generator1, typename Generator2, typename Generator3,
1270
typename Generator4, typename Generator5>
1271
internal::CartesianProductHolder5<Generator1, Generator2, Generator3,
1272
Generator4, Generator5> Combine(
1273
const Generator1& g1, const Generator2& g2, const Generator3& g3,
1274
const Generator4& g4, const Generator5& g5) {
1275
return internal::CartesianProductHolder5<Generator1, Generator2, Generator3,
1276
Generator4, Generator5>(
1277
g1, g2, g3, g4, g5);
1280
template <typename Generator1, typename Generator2, typename Generator3,
1281
typename Generator4, typename Generator5, typename Generator6>
1282
internal::CartesianProductHolder6<Generator1, Generator2, Generator3,
1283
Generator4, Generator5, Generator6> Combine(
1284
const Generator1& g1, const Generator2& g2, const Generator3& g3,
1285
const Generator4& g4, const Generator5& g5, const Generator6& g6) {
1286
return internal::CartesianProductHolder6<Generator1, Generator2, Generator3,
1287
Generator4, Generator5, Generator6>(
1288
g1, g2, g3, g4, g5, g6);
1291
template <typename Generator1, typename Generator2, typename Generator3,
1292
typename Generator4, typename Generator5, typename Generator6,
1293
typename Generator7>
1294
internal::CartesianProductHolder7<Generator1, Generator2, Generator3,
1295
Generator4, Generator5, Generator6, Generator7> Combine(
1296
const Generator1& g1, const Generator2& g2, const Generator3& g3,
1297
const Generator4& g4, const Generator5& g5, const Generator6& g6,
1298
const Generator7& g7) {
1299
return internal::CartesianProductHolder7<Generator1, Generator2, Generator3,
1300
Generator4, Generator5, Generator6, Generator7>(
1301
g1, g2, g3, g4, g5, g6, g7);
1304
template <typename Generator1, typename Generator2, typename Generator3,
1305
typename Generator4, typename Generator5, typename Generator6,
1306
typename Generator7, typename Generator8>
1307
internal::CartesianProductHolder8<Generator1, Generator2, Generator3,
1308
Generator4, Generator5, Generator6, Generator7, Generator8> Combine(
1309
const Generator1& g1, const Generator2& g2, const Generator3& g3,
1310
const Generator4& g4, const Generator5& g5, const Generator6& g6,
1311
const Generator7& g7, const Generator8& g8) {
1312
return internal::CartesianProductHolder8<Generator1, Generator2, Generator3,
1313
Generator4, Generator5, Generator6, Generator7, Generator8>(
1314
g1, g2, g3, g4, g5, g6, g7, g8);
1317
template <typename Generator1, typename Generator2, typename Generator3,
1318
typename Generator4, typename Generator5, typename Generator6,
1319
typename Generator7, typename Generator8, typename Generator9>
1320
internal::CartesianProductHolder9<Generator1, Generator2, Generator3,
1321
Generator4, Generator5, Generator6, Generator7, Generator8,
1322
Generator9> Combine(
1323
const Generator1& g1, const Generator2& g2, const Generator3& g3,
1324
const Generator4& g4, const Generator5& g5, const Generator6& g6,
1325
const Generator7& g7, const Generator8& g8, const Generator9& g9) {
1326
return internal::CartesianProductHolder9<Generator1, Generator2, Generator3,
1327
Generator4, Generator5, Generator6, Generator7, Generator8, Generator9>(
1328
g1, g2, g3, g4, g5, g6, g7, g8, g9);
1331
template <typename Generator1, typename Generator2, typename Generator3,
1332
typename Generator4, typename Generator5, typename Generator6,
1333
typename Generator7, typename Generator8, typename Generator9,
1334
typename Generator10>
1335
internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
1336
Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
1337
Generator10> Combine(
1338
const Generator1& g1, const Generator2& g2, const Generator3& g3,
1339
const Generator4& g4, const Generator5& g5, const Generator6& g6,
1340
const Generator7& g7, const Generator8& g8, const Generator9& g9,
1341
const Generator10& g10) {
1342
return internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
1343
Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
1345
g1, g2, g3, g4, g5, g6, g7, g8, g9, g10);
1347
#endif // GTEST_HAS_COMBINE
1351
#define TEST_P(test_case_name, test_name) \
1352
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
1353
: public test_case_name { \
1355
GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \
1356
virtual void TestBody(); \
1358
static int AddToRegistry() { \
1359
::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
1360
GetTestCasePatternHolder<test_case_name>(\
1361
#test_case_name, __FILE__, __LINE__)->AddTestPattern(\
1364
new ::testing::internal::TestMetaFactory< \
1365
GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \
1368
static int gtest_registering_dummy_; \
1369
GTEST_DISALLOW_COPY_AND_ASSIGN_(\
1370
GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \
1372
int GTEST_TEST_CLASS_NAME_(test_case_name, \
1373
test_name)::gtest_registering_dummy_ = \
1374
GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \
1375
void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
1377
#define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \
1378
::testing::internal::ParamGenerator<test_case_name::ParamType> \
1379
gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \
1380
int gtest_##prefix##test_case_name##_dummy_ = \
1381
::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
1382
GetTestCasePatternHolder<test_case_name>(\
1383
#test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\
1385
>est_##prefix##test_case_name##_EvalGenerator_, \
1388
} // namespace testing
1390
#endif // GTEST_HAS_PARAM_TEST
1392
#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_