~ubuntu-branches/ubuntu/oneiric/mozc/oneiric

« back to all changes in this revision

Viewing changes to third_party/gtest/include/gtest/gtest-param-test.h

  • Committer: Bazaar Package Importer
  • Author(s): Nobuhiro Iwamatsu
  • Date: 2010-07-14 03:26:47 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20100714032647-13qjisj6m8cm8jdx
Tags: 0.12.410.102-1
* New upstream release (Closes: #588971).
  - Add mozc-server, mozc-utils-gui and scim-mozc packages.
* Update debian/rules.
  Add --gypdir option to build_mozc.py.
* Update debian/control.
  - Bumped standards-version to 3.9.0.
  - Update description.
* Add mozc icon (Closes: #588972).
* Add patch which revises issue 18.
  ibus_mozc_issue18.patch
* kFreeBSD build support.
  support_kfreebsd.patch

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// This file was GENERATED by a script.  DO NOT EDIT BY HAND!!!
2
 
 
3
 
// Copyright 2008, Google Inc.
4
 
// All rights reserved.
5
 
//
6
 
// Redistribution and use in source and binary forms, with or without
7
 
// modification, are permitted provided that the following conditions are
8
 
// met:
9
 
//
10
 
//     * Redistributions of source code must retain the above copyright
11
 
// notice, this list of conditions and the following disclaimer.
12
 
//     * Redistributions in binary form must reproduce the above
13
 
// copyright notice, this list of conditions and the following disclaimer
14
 
// in the documentation and/or other materials provided with the
15
 
// distribution.
16
 
//     * Neither the name of Google Inc. nor the names of its
17
 
// contributors may be used to endorse or promote products derived from
18
 
// this software without specific prior written permission.
19
 
//
20
 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
 
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
 
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
 
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
 
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
 
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
 
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
 
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
 
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
 
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
 
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
 
//
32
 
// Authors: vladl@google.com (Vlad Losev)
33
 
//
34
 
// Macros and functions for implementing parameterized tests
35
 
// in Google C++ Testing Framework (Google Test)
36
 
//
37
 
// This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
38
 
//
39
 
#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
40
 
#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
41
 
 
42
 
 
43
 
// Value-parameterized tests allow you to test your code with different
44
 
// parameters without writing multiple copies of the same test.
45
 
//
46
 
// Here is how you use value-parameterized tests:
47
 
 
48
 
#if 0
49
 
 
50
 
// To write value-parameterized tests, first you should define a fixture
51
 
// class. It must be derived from testing::TestWithParam<T>, where T is
52
 
// the type of your parameter values. TestWithParam<T> is itself derived
53
 
// from testing::Test. T can be any copyable type. If it's a raw pointer,
54
 
// you are responsible for managing the lifespan of the pointed values.
55
 
 
56
 
class FooTest : public ::testing::TestWithParam<const char*> {
57
 
  // You can implement all the usual class fixture members here.
58
 
};
59
 
 
60
 
// Then, use the TEST_P macro to define as many parameterized tests
61
 
// for this fixture as you want. The _P suffix is for "parameterized"
62
 
// or "pattern", whichever you prefer to think.
63
 
 
64
 
TEST_P(FooTest, DoesBlah) {
65
 
  // Inside a test, access the test parameter with the GetParam() method
66
 
  // of the TestWithParam<T> class:
67
 
  EXPECT_TRUE(foo.Blah(GetParam()));
68
 
  ...
69
 
}
70
 
 
71
 
TEST_P(FooTest, HasBlahBlah) {
72
 
  ...
73
 
}
74
 
 
75
 
// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test
76
 
// case with any set of parameters you want. Google Test defines a number
77
 
// of functions for generating test parameters. They return what we call
78
 
// (surprise!) parameter generators. Here is a  summary of them, which
79
 
// are all in the testing namespace:
80
 
//
81
 
//
82
 
//  Range(begin, end [, step]) - Yields values {begin, begin+step,
83
 
//                               begin+step+step, ...}. The values do not
84
 
//                               include end. step defaults to 1.
85
 
//  Values(v1, v2, ..., vN)    - Yields values {v1, v2, ..., vN}.
86
 
//  ValuesIn(container)        - Yields values from a C-style array, an STL
87
 
//  ValuesIn(begin,end)          container, or an iterator range [begin, end).
88
 
//  Bool()                     - Yields sequence {false, true}.
89
 
//  Combine(g1, g2, ..., gN)   - Yields all combinations (the Cartesian product
90
 
//                               for the math savvy) of the values generated
91
 
//                               by the N generators.
92
 
//
93
 
// For more details, see comments at the definitions of these functions below
94
 
// in this file.
95
 
//
96
 
// The following statement will instantiate tests from the FooTest test case
97
 
// each with parameter values "meeny", "miny", and "moe".
98
 
 
99
 
INSTANTIATE_TEST_CASE_P(InstantiationName,
100
 
                        FooTest,
101
 
                        Values("meeny", "miny", "moe"));
102
 
 
103
 
// To distinguish different instances of the pattern, (yes, you
104
 
// can instantiate it more then once) the first argument to the
105
 
// INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the
106
 
// actual test case name. Remember to pick unique prefixes for different
107
 
// instantiations. The tests from the instantiation above will have
108
 
// these names:
109
 
//
110
 
//    * InstantiationName/FooTest.DoesBlah/0 for "meeny"
111
 
//    * InstantiationName/FooTest.DoesBlah/1 for "miny"
112
 
//    * InstantiationName/FooTest.DoesBlah/2 for "moe"
113
 
//    * InstantiationName/FooTest.HasBlahBlah/0 for "meeny"
114
 
//    * InstantiationName/FooTest.HasBlahBlah/1 for "miny"
115
 
//    * InstantiationName/FooTest.HasBlahBlah/2 for "moe"
116
 
//
117
 
// You can use these names in --gtest_filter.
118
 
//
119
 
// This statement will instantiate all tests from FooTest again, each
120
 
// with parameter values "cat" and "dog":
121
 
 
122
 
const char* pets[] = {"cat", "dog"};
123
 
INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets));
124
 
 
125
 
// The tests from the instantiation above will have these names:
126
 
//
127
 
//    * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat"
128
 
//    * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog"
129
 
//    * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat"
130
 
//    * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog"
131
 
//
132
 
// Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests
133
 
// in the given test case, whether their definitions come before or
134
 
// AFTER the INSTANTIATE_TEST_CASE_P statement.
135
 
//
136
 
// Please also note that generator expressions (including parameters to the
137
 
// generators) are evaluated in InitGoogleTest(), after main() has started.
138
 
// This allows the user on one hand, to adjust generator parameters in order
139
 
// to dynamically determine a set of tests to run and on the other hand,
140
 
// give the user a chance to inspect the generated tests with Google Test
141
 
// reflection API before RUN_ALL_TESTS() is executed.
142
 
//
143
 
// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc
144
 
// for more examples.
145
 
//
146
 
// In the future, we plan to publish the API for defining new parameter
147
 
// generators. But for now this interface remains part of the internal
148
 
// implementation and is subject to change.
149
 
 
150
 
#endif  // 0
151
 
 
152
 
#include <gtest/internal/gtest-port.h>
153
 
 
154
 
#if !GTEST_OS_SYMBIAN
155
 
#include <utility>
156
 
#endif
157
 
 
158
 
// scripts/fuse_gtest.py depends on gtest's own header being #included
159
 
// *unconditionally*.  Therefore these #includes cannot be moved
160
 
// inside #if GTEST_HAS_PARAM_TEST.
161
 
#include <gtest/internal/gtest-internal.h>
162
 
#include <gtest/internal/gtest-param-util.h>
163
 
#include <gtest/internal/gtest-param-util-generated.h>
164
 
 
165
 
#if GTEST_HAS_PARAM_TEST
166
 
 
167
 
namespace testing {
168
 
 
169
 
// Functions producing parameter generators.
170
 
//
171
 
// Google Test uses these generators to produce parameters for value-
172
 
// parameterized tests. When a parameterized test case is instantiated
173
 
// with a particular generator, Google Test creates and runs tests
174
 
// for each element in the sequence produced by the generator.
175
 
//
176
 
// In the following sample, tests from test case FooTest are instantiated
177
 
// each three times with parameter values 3, 5, and 8:
178
 
//
179
 
// class FooTest : public TestWithParam<int> { ... };
180
 
//
181
 
// TEST_P(FooTest, TestThis) {
182
 
// }
183
 
// TEST_P(FooTest, TestThat) {
184
 
// }
185
 
// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8));
186
 
//
187
 
 
188
 
// Range() returns generators providing sequences of values in a range.
189
 
//
190
 
// Synopsis:
191
 
// Range(start, end)
192
 
//   - returns a generator producing a sequence of values {start, start+1,
193
 
//     start+2, ..., }.
194
 
// Range(start, end, step)
195
 
//   - returns a generator producing a sequence of values {start, start+step,
196
 
//     start+step+step, ..., }.
197
 
// Notes:
198
 
//   * The generated sequences never include end. For example, Range(1, 5)
199
 
//     returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2)
200
 
//     returns a generator producing {1, 3, 5, 7}.
201
 
//   * start and end must have the same type. That type may be any integral or
202
 
//     floating-point type or a user defined type satisfying these conditions:
203
 
//     * It must be assignable (have operator=() defined).
204
 
//     * It must have operator+() (operator+(int-compatible type) for
205
 
//       two-operand version).
206
 
//     * It must have operator<() defined.
207
 
//     Elements in the resulting sequences will also have that type.
208
 
//   * Condition start < end must be satisfied in order for resulting sequences
209
 
//     to contain any elements.
210
 
//
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));
215
 
}
216
 
 
217
 
template <typename T>
218
 
internal::ParamGenerator<T> Range(T start, T end) {
219
 
  return Range(start, end, 1);
220
 
}
221
 
 
222
 
// ValuesIn() function allows generation of tests with parameters coming from
223
 
// a container.
224
 
//
225
 
// Synopsis:
226
 
// ValuesIn(const T (&array)[N])
227
 
//   - returns a generator producing sequences with elements from
228
 
//     a C-style array.
229
 
// ValuesIn(const Container& container)
230
 
//   - returns a generator producing sequences with elements from
231
 
//     an STL-style container.
232
 
// ValuesIn(Iterator begin, Iterator end)
233
 
//   - returns a generator producing sequences with elements from
234
 
//     a range [begin, end) defined by a pair of STL-style iterators. These
235
 
//     iterators can also be plain C pointers.
236
 
//
237
 
// Please note that ValuesIn copies the values from the containers
238
 
// passed in and keeps them to generate tests in RUN_ALL_TESTS().
239
 
//
240
 
// Examples:
241
 
//
242
 
// This instantiates tests from test case StringTest
243
 
// each with C-string values of "foo", "bar", and "baz":
244
 
//
245
 
// const char* strings[] = {"foo", "bar", "baz"};
246
 
// INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings));
247
 
//
248
 
// This instantiates tests from test case StlStringTest
249
 
// each with STL strings with values "a" and "b":
250
 
//
251
 
// ::std::vector< ::std::string> GetParameterStrings() {
252
 
//   ::std::vector< ::std::string> v;
253
 
//   v.push_back("a");
254
 
//   v.push_back("b");
255
 
//   return v;
256
 
// }
257
 
//
258
 
// INSTANTIATE_TEST_CASE_P(CharSequence,
259
 
//                         StlStringTest,
260
 
//                         ValuesIn(GetParameterStrings()));
261
 
//
262
 
//
263
 
// This will also instantiate tests from CharTest
264
 
// each with parameter values 'a' and 'b':
265
 
//
266
 
// ::std::list<char> GetParameterChars() {
267
 
//   ::std::list<char> list;
268
 
//   list.push_back('a');
269
 
//   list.push_back('b');
270
 
//   return list;
271
 
// }
272
 
// ::std::list<char> l = GetParameterChars();
273
 
// INSTANTIATE_TEST_CASE_P(CharSequence2,
274
 
//                         CharTest,
275
 
//                         ValuesIn(l.begin(), l.end()));
276
 
//
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
283
 
      ParamType;
284
 
  return internal::ParamGenerator<ParamType>(
285
 
      new internal::ValuesInIteratorRangeGenerator<ParamType>(begin, end));
286
 
}
287
 
 
288
 
template <typename T, size_t N>
289
 
internal::ParamGenerator<T> ValuesIn(const T (&array)[N]) {
290
 
  return ValuesIn(array, array + N);
291
 
}
292
 
 
293
 
template <class Container>
294
 
internal::ParamGenerator<typename Container::value_type> ValuesIn(
295
 
    const Container& container) {
296
 
  return ValuesIn(container.begin(), container.end());
297
 
}
298
 
 
299
 
// Values() allows generating tests from explicitly specified list of
300
 
// parameters.
301
 
//
302
 
// Synopsis:
303
 
// Values(T v1, T v2, ..., T vN)
304
 
//   - returns a generator producing sequences with elements v1, v2, ..., vN.
305
 
//
306
 
// For example, this instantiates tests from test case BarTest each
307
 
// with values "one", "two", and "three":
308
 
//
309
 
// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three"));
310
 
//
311
 
// This instantiates tests from test case BazTest each with values 1, 2, 3.5.
312
 
// The exact type of values will depend on the type of parameter in BazTest.
313
 
//
314
 
// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5));
315
 
//
316
 
// Currently, Values() supports from 1 to 50 parameters.
317
 
//
318
 
template <typename T1>
319
 
internal::ValueArray1<T1> Values(T1 v1) {
320
 
  return internal::ValueArray1<T1>(v1);
321
 
}
322
 
 
323
 
template <typename T1, typename T2>
324
 
internal::ValueArray2<T1, T2> Values(T1 v1, T2 v2) {
325
 
  return internal::ValueArray2<T1, T2>(v1, v2);
326
 
}
327
 
 
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);
331
 
}
332
 
 
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);
336
 
}
337
 
 
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,
340
 
    T5 v5) {
341
 
  return internal::ValueArray5<T1, T2, T3, T4, T5>(v1, v2, v3, v4, v5);
342
 
}
343
 
 
344
 
template <typename T1, typename T2, typename T3, typename T4, typename T5,
345
 
    typename T6>
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);
349
 
}
350
 
 
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,
356
 
      v6, v7);
357
 
}
358
 
 
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,
364
 
      v5, v6, v7, v8);
365
 
}
366
 
 
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);
373
 
}
374
 
 
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);
381
 
}
382
 
 
383
 
template <typename T1, typename T2, typename T3, typename T4, typename T5,
384
 
    typename T6, typename T7, typename T8, typename T9, typename T10,
385
 
    typename T11>
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,
388
 
    T10 v10, T11 v11) {
389
 
  return internal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
390
 
      T11>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11);
391
 
}
392
 
 
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);
401
 
}
402
 
 
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);
411
 
}
412
 
 
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,
421
 
      v14);
422
 
}
423
 
 
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,
432
 
      v13, v14, v15);
433
 
}
434
 
 
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,
438
 
    typename T16>
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,
442
 
    T16 v16) {
443
 
  return internal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
444
 
      T12, T13, T14, T15, T16>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
445
 
      v12, v13, v14, v15, v16);
446
 
}
447
 
 
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,
455
 
    T16 v16, T17 v17) {
456
 
  return internal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
457
 
      T12, T13, T14, T15, T16, T17>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
458
 
      v11, v12, v13, v14, v15, v16, v17);
459
 
}
460
 
 
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);
472
 
}
473
 
 
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);
485
 
}
486
 
 
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);
498
 
}
499
 
 
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,
504
 
    typename T21>
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);
512
 
}
513
 
 
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,
523
 
    T21 v21, T22 v22) {
524
 
  return internal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
525
 
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>(v1, v2, v3, v4,
526
 
      v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
527
 
      v20, v21, v22);
528
 
}
529
 
 
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,
543
 
      v20, v21, v22, v23);
544
 
}
545
 
 
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);
560
 
}
561
 
 
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);
576
 
}
577
 
 
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,
583
 
    typename T26>
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,
589
 
    T26 v26) {
590
 
  return internal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
591
 
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
592
 
      T26>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
593
 
      v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26);
594
 
}
595
 
 
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,
607
 
    T26 v26, T27 v27) {
608
 
  return internal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
609
 
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
610
 
      T26, T27>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14,
611
 
      v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27);
612
 
}
613
 
 
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,
630
 
      v28);
631
 
}
632
 
 
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,
649
 
      v27, v28, v29);
650
 
}
651
 
 
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);
669
 
}
670
 
 
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,
677
 
    typename T31>
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);
689
 
}
690
 
 
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,
704
 
    T32 v32) {
705
 
  return internal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
706
 
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
707
 
      T26, T27, T28, T29, T30, T31, T32>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
708
 
      v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
709
 
      v24, v25, v26, v27, v28, v29, v30, v31, v32);
710
 
}
711
 
 
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,
725
 
    T32 v32, T33 v33) {
726
 
  return internal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
727
 
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
728
 
      T26, T27, T28, T29, T30, T31, T32, T33>(v1, v2, v3, v4, v5, v6, v7, v8,
729
 
      v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
730
 
      v24, v25, v26, v27, v28, v29, v30, v31, v32, v33);
731
 
}
732
 
 
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);
752
 
}
753
 
 
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);
773
 
}
774
 
 
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,
782
 
    typename T36>
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,
795
 
      v34, v35, v36);
796
 
}
797
 
 
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,
813
 
    T37 v37) {
814
 
  return internal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
815
 
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
816
 
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37>(v1, v2, v3,
817
 
      v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
818
 
      v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
819
 
      v34, v35, v36, v37);
820
 
}
821
 
 
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,
837
 
    T37 v37, T38 v38) {
838
 
  return internal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
839
 
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
840
 
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38>(v1, v2,
841
 
      v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18,
842
 
      v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32,
843
 
      v33, v34, v35, v36, v37, v38);
844
 
}
845
 
 
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);
868
 
}
869
 
 
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);
892
 
}
893
 
 
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,
902
 
    typename T41>
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);
917
 
}
918
 
 
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,
936
 
    T42 v42) {
937
 
  return internal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
938
 
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
939
 
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
940
 
      T40, T41, T42>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
941
 
      v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27,
942
 
      v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41,
943
 
      v42);
944
 
}
945
 
 
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,
963
 
    T42 v42, T43 v43) {
964
 
  return internal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
965
 
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
966
 
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
967
 
      T40, T41, T42, T43>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
968
 
      v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26,
969
 
      v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40,
970
 
      v41, v42, v43);
971
 
}
972
 
 
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);
998
 
}
999
 
 
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);
1025
 
}
1026
 
 
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,
1036
 
    typename T46>
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);
1053
 
}
1054
 
 
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);
1081
 
}
1082
 
 
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,
1102
 
    T48 v48) {
1103
 
  return internal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
1104
 
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
1105
 
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
1106
 
      T40, T41, T42, T43, T44, T45, T46, T47, T48>(v1, v2, v3, v4, v5, v6, v7,
1107
 
      v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22,
1108
 
      v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36,
1109
 
      v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48);
1110
 
}
1111
 
 
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);
1139
 
}
1140
 
 
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,
1168
 
      v48, v49, v50);
1169
 
}
1170
 
 
1171
 
// Bool() allows generating tests with parameters in a set of (false, true).
1172
 
//
1173
 
// Synopsis:
1174
 
// Bool()
1175
 
//   - returns a generator producing sequences with elements {false, true}.
1176
 
//
1177
 
// It is useful when testing code that depends on Boolean flags. Combinations
1178
 
// of multiple flags can be tested when several Bool()'s are combined using
1179
 
// Combine() function.
1180
 
//
1181
 
// In the following example all tests in the test case FlagDependentTest
1182
 
// will be instantiated twice with parameters false and true.
1183
 
//
1184
 
// class FlagDependentTest : public testing::TestWithParam<bool> {
1185
 
//   virtual void SetUp() {
1186
 
//     external_flag = GetParam();
1187
 
//   }
1188
 
// }
1189
 
// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool());
1190
 
//
1191
 
inline internal::ParamGenerator<bool> Bool() {
1192
 
  return Values(false, true);
1193
 
}
1194
 
 
1195
 
#if GTEST_HAS_COMBINE
1196
 
// Combine() allows the user to combine two or more sequences to produce
1197
 
// values of a Cartesian product of those sequences' elements.
1198
 
//
1199
 
// Synopsis:
1200
 
// Combine(gen1, gen2, ..., genN)
1201
 
//   - returns a generator producing sequences with elements coming from
1202
 
//     the Cartesian product of elements from the sequences generated by
1203
 
//     gen1, gen2, ..., genN. The sequence elements will have a type of
1204
 
//     tuple<T1, T2, ..., TN> where T1, T2, ..., TN are the types
1205
 
//     of elements from sequences produces by gen1, gen2, ..., genN.
1206
 
//
1207
 
// Combine can have up to 10 arguments. This number is currently limited
1208
 
// by the maximum number of elements in the tuple implementation used by Google
1209
 
// Test.
1210
 
//
1211
 
// Example:
1212
 
//
1213
 
// This will instantiate tests in test case AnimalTest each one with
1214
 
// the parameter values tuple("cat", BLACK), tuple("cat", WHITE),
1215
 
// tuple("dog", BLACK), and tuple("dog", WHITE):
1216
 
//
1217
 
// enum Color { BLACK, GRAY, WHITE };
1218
 
// class AnimalTest
1219
 
//     : public testing::TestWithParam<tuple<const char*, Color> > {...};
1220
 
//
1221
 
// TEST_P(AnimalTest, AnimalLooksNice) {...}
1222
 
//
1223
 
// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest,
1224
 
//                         Combine(Values("cat", "dog"),
1225
 
//                                 Values(BLACK, WHITE)));
1226
 
//
1227
 
// This will instantiate tests in FlagDependentTest with all variations of two
1228
 
// Boolean flags:
1229
 
//
1230
 
// class FlagDependentTest
1231
 
//     : public testing::TestWithParam<tuple(bool, bool)> > {
1232
 
//   virtual void SetUp() {
1233
 
//     // Assigns external_flag_1 and external_flag_2 values from the tuple.
1234
 
//     tie(external_flag_1, external_flag_2) = GetParam();
1235
 
//   }
1236
 
// };
1237
 
//
1238
 
// TEST_P(FlagDependentTest, TestFeature1) {
1239
 
//   // Test your code using external_flag_1 and external_flag_2 here.
1240
 
// }
1241
 
// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest,
1242
 
//                         Combine(Bool(), Bool()));
1243
 
//
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>(
1248
 
      g1, g2);
1249
 
}
1250
 
 
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>(
1255
 
      g1, g2, g3);
1256
 
}
1257
 
 
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,
1265
 
      Generator4>(
1266
 
      g1, g2, g3, g4);
1267
 
}
1268
 
 
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);
1278
 
}
1279
 
 
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);
1289
 
}
1290
 
 
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);
1302
 
}
1303
 
 
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);
1315
 
}
1316
 
 
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);
1329
 
}
1330
 
 
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,
1344
 
      Generator10>(
1345
 
      g1, g2, g3, g4, g5, g6, g7, g8, g9, g10);
1346
 
}
1347
 
#endif  // GTEST_HAS_COMBINE
1348
 
 
1349
 
 
1350
 
 
1351
 
#define TEST_P(test_case_name, test_name) \
1352
 
  class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
1353
 
      : public test_case_name { \
1354
 
   public: \
1355
 
    GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \
1356
 
    virtual void TestBody(); \
1357
 
   private: \
1358
 
    static int AddToRegistry() { \
1359
 
      ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
1360
 
          GetTestCasePatternHolder<test_case_name>(\
1361
 
              #test_case_name, __FILE__, __LINE__)->AddTestPattern(\
1362
 
                  #test_case_name, \
1363
 
                  #test_name, \
1364
 
                  new ::testing::internal::TestMetaFactory< \
1365
 
                      GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \
1366
 
      return 0; \
1367
 
    } \
1368
 
    static int gtest_registering_dummy_; \
1369
 
    GTEST_DISALLOW_COPY_AND_ASSIGN_(\
1370
 
        GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \
1371
 
  }; \
1372
 
  int GTEST_TEST_CLASS_NAME_(test_case_name, \
1373
 
                             test_name)::gtest_registering_dummy_ = \
1374
 
      GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \
1375
 
  void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
1376
 
 
1377
 
#define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \
1378
 
  ::testing::internal::ParamGenerator<test_case_name::ParamType> \
1379
 
      gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \
1380
 
  int gtest_##prefix##test_case_name##_dummy_ = \
1381
 
      ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
1382
 
          GetTestCasePatternHolder<test_case_name>(\
1383
 
              #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\
1384
 
                  #prefix, \
1385
 
                  &gtest_##prefix##test_case_name##_EvalGenerator_, \
1386
 
                  __FILE__, __LINE__)
1387
 
 
1388
 
}  // namespace testing
1389
 
 
1390
 
#endif  // GTEST_HAS_PARAM_TEST
1391
 
 
1392
 
#endif  // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_