1 // 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
2 //
3 // Copyright (C) 2007-2014 Free Software Foundation, Inc.
4 //
5 // This file is part of the GNU ISO C++ Library.  This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 3, or (at your option)
9 // any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING3.  If not see
18 // <http://www.gnu.org/licenses/>.
19 
20 //  hyperg
21 
22 
23 //  Compare against values generated by the GNU Scientific Library.
24 //  The GSL can be found on the web: http://www.gnu.org/software/gsl/
25 
26 #include <tr1/cmath>
27 #if defined(__TEST_DEBUG)
28 #include <iostream>
29 #define VERIFY(A) \
30 if (!(A)) \
31   { \
32     std::cout << "line " << __LINE__ \
33       << "  max_abs_frac = " << max_abs_frac \
34       << std::endl; \
35   }
36 #else
37 #include <testsuite_hooks.h>
38 #endif
39 #include "../testcase.h"
40 
41 
42 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
43 testcase_hyperg<double> data001[] = {
44   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
45           2.0000000000000000, -0.90000000000000002 },
46   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
47           2.0000000000000000, -0.80000000000000004 },
48   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
49           2.0000000000000000, -0.69999999999999996 },
50   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
51           2.0000000000000000, -0.59999999999999998 },
52   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
53           2.0000000000000000, -0.50000000000000000 },
54   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
55           2.0000000000000000, -0.40000000000000002 },
56   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
57           2.0000000000000000, -0.30000000000000004 },
58   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
59           2.0000000000000000, -0.19999999999999996 },
60   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
61           2.0000000000000000, -0.099999999999999978 },
62   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
63           2.0000000000000000, 0.0000000000000000 },
64   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
65           2.0000000000000000, 0.10000000000000009 },
66   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
67           2.0000000000000000, 0.19999999999999996 },
68   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
69           2.0000000000000000, 0.30000000000000004 },
70   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
71           2.0000000000000000, 0.39999999999999991 },
72   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
73           2.0000000000000000, 0.50000000000000000 },
74   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
75           2.0000000000000000, 0.60000000000000009 },
76   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
77           2.0000000000000000, 0.69999999999999996 },
78   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
79           2.0000000000000000, 0.80000000000000004 },
80   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
81           2.0000000000000000, 0.89999999999999991 },
82 };
83 
84 // Test function for a=0.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
85 template <typename Tp>
test001()86 void test001()
87 {
88   const Tp eps = std::numeric_limits<Tp>::epsilon();
89   Tp max_abs_diff = -Tp(1);
90   Tp max_abs_frac = -Tp(1);
91   unsigned int num_datum = sizeof(data001)
92                          / sizeof(testcase_hyperg<double>);
93   for (unsigned int i = 0; i < num_datum; ++i)
94     {
95       const Tp f = std::tr1::hyperg(Tp(data001[i].a), Tp(data001[i].b),
96                    Tp(data001[i].c), Tp(data001[i].x));
97       const Tp f0 = data001[i].f0;
98       const Tp diff = f - f0;
99       if (std::abs(diff) > max_abs_diff)
100         max_abs_diff = std::abs(diff);
101       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
102         {
103           const Tp frac = diff / f0;
104           if (std::abs(frac) > max_abs_frac)
105             max_abs_frac = std::abs(frac);
106         }
107     }
108   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
109 }
110 
111 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
112 testcase_hyperg<double> data002[] = {
113   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
114           4.0000000000000000, -0.90000000000000002 },
115   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
116           4.0000000000000000, -0.80000000000000004 },
117   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
118           4.0000000000000000, -0.69999999999999996 },
119   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
120           4.0000000000000000, -0.59999999999999998 },
121   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
122           4.0000000000000000, -0.50000000000000000 },
123   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
124           4.0000000000000000, -0.40000000000000002 },
125   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
126           4.0000000000000000, -0.30000000000000004 },
127   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
128           4.0000000000000000, -0.19999999999999996 },
129   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
130           4.0000000000000000, -0.099999999999999978 },
131   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
132           4.0000000000000000, 0.0000000000000000 },
133   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
134           4.0000000000000000, 0.10000000000000009 },
135   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
136           4.0000000000000000, 0.19999999999999996 },
137   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
138           4.0000000000000000, 0.30000000000000004 },
139   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
140           4.0000000000000000, 0.39999999999999991 },
141   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
142           4.0000000000000000, 0.50000000000000000 },
143   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
144           4.0000000000000000, 0.60000000000000009 },
145   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
146           4.0000000000000000, 0.69999999999999996 },
147   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
148           4.0000000000000000, 0.80000000000000004 },
149   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
150           4.0000000000000000, 0.89999999999999991 },
151 };
152 
153 // Test function for a=0.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
154 template <typename Tp>
test002()155 void test002()
156 {
157   const Tp eps = std::numeric_limits<Tp>::epsilon();
158   Tp max_abs_diff = -Tp(1);
159   Tp max_abs_frac = -Tp(1);
160   unsigned int num_datum = sizeof(data002)
161                          / sizeof(testcase_hyperg<double>);
162   for (unsigned int i = 0; i < num_datum; ++i)
163     {
164       const Tp f = std::tr1::hyperg(Tp(data002[i].a), Tp(data002[i].b),
165                    Tp(data002[i].c), Tp(data002[i].x));
166       const Tp f0 = data002[i].f0;
167       const Tp diff = f - f0;
168       if (std::abs(diff) > max_abs_diff)
169         max_abs_diff = std::abs(diff);
170       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
171         {
172           const Tp frac = diff / f0;
173           if (std::abs(frac) > max_abs_frac)
174             max_abs_frac = std::abs(frac);
175         }
176     }
177   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
178 }
179 
180 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
181 testcase_hyperg<double> data003[] = {
182   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
183           6.0000000000000000, -0.90000000000000002 },
184   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
185           6.0000000000000000, -0.80000000000000004 },
186   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
187           6.0000000000000000, -0.69999999999999996 },
188   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
189           6.0000000000000000, -0.59999999999999998 },
190   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
191           6.0000000000000000, -0.50000000000000000 },
192   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
193           6.0000000000000000, -0.40000000000000002 },
194   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
195           6.0000000000000000, -0.30000000000000004 },
196   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
197           6.0000000000000000, -0.19999999999999996 },
198   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
199           6.0000000000000000, -0.099999999999999978 },
200   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
201           6.0000000000000000, 0.0000000000000000 },
202   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
203           6.0000000000000000, 0.10000000000000009 },
204   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
205           6.0000000000000000, 0.19999999999999996 },
206   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
207           6.0000000000000000, 0.30000000000000004 },
208   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
209           6.0000000000000000, 0.39999999999999991 },
210   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
211           6.0000000000000000, 0.50000000000000000 },
212   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
213           6.0000000000000000, 0.60000000000000009 },
214   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
215           6.0000000000000000, 0.69999999999999996 },
216   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
217           6.0000000000000000, 0.80000000000000004 },
218   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
219           6.0000000000000000, 0.89999999999999991 },
220 };
221 
222 // Test function for a=0.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
223 template <typename Tp>
test003()224 void test003()
225 {
226   const Tp eps = std::numeric_limits<Tp>::epsilon();
227   Tp max_abs_diff = -Tp(1);
228   Tp max_abs_frac = -Tp(1);
229   unsigned int num_datum = sizeof(data003)
230                          / sizeof(testcase_hyperg<double>);
231   for (unsigned int i = 0; i < num_datum; ++i)
232     {
233       const Tp f = std::tr1::hyperg(Tp(data003[i].a), Tp(data003[i].b),
234                    Tp(data003[i].c), Tp(data003[i].x));
235       const Tp f0 = data003[i].f0;
236       const Tp diff = f - f0;
237       if (std::abs(diff) > max_abs_diff)
238         max_abs_diff = std::abs(diff);
239       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
240         {
241           const Tp frac = diff / f0;
242           if (std::abs(frac) > max_abs_frac)
243             max_abs_frac = std::abs(frac);
244         }
245     }
246   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
247 }
248 
249 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
250 testcase_hyperg<double> data004[] = {
251   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
252           8.0000000000000000, -0.90000000000000002 },
253   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
254           8.0000000000000000, -0.80000000000000004 },
255   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
256           8.0000000000000000, -0.69999999999999996 },
257   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
258           8.0000000000000000, -0.59999999999999998 },
259   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
260           8.0000000000000000, -0.50000000000000000 },
261   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
262           8.0000000000000000, -0.40000000000000002 },
263   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
264           8.0000000000000000, -0.30000000000000004 },
265   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
266           8.0000000000000000, -0.19999999999999996 },
267   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
268           8.0000000000000000, -0.099999999999999978 },
269   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
270           8.0000000000000000, 0.0000000000000000 },
271   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
272           8.0000000000000000, 0.10000000000000009 },
273   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
274           8.0000000000000000, 0.19999999999999996 },
275   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
276           8.0000000000000000, 0.30000000000000004 },
277   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
278           8.0000000000000000, 0.39999999999999991 },
279   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
280           8.0000000000000000, 0.50000000000000000 },
281   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
282           8.0000000000000000, 0.60000000000000009 },
283   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
284           8.0000000000000000, 0.69999999999999996 },
285   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
286           8.0000000000000000, 0.80000000000000004 },
287   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
288           8.0000000000000000, 0.89999999999999991 },
289 };
290 
291 // Test function for a=0.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
292 template <typename Tp>
test004()293 void test004()
294 {
295   const Tp eps = std::numeric_limits<Tp>::epsilon();
296   Tp max_abs_diff = -Tp(1);
297   Tp max_abs_frac = -Tp(1);
298   unsigned int num_datum = sizeof(data004)
299                          / sizeof(testcase_hyperg<double>);
300   for (unsigned int i = 0; i < num_datum; ++i)
301     {
302       const Tp f = std::tr1::hyperg(Tp(data004[i].a), Tp(data004[i].b),
303                    Tp(data004[i].c), Tp(data004[i].x));
304       const Tp f0 = data004[i].f0;
305       const Tp diff = f - f0;
306       if (std::abs(diff) > max_abs_diff)
307         max_abs_diff = std::abs(diff);
308       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
309         {
310           const Tp frac = diff / f0;
311           if (std::abs(frac) > max_abs_frac)
312             max_abs_frac = std::abs(frac);
313         }
314     }
315   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
316 }
317 
318 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
319 testcase_hyperg<double> data005[] = {
320   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
321           10.000000000000000, -0.90000000000000002 },
322   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
323           10.000000000000000, -0.80000000000000004 },
324   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
325           10.000000000000000, -0.69999999999999996 },
326   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
327           10.000000000000000, -0.59999999999999998 },
328   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
329           10.000000000000000, -0.50000000000000000 },
330   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
331           10.000000000000000, -0.40000000000000002 },
332   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
333           10.000000000000000, -0.30000000000000004 },
334   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
335           10.000000000000000, -0.19999999999999996 },
336   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
337           10.000000000000000, -0.099999999999999978 },
338   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
339           10.000000000000000, 0.0000000000000000 },
340   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
341           10.000000000000000, 0.10000000000000009 },
342   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
343           10.000000000000000, 0.19999999999999996 },
344   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
345           10.000000000000000, 0.30000000000000004 },
346   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
347           10.000000000000000, 0.39999999999999991 },
348   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
349           10.000000000000000, 0.50000000000000000 },
350   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
351           10.000000000000000, 0.60000000000000009 },
352   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
353           10.000000000000000, 0.69999999999999996 },
354   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
355           10.000000000000000, 0.80000000000000004 },
356   { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
357           10.000000000000000, 0.89999999999999991 },
358 };
359 
360 // Test function for a=0.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
361 template <typename Tp>
test005()362 void test005()
363 {
364   const Tp eps = std::numeric_limits<Tp>::epsilon();
365   Tp max_abs_diff = -Tp(1);
366   Tp max_abs_frac = -Tp(1);
367   unsigned int num_datum = sizeof(data005)
368                          / sizeof(testcase_hyperg<double>);
369   for (unsigned int i = 0; i < num_datum; ++i)
370     {
371       const Tp f = std::tr1::hyperg(Tp(data005[i].a), Tp(data005[i].b),
372                    Tp(data005[i].c), Tp(data005[i].x));
373       const Tp f0 = data005[i].f0;
374       const Tp diff = f - f0;
375       if (std::abs(diff) > max_abs_diff)
376         max_abs_diff = std::abs(diff);
377       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
378         {
379           const Tp frac = diff / f0;
380           if (std::abs(frac) > max_abs_frac)
381             max_abs_frac = std::abs(frac);
382         }
383     }
384   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
385 }
386 
387 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
388 testcase_hyperg<double> data006[] = {
389   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
390           2.0000000000000000, -0.90000000000000002 },
391   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
392           2.0000000000000000, -0.80000000000000004 },
393   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
394           2.0000000000000000, -0.69999999999999996 },
395   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
396           2.0000000000000000, -0.59999999999999998 },
397   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
398           2.0000000000000000, -0.50000000000000000 },
399   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
400           2.0000000000000000, -0.40000000000000002 },
401   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
402           2.0000000000000000, -0.30000000000000004 },
403   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
404           2.0000000000000000, -0.19999999999999996 },
405   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
406           2.0000000000000000, -0.099999999999999978 },
407   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
408           2.0000000000000000, 0.0000000000000000 },
409   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
410           2.0000000000000000, 0.10000000000000009 },
411   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
412           2.0000000000000000, 0.19999999999999996 },
413   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
414           2.0000000000000000, 0.30000000000000004 },
415   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
416           2.0000000000000000, 0.39999999999999991 },
417   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
418           2.0000000000000000, 0.50000000000000000 },
419   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
420           2.0000000000000000, 0.60000000000000009 },
421   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
422           2.0000000000000000, 0.69999999999999996 },
423   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
424           2.0000000000000000, 0.80000000000000004 },
425   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
426           2.0000000000000000, 0.89999999999999991 },
427 };
428 
429 // Test function for a=0.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
430 template <typename Tp>
test006()431 void test006()
432 {
433   const Tp eps = std::numeric_limits<Tp>::epsilon();
434   Tp max_abs_diff = -Tp(1);
435   Tp max_abs_frac = -Tp(1);
436   unsigned int num_datum = sizeof(data006)
437                          / sizeof(testcase_hyperg<double>);
438   for (unsigned int i = 0; i < num_datum; ++i)
439     {
440       const Tp f = std::tr1::hyperg(Tp(data006[i].a), Tp(data006[i].b),
441                    Tp(data006[i].c), Tp(data006[i].x));
442       const Tp f0 = data006[i].f0;
443       const Tp diff = f - f0;
444       if (std::abs(diff) > max_abs_diff)
445         max_abs_diff = std::abs(diff);
446       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
447         {
448           const Tp frac = diff / f0;
449           if (std::abs(frac) > max_abs_frac)
450             max_abs_frac = std::abs(frac);
451         }
452     }
453   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
454 }
455 
456 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
457 testcase_hyperg<double> data007[] = {
458   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
459           4.0000000000000000, -0.90000000000000002 },
460   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
461           4.0000000000000000, -0.80000000000000004 },
462   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
463           4.0000000000000000, -0.69999999999999996 },
464   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
465           4.0000000000000000, -0.59999999999999998 },
466   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
467           4.0000000000000000, -0.50000000000000000 },
468   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
469           4.0000000000000000, -0.40000000000000002 },
470   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
471           4.0000000000000000, -0.30000000000000004 },
472   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
473           4.0000000000000000, -0.19999999999999996 },
474   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
475           4.0000000000000000, -0.099999999999999978 },
476   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
477           4.0000000000000000, 0.0000000000000000 },
478   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
479           4.0000000000000000, 0.10000000000000009 },
480   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
481           4.0000000000000000, 0.19999999999999996 },
482   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
483           4.0000000000000000, 0.30000000000000004 },
484   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
485           4.0000000000000000, 0.39999999999999991 },
486   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
487           4.0000000000000000, 0.50000000000000000 },
488   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
489           4.0000000000000000, 0.60000000000000009 },
490   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
491           4.0000000000000000, 0.69999999999999996 },
492   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
493           4.0000000000000000, 0.80000000000000004 },
494   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
495           4.0000000000000000, 0.89999999999999991 },
496 };
497 
498 // Test function for a=0.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
499 template <typename Tp>
test007()500 void test007()
501 {
502   const Tp eps = std::numeric_limits<Tp>::epsilon();
503   Tp max_abs_diff = -Tp(1);
504   Tp max_abs_frac = -Tp(1);
505   unsigned int num_datum = sizeof(data007)
506                          / sizeof(testcase_hyperg<double>);
507   for (unsigned int i = 0; i < num_datum; ++i)
508     {
509       const Tp f = std::tr1::hyperg(Tp(data007[i].a), Tp(data007[i].b),
510                    Tp(data007[i].c), Tp(data007[i].x));
511       const Tp f0 = data007[i].f0;
512       const Tp diff = f - f0;
513       if (std::abs(diff) > max_abs_diff)
514         max_abs_diff = std::abs(diff);
515       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
516         {
517           const Tp frac = diff / f0;
518           if (std::abs(frac) > max_abs_frac)
519             max_abs_frac = std::abs(frac);
520         }
521     }
522   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
523 }
524 
525 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
526 testcase_hyperg<double> data008[] = {
527   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
528           6.0000000000000000, -0.90000000000000002 },
529   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
530           6.0000000000000000, -0.80000000000000004 },
531   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
532           6.0000000000000000, -0.69999999999999996 },
533   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
534           6.0000000000000000, -0.59999999999999998 },
535   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
536           6.0000000000000000, -0.50000000000000000 },
537   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
538           6.0000000000000000, -0.40000000000000002 },
539   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
540           6.0000000000000000, -0.30000000000000004 },
541   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
542           6.0000000000000000, -0.19999999999999996 },
543   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
544           6.0000000000000000, -0.099999999999999978 },
545   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
546           6.0000000000000000, 0.0000000000000000 },
547   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
548           6.0000000000000000, 0.10000000000000009 },
549   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
550           6.0000000000000000, 0.19999999999999996 },
551   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
552           6.0000000000000000, 0.30000000000000004 },
553   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
554           6.0000000000000000, 0.39999999999999991 },
555   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
556           6.0000000000000000, 0.50000000000000000 },
557   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
558           6.0000000000000000, 0.60000000000000009 },
559   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
560           6.0000000000000000, 0.69999999999999996 },
561   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
562           6.0000000000000000, 0.80000000000000004 },
563   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
564           6.0000000000000000, 0.89999999999999991 },
565 };
566 
567 // Test function for a=0.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
568 template <typename Tp>
test008()569 void test008()
570 {
571   const Tp eps = std::numeric_limits<Tp>::epsilon();
572   Tp max_abs_diff = -Tp(1);
573   Tp max_abs_frac = -Tp(1);
574   unsigned int num_datum = sizeof(data008)
575                          / sizeof(testcase_hyperg<double>);
576   for (unsigned int i = 0; i < num_datum; ++i)
577     {
578       const Tp f = std::tr1::hyperg(Tp(data008[i].a), Tp(data008[i].b),
579                    Tp(data008[i].c), Tp(data008[i].x));
580       const Tp f0 = data008[i].f0;
581       const Tp diff = f - f0;
582       if (std::abs(diff) > max_abs_diff)
583         max_abs_diff = std::abs(diff);
584       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
585         {
586           const Tp frac = diff / f0;
587           if (std::abs(frac) > max_abs_frac)
588             max_abs_frac = std::abs(frac);
589         }
590     }
591   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
592 }
593 
594 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
595 testcase_hyperg<double> data009[] = {
596   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
597           8.0000000000000000, -0.90000000000000002 },
598   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
599           8.0000000000000000, -0.80000000000000004 },
600   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
601           8.0000000000000000, -0.69999999999999996 },
602   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
603           8.0000000000000000, -0.59999999999999998 },
604   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
605           8.0000000000000000, -0.50000000000000000 },
606   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
607           8.0000000000000000, -0.40000000000000002 },
608   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
609           8.0000000000000000, -0.30000000000000004 },
610   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
611           8.0000000000000000, -0.19999999999999996 },
612   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
613           8.0000000000000000, -0.099999999999999978 },
614   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
615           8.0000000000000000, 0.0000000000000000 },
616   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
617           8.0000000000000000, 0.10000000000000009 },
618   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
619           8.0000000000000000, 0.19999999999999996 },
620   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
621           8.0000000000000000, 0.30000000000000004 },
622   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
623           8.0000000000000000, 0.39999999999999991 },
624   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
625           8.0000000000000000, 0.50000000000000000 },
626   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
627           8.0000000000000000, 0.60000000000000009 },
628   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
629           8.0000000000000000, 0.69999999999999996 },
630   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
631           8.0000000000000000, 0.80000000000000004 },
632   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
633           8.0000000000000000, 0.89999999999999991 },
634 };
635 
636 // Test function for a=0.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
637 template <typename Tp>
test009()638 void test009()
639 {
640   const Tp eps = std::numeric_limits<Tp>::epsilon();
641   Tp max_abs_diff = -Tp(1);
642   Tp max_abs_frac = -Tp(1);
643   unsigned int num_datum = sizeof(data009)
644                          / sizeof(testcase_hyperg<double>);
645   for (unsigned int i = 0; i < num_datum; ++i)
646     {
647       const Tp f = std::tr1::hyperg(Tp(data009[i].a), Tp(data009[i].b),
648                    Tp(data009[i].c), Tp(data009[i].x));
649       const Tp f0 = data009[i].f0;
650       const Tp diff = f - f0;
651       if (std::abs(diff) > max_abs_diff)
652         max_abs_diff = std::abs(diff);
653       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
654         {
655           const Tp frac = diff / f0;
656           if (std::abs(frac) > max_abs_frac)
657             max_abs_frac = std::abs(frac);
658         }
659     }
660   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
661 }
662 
663 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
664 testcase_hyperg<double> data010[] = {
665   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
666           10.000000000000000, -0.90000000000000002 },
667   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
668           10.000000000000000, -0.80000000000000004 },
669   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
670           10.000000000000000, -0.69999999999999996 },
671   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
672           10.000000000000000, -0.59999999999999998 },
673   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
674           10.000000000000000, -0.50000000000000000 },
675   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
676           10.000000000000000, -0.40000000000000002 },
677   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
678           10.000000000000000, -0.30000000000000004 },
679   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
680           10.000000000000000, -0.19999999999999996 },
681   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
682           10.000000000000000, -0.099999999999999978 },
683   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
684           10.000000000000000, 0.0000000000000000 },
685   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
686           10.000000000000000, 0.10000000000000009 },
687   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
688           10.000000000000000, 0.19999999999999996 },
689   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
690           10.000000000000000, 0.30000000000000004 },
691   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
692           10.000000000000000, 0.39999999999999991 },
693   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
694           10.000000000000000, 0.50000000000000000 },
695   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
696           10.000000000000000, 0.60000000000000009 },
697   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
698           10.000000000000000, 0.69999999999999996 },
699   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
700           10.000000000000000, 0.80000000000000004 },
701   { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
702           10.000000000000000, 0.89999999999999991 },
703 };
704 
705 // Test function for a=0.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
706 template <typename Tp>
test010()707 void test010()
708 {
709   const Tp eps = std::numeric_limits<Tp>::epsilon();
710   Tp max_abs_diff = -Tp(1);
711   Tp max_abs_frac = -Tp(1);
712   unsigned int num_datum = sizeof(data010)
713                          / sizeof(testcase_hyperg<double>);
714   for (unsigned int i = 0; i < num_datum; ++i)
715     {
716       const Tp f = std::tr1::hyperg(Tp(data010[i].a), Tp(data010[i].b),
717                    Tp(data010[i].c), Tp(data010[i].x));
718       const Tp f0 = data010[i].f0;
719       const Tp diff = f - f0;
720       if (std::abs(diff) > max_abs_diff)
721         max_abs_diff = std::abs(diff);
722       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
723         {
724           const Tp frac = diff / f0;
725           if (std::abs(frac) > max_abs_frac)
726             max_abs_frac = std::abs(frac);
727         }
728     }
729   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
730 }
731 
732 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
733 testcase_hyperg<double> data011[] = {
734   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
735           2.0000000000000000, -0.90000000000000002 },
736   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
737           2.0000000000000000, -0.80000000000000004 },
738   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
739           2.0000000000000000, -0.69999999999999996 },
740   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
741           2.0000000000000000, -0.59999999999999998 },
742   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
743           2.0000000000000000, -0.50000000000000000 },
744   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
745           2.0000000000000000, -0.40000000000000002 },
746   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
747           2.0000000000000000, -0.30000000000000004 },
748   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
749           2.0000000000000000, -0.19999999999999996 },
750   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
751           2.0000000000000000, -0.099999999999999978 },
752   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
753           2.0000000000000000, 0.0000000000000000 },
754   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
755           2.0000000000000000, 0.10000000000000009 },
756   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
757           2.0000000000000000, 0.19999999999999996 },
758   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
759           2.0000000000000000, 0.30000000000000004 },
760   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
761           2.0000000000000000, 0.39999999999999991 },
762   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
763           2.0000000000000000, 0.50000000000000000 },
764   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
765           2.0000000000000000, 0.60000000000000009 },
766   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
767           2.0000000000000000, 0.69999999999999996 },
768   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
769           2.0000000000000000, 0.80000000000000004 },
770   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
771           2.0000000000000000, 0.89999999999999991 },
772 };
773 
774 // Test function for a=0.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
775 template <typename Tp>
test011()776 void test011()
777 {
778   const Tp eps = std::numeric_limits<Tp>::epsilon();
779   Tp max_abs_diff = -Tp(1);
780   Tp max_abs_frac = -Tp(1);
781   unsigned int num_datum = sizeof(data011)
782                          / sizeof(testcase_hyperg<double>);
783   for (unsigned int i = 0; i < num_datum; ++i)
784     {
785       const Tp f = std::tr1::hyperg(Tp(data011[i].a), Tp(data011[i].b),
786                    Tp(data011[i].c), Tp(data011[i].x));
787       const Tp f0 = data011[i].f0;
788       const Tp diff = f - f0;
789       if (std::abs(diff) > max_abs_diff)
790         max_abs_diff = std::abs(diff);
791       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
792         {
793           const Tp frac = diff / f0;
794           if (std::abs(frac) > max_abs_frac)
795             max_abs_frac = std::abs(frac);
796         }
797     }
798   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
799 }
800 
801 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
802 testcase_hyperg<double> data012[] = {
803   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
804           4.0000000000000000, -0.90000000000000002 },
805   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
806           4.0000000000000000, -0.80000000000000004 },
807   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
808           4.0000000000000000, -0.69999999999999996 },
809   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
810           4.0000000000000000, -0.59999999999999998 },
811   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
812           4.0000000000000000, -0.50000000000000000 },
813   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
814           4.0000000000000000, -0.40000000000000002 },
815   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
816           4.0000000000000000, -0.30000000000000004 },
817   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
818           4.0000000000000000, -0.19999999999999996 },
819   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
820           4.0000000000000000, -0.099999999999999978 },
821   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
822           4.0000000000000000, 0.0000000000000000 },
823   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
824           4.0000000000000000, 0.10000000000000009 },
825   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
826           4.0000000000000000, 0.19999999999999996 },
827   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
828           4.0000000000000000, 0.30000000000000004 },
829   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
830           4.0000000000000000, 0.39999999999999991 },
831   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
832           4.0000000000000000, 0.50000000000000000 },
833   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
834           4.0000000000000000, 0.60000000000000009 },
835   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
836           4.0000000000000000, 0.69999999999999996 },
837   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
838           4.0000000000000000, 0.80000000000000004 },
839   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
840           4.0000000000000000, 0.89999999999999991 },
841 };
842 
843 // Test function for a=0.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
844 template <typename Tp>
test012()845 void test012()
846 {
847   const Tp eps = std::numeric_limits<Tp>::epsilon();
848   Tp max_abs_diff = -Tp(1);
849   Tp max_abs_frac = -Tp(1);
850   unsigned int num_datum = sizeof(data012)
851                          / sizeof(testcase_hyperg<double>);
852   for (unsigned int i = 0; i < num_datum; ++i)
853     {
854       const Tp f = std::tr1::hyperg(Tp(data012[i].a), Tp(data012[i].b),
855                    Tp(data012[i].c), Tp(data012[i].x));
856       const Tp f0 = data012[i].f0;
857       const Tp diff = f - f0;
858       if (std::abs(diff) > max_abs_diff)
859         max_abs_diff = std::abs(diff);
860       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
861         {
862           const Tp frac = diff / f0;
863           if (std::abs(frac) > max_abs_frac)
864             max_abs_frac = std::abs(frac);
865         }
866     }
867   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
868 }
869 
870 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
871 testcase_hyperg<double> data013[] = {
872   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
873           6.0000000000000000, -0.90000000000000002 },
874   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
875           6.0000000000000000, -0.80000000000000004 },
876   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
877           6.0000000000000000, -0.69999999999999996 },
878   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
879           6.0000000000000000, -0.59999999999999998 },
880   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
881           6.0000000000000000, -0.50000000000000000 },
882   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
883           6.0000000000000000, -0.40000000000000002 },
884   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
885           6.0000000000000000, -0.30000000000000004 },
886   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
887           6.0000000000000000, -0.19999999999999996 },
888   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
889           6.0000000000000000, -0.099999999999999978 },
890   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
891           6.0000000000000000, 0.0000000000000000 },
892   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
893           6.0000000000000000, 0.10000000000000009 },
894   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
895           6.0000000000000000, 0.19999999999999996 },
896   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
897           6.0000000000000000, 0.30000000000000004 },
898   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
899           6.0000000000000000, 0.39999999999999991 },
900   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
901           6.0000000000000000, 0.50000000000000000 },
902   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
903           6.0000000000000000, 0.60000000000000009 },
904   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
905           6.0000000000000000, 0.69999999999999996 },
906   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
907           6.0000000000000000, 0.80000000000000004 },
908   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
909           6.0000000000000000, 0.89999999999999991 },
910 };
911 
912 // Test function for a=0.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
913 template <typename Tp>
test013()914 void test013()
915 {
916   const Tp eps = std::numeric_limits<Tp>::epsilon();
917   Tp max_abs_diff = -Tp(1);
918   Tp max_abs_frac = -Tp(1);
919   unsigned int num_datum = sizeof(data013)
920                          / sizeof(testcase_hyperg<double>);
921   for (unsigned int i = 0; i < num_datum; ++i)
922     {
923       const Tp f = std::tr1::hyperg(Tp(data013[i].a), Tp(data013[i].b),
924                    Tp(data013[i].c), Tp(data013[i].x));
925       const Tp f0 = data013[i].f0;
926       const Tp diff = f - f0;
927       if (std::abs(diff) > max_abs_diff)
928         max_abs_diff = std::abs(diff);
929       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
930         {
931           const Tp frac = diff / f0;
932           if (std::abs(frac) > max_abs_frac)
933             max_abs_frac = std::abs(frac);
934         }
935     }
936   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
937 }
938 
939 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
940 testcase_hyperg<double> data014[] = {
941   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
942           8.0000000000000000, -0.90000000000000002 },
943   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
944           8.0000000000000000, -0.80000000000000004 },
945   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
946           8.0000000000000000, -0.69999999999999996 },
947   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
948           8.0000000000000000, -0.59999999999999998 },
949   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
950           8.0000000000000000, -0.50000000000000000 },
951   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
952           8.0000000000000000, -0.40000000000000002 },
953   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
954           8.0000000000000000, -0.30000000000000004 },
955   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
956           8.0000000000000000, -0.19999999999999996 },
957   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
958           8.0000000000000000, -0.099999999999999978 },
959   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
960           8.0000000000000000, 0.0000000000000000 },
961   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
962           8.0000000000000000, 0.10000000000000009 },
963   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
964           8.0000000000000000, 0.19999999999999996 },
965   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
966           8.0000000000000000, 0.30000000000000004 },
967   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
968           8.0000000000000000, 0.39999999999999991 },
969   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
970           8.0000000000000000, 0.50000000000000000 },
971   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
972           8.0000000000000000, 0.60000000000000009 },
973   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
974           8.0000000000000000, 0.69999999999999996 },
975   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
976           8.0000000000000000, 0.80000000000000004 },
977   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
978           8.0000000000000000, 0.89999999999999991 },
979 };
980 
981 // Test function for a=0.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
982 template <typename Tp>
test014()983 void test014()
984 {
985   const Tp eps = std::numeric_limits<Tp>::epsilon();
986   Tp max_abs_diff = -Tp(1);
987   Tp max_abs_frac = -Tp(1);
988   unsigned int num_datum = sizeof(data014)
989                          / sizeof(testcase_hyperg<double>);
990   for (unsigned int i = 0; i < num_datum; ++i)
991     {
992       const Tp f = std::tr1::hyperg(Tp(data014[i].a), Tp(data014[i].b),
993                    Tp(data014[i].c), Tp(data014[i].x));
994       const Tp f0 = data014[i].f0;
995       const Tp diff = f - f0;
996       if (std::abs(diff) > max_abs_diff)
997         max_abs_diff = std::abs(diff);
998       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
999         {
1000           const Tp frac = diff / f0;
1001           if (std::abs(frac) > max_abs_frac)
1002             max_abs_frac = std::abs(frac);
1003         }
1004     }
1005   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1006 }
1007 
1008 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
1009 testcase_hyperg<double> data015[] = {
1010   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1011           10.000000000000000, -0.90000000000000002 },
1012   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1013           10.000000000000000, -0.80000000000000004 },
1014   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1015           10.000000000000000, -0.69999999999999996 },
1016   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1017           10.000000000000000, -0.59999999999999998 },
1018   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1019           10.000000000000000, -0.50000000000000000 },
1020   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1021           10.000000000000000, -0.40000000000000002 },
1022   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1023           10.000000000000000, -0.30000000000000004 },
1024   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1025           10.000000000000000, -0.19999999999999996 },
1026   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1027           10.000000000000000, -0.099999999999999978 },
1028   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1029           10.000000000000000, 0.0000000000000000 },
1030   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1031           10.000000000000000, 0.10000000000000009 },
1032   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1033           10.000000000000000, 0.19999999999999996 },
1034   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1035           10.000000000000000, 0.30000000000000004 },
1036   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1037           10.000000000000000, 0.39999999999999991 },
1038   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1039           10.000000000000000, 0.50000000000000000 },
1040   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1041           10.000000000000000, 0.60000000000000009 },
1042   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1043           10.000000000000000, 0.69999999999999996 },
1044   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1045           10.000000000000000, 0.80000000000000004 },
1046   { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1047           10.000000000000000, 0.89999999999999991 },
1048 };
1049 
1050 // Test function for a=0.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
1051 template <typename Tp>
test015()1052 void test015()
1053 {
1054   const Tp eps = std::numeric_limits<Tp>::epsilon();
1055   Tp max_abs_diff = -Tp(1);
1056   Tp max_abs_frac = -Tp(1);
1057   unsigned int num_datum = sizeof(data015)
1058                          / sizeof(testcase_hyperg<double>);
1059   for (unsigned int i = 0; i < num_datum; ++i)
1060     {
1061       const Tp f = std::tr1::hyperg(Tp(data015[i].a), Tp(data015[i].b),
1062                    Tp(data015[i].c), Tp(data015[i].x));
1063       const Tp f0 = data015[i].f0;
1064       const Tp diff = f - f0;
1065       if (std::abs(diff) > max_abs_diff)
1066         max_abs_diff = std::abs(diff);
1067       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1068         {
1069           const Tp frac = diff / f0;
1070           if (std::abs(frac) > max_abs_frac)
1071             max_abs_frac = std::abs(frac);
1072         }
1073     }
1074   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1075 }
1076 
1077 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
1078 testcase_hyperg<double> data016[] = {
1079   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1080           2.0000000000000000, -0.90000000000000002 },
1081   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1082           2.0000000000000000, -0.80000000000000004 },
1083   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1084           2.0000000000000000, -0.69999999999999996 },
1085   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1086           2.0000000000000000, -0.59999999999999998 },
1087   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1088           2.0000000000000000, -0.50000000000000000 },
1089   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1090           2.0000000000000000, -0.40000000000000002 },
1091   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1092           2.0000000000000000, -0.30000000000000004 },
1093   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1094           2.0000000000000000, -0.19999999999999996 },
1095   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1096           2.0000000000000000, -0.099999999999999978 },
1097   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1098           2.0000000000000000, 0.0000000000000000 },
1099   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1100           2.0000000000000000, 0.10000000000000009 },
1101   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1102           2.0000000000000000, 0.19999999999999996 },
1103   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1104           2.0000000000000000, 0.30000000000000004 },
1105   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1106           2.0000000000000000, 0.39999999999999991 },
1107   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1108           2.0000000000000000, 0.50000000000000000 },
1109   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1110           2.0000000000000000, 0.60000000000000009 },
1111   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1112           2.0000000000000000, 0.69999999999999996 },
1113   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1114           2.0000000000000000, 0.80000000000000004 },
1115   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1116           2.0000000000000000, 0.89999999999999991 },
1117 };
1118 
1119 // Test function for a=0.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
1120 template <typename Tp>
test016()1121 void test016()
1122 {
1123   const Tp eps = std::numeric_limits<Tp>::epsilon();
1124   Tp max_abs_diff = -Tp(1);
1125   Tp max_abs_frac = -Tp(1);
1126   unsigned int num_datum = sizeof(data016)
1127                          / sizeof(testcase_hyperg<double>);
1128   for (unsigned int i = 0; i < num_datum; ++i)
1129     {
1130       const Tp f = std::tr1::hyperg(Tp(data016[i].a), Tp(data016[i].b),
1131                    Tp(data016[i].c), Tp(data016[i].x));
1132       const Tp f0 = data016[i].f0;
1133       const Tp diff = f - f0;
1134       if (std::abs(diff) > max_abs_diff)
1135         max_abs_diff = std::abs(diff);
1136       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1137         {
1138           const Tp frac = diff / f0;
1139           if (std::abs(frac) > max_abs_frac)
1140             max_abs_frac = std::abs(frac);
1141         }
1142     }
1143   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1144 }
1145 
1146 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
1147 testcase_hyperg<double> data017[] = {
1148   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1149           4.0000000000000000, -0.90000000000000002 },
1150   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1151           4.0000000000000000, -0.80000000000000004 },
1152   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1153           4.0000000000000000, -0.69999999999999996 },
1154   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1155           4.0000000000000000, -0.59999999999999998 },
1156   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1157           4.0000000000000000, -0.50000000000000000 },
1158   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1159           4.0000000000000000, -0.40000000000000002 },
1160   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1161           4.0000000000000000, -0.30000000000000004 },
1162   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1163           4.0000000000000000, -0.19999999999999996 },
1164   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1165           4.0000000000000000, -0.099999999999999978 },
1166   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1167           4.0000000000000000, 0.0000000000000000 },
1168   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1169           4.0000000000000000, 0.10000000000000009 },
1170   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1171           4.0000000000000000, 0.19999999999999996 },
1172   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1173           4.0000000000000000, 0.30000000000000004 },
1174   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1175           4.0000000000000000, 0.39999999999999991 },
1176   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1177           4.0000000000000000, 0.50000000000000000 },
1178   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1179           4.0000000000000000, 0.60000000000000009 },
1180   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1181           4.0000000000000000, 0.69999999999999996 },
1182   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1183           4.0000000000000000, 0.80000000000000004 },
1184   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1185           4.0000000000000000, 0.89999999999999991 },
1186 };
1187 
1188 // Test function for a=0.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
1189 template <typename Tp>
test017()1190 void test017()
1191 {
1192   const Tp eps = std::numeric_limits<Tp>::epsilon();
1193   Tp max_abs_diff = -Tp(1);
1194   Tp max_abs_frac = -Tp(1);
1195   unsigned int num_datum = sizeof(data017)
1196                          / sizeof(testcase_hyperg<double>);
1197   for (unsigned int i = 0; i < num_datum; ++i)
1198     {
1199       const Tp f = std::tr1::hyperg(Tp(data017[i].a), Tp(data017[i].b),
1200                    Tp(data017[i].c), Tp(data017[i].x));
1201       const Tp f0 = data017[i].f0;
1202       const Tp diff = f - f0;
1203       if (std::abs(diff) > max_abs_diff)
1204         max_abs_diff = std::abs(diff);
1205       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1206         {
1207           const Tp frac = diff / f0;
1208           if (std::abs(frac) > max_abs_frac)
1209             max_abs_frac = std::abs(frac);
1210         }
1211     }
1212   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1213 }
1214 
1215 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
1216 testcase_hyperg<double> data018[] = {
1217   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1218           6.0000000000000000, -0.90000000000000002 },
1219   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1220           6.0000000000000000, -0.80000000000000004 },
1221   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1222           6.0000000000000000, -0.69999999999999996 },
1223   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1224           6.0000000000000000, -0.59999999999999998 },
1225   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1226           6.0000000000000000, -0.50000000000000000 },
1227   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1228           6.0000000000000000, -0.40000000000000002 },
1229   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1230           6.0000000000000000, -0.30000000000000004 },
1231   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1232           6.0000000000000000, -0.19999999999999996 },
1233   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1234           6.0000000000000000, -0.099999999999999978 },
1235   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1236           6.0000000000000000, 0.0000000000000000 },
1237   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1238           6.0000000000000000, 0.10000000000000009 },
1239   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1240           6.0000000000000000, 0.19999999999999996 },
1241   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1242           6.0000000000000000, 0.30000000000000004 },
1243   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1244           6.0000000000000000, 0.39999999999999991 },
1245   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1246           6.0000000000000000, 0.50000000000000000 },
1247   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1248           6.0000000000000000, 0.60000000000000009 },
1249   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1250           6.0000000000000000, 0.69999999999999996 },
1251   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1252           6.0000000000000000, 0.80000000000000004 },
1253   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1254           6.0000000000000000, 0.89999999999999991 },
1255 };
1256 
1257 // Test function for a=0.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
1258 template <typename Tp>
test018()1259 void test018()
1260 {
1261   const Tp eps = std::numeric_limits<Tp>::epsilon();
1262   Tp max_abs_diff = -Tp(1);
1263   Tp max_abs_frac = -Tp(1);
1264   unsigned int num_datum = sizeof(data018)
1265                          / sizeof(testcase_hyperg<double>);
1266   for (unsigned int i = 0; i < num_datum; ++i)
1267     {
1268       const Tp f = std::tr1::hyperg(Tp(data018[i].a), Tp(data018[i].b),
1269                    Tp(data018[i].c), Tp(data018[i].x));
1270       const Tp f0 = data018[i].f0;
1271       const Tp diff = f - f0;
1272       if (std::abs(diff) > max_abs_diff)
1273         max_abs_diff = std::abs(diff);
1274       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1275         {
1276           const Tp frac = diff / f0;
1277           if (std::abs(frac) > max_abs_frac)
1278             max_abs_frac = std::abs(frac);
1279         }
1280     }
1281   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1282 }
1283 
1284 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
1285 testcase_hyperg<double> data019[] = {
1286   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1287           8.0000000000000000, -0.90000000000000002 },
1288   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1289           8.0000000000000000, -0.80000000000000004 },
1290   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1291           8.0000000000000000, -0.69999999999999996 },
1292   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1293           8.0000000000000000, -0.59999999999999998 },
1294   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1295           8.0000000000000000, -0.50000000000000000 },
1296   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1297           8.0000000000000000, -0.40000000000000002 },
1298   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1299           8.0000000000000000, -0.30000000000000004 },
1300   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1301           8.0000000000000000, -0.19999999999999996 },
1302   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1303           8.0000000000000000, -0.099999999999999978 },
1304   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1305           8.0000000000000000, 0.0000000000000000 },
1306   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1307           8.0000000000000000, 0.10000000000000009 },
1308   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1309           8.0000000000000000, 0.19999999999999996 },
1310   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1311           8.0000000000000000, 0.30000000000000004 },
1312   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1313           8.0000000000000000, 0.39999999999999991 },
1314   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1315           8.0000000000000000, 0.50000000000000000 },
1316   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1317           8.0000000000000000, 0.60000000000000009 },
1318   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1319           8.0000000000000000, 0.69999999999999996 },
1320   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1321           8.0000000000000000, 0.80000000000000004 },
1322   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1323           8.0000000000000000, 0.89999999999999991 },
1324 };
1325 
1326 // Test function for a=0.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
1327 template <typename Tp>
test019()1328 void test019()
1329 {
1330   const Tp eps = std::numeric_limits<Tp>::epsilon();
1331   Tp max_abs_diff = -Tp(1);
1332   Tp max_abs_frac = -Tp(1);
1333   unsigned int num_datum = sizeof(data019)
1334                          / sizeof(testcase_hyperg<double>);
1335   for (unsigned int i = 0; i < num_datum; ++i)
1336     {
1337       const Tp f = std::tr1::hyperg(Tp(data019[i].a), Tp(data019[i].b),
1338                    Tp(data019[i].c), Tp(data019[i].x));
1339       const Tp f0 = data019[i].f0;
1340       const Tp diff = f - f0;
1341       if (std::abs(diff) > max_abs_diff)
1342         max_abs_diff = std::abs(diff);
1343       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1344         {
1345           const Tp frac = diff / f0;
1346           if (std::abs(frac) > max_abs_frac)
1347             max_abs_frac = std::abs(frac);
1348         }
1349     }
1350   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1351 }
1352 
1353 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
1354 testcase_hyperg<double> data020[] = {
1355   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1356           10.000000000000000, -0.90000000000000002 },
1357   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1358           10.000000000000000, -0.80000000000000004 },
1359   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1360           10.000000000000000, -0.69999999999999996 },
1361   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1362           10.000000000000000, -0.59999999999999998 },
1363   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1364           10.000000000000000, -0.50000000000000000 },
1365   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1366           10.000000000000000, -0.40000000000000002 },
1367   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1368           10.000000000000000, -0.30000000000000004 },
1369   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1370           10.000000000000000, -0.19999999999999996 },
1371   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1372           10.000000000000000, -0.099999999999999978 },
1373   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1374           10.000000000000000, 0.0000000000000000 },
1375   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1376           10.000000000000000, 0.10000000000000009 },
1377   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1378           10.000000000000000, 0.19999999999999996 },
1379   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1380           10.000000000000000, 0.30000000000000004 },
1381   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1382           10.000000000000000, 0.39999999999999991 },
1383   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1384           10.000000000000000, 0.50000000000000000 },
1385   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1386           10.000000000000000, 0.60000000000000009 },
1387   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1388           10.000000000000000, 0.69999999999999996 },
1389   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1390           10.000000000000000, 0.80000000000000004 },
1391   { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1392           10.000000000000000, 0.89999999999999991 },
1393 };
1394 
1395 // Test function for a=0.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
1396 template <typename Tp>
test020()1397 void test020()
1398 {
1399   const Tp eps = std::numeric_limits<Tp>::epsilon();
1400   Tp max_abs_diff = -Tp(1);
1401   Tp max_abs_frac = -Tp(1);
1402   unsigned int num_datum = sizeof(data020)
1403                          / sizeof(testcase_hyperg<double>);
1404   for (unsigned int i = 0; i < num_datum; ++i)
1405     {
1406       const Tp f = std::tr1::hyperg(Tp(data020[i].a), Tp(data020[i].b),
1407                    Tp(data020[i].c), Tp(data020[i].x));
1408       const Tp f0 = data020[i].f0;
1409       const Tp diff = f - f0;
1410       if (std::abs(diff) > max_abs_diff)
1411         max_abs_diff = std::abs(diff);
1412       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1413         {
1414           const Tp frac = diff / f0;
1415           if (std::abs(frac) > max_abs_frac)
1416             max_abs_frac = std::abs(frac);
1417         }
1418     }
1419   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1420 }
1421 
1422 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
1423 testcase_hyperg<double> data021[] = {
1424   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1425           2.0000000000000000, -0.90000000000000002 },
1426   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1427           2.0000000000000000, -0.80000000000000004 },
1428   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1429           2.0000000000000000, -0.69999999999999996 },
1430   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1431           2.0000000000000000, -0.59999999999999998 },
1432   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1433           2.0000000000000000, -0.50000000000000000 },
1434   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1435           2.0000000000000000, -0.40000000000000002 },
1436   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1437           2.0000000000000000, -0.30000000000000004 },
1438   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1439           2.0000000000000000, -0.19999999999999996 },
1440   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1441           2.0000000000000000, -0.099999999999999978 },
1442   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1443           2.0000000000000000, 0.0000000000000000 },
1444   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1445           2.0000000000000000, 0.10000000000000009 },
1446   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1447           2.0000000000000000, 0.19999999999999996 },
1448   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1449           2.0000000000000000, 0.30000000000000004 },
1450   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1451           2.0000000000000000, 0.39999999999999991 },
1452   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1453           2.0000000000000000, 0.50000000000000000 },
1454   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1455           2.0000000000000000, 0.60000000000000009 },
1456   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1457           2.0000000000000000, 0.69999999999999996 },
1458   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1459           2.0000000000000000, 0.80000000000000004 },
1460   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1461           2.0000000000000000, 0.89999999999999991 },
1462 };
1463 
1464 // Test function for a=0.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
1465 template <typename Tp>
test021()1466 void test021()
1467 {
1468   const Tp eps = std::numeric_limits<Tp>::epsilon();
1469   Tp max_abs_diff = -Tp(1);
1470   Tp max_abs_frac = -Tp(1);
1471   unsigned int num_datum = sizeof(data021)
1472                          / sizeof(testcase_hyperg<double>);
1473   for (unsigned int i = 0; i < num_datum; ++i)
1474     {
1475       const Tp f = std::tr1::hyperg(Tp(data021[i].a), Tp(data021[i].b),
1476                    Tp(data021[i].c), Tp(data021[i].x));
1477       const Tp f0 = data021[i].f0;
1478       const Tp diff = f - f0;
1479       if (std::abs(diff) > max_abs_diff)
1480         max_abs_diff = std::abs(diff);
1481       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1482         {
1483           const Tp frac = diff / f0;
1484           if (std::abs(frac) > max_abs_frac)
1485             max_abs_frac = std::abs(frac);
1486         }
1487     }
1488   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1489 }
1490 
1491 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
1492 testcase_hyperg<double> data022[] = {
1493   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1494           4.0000000000000000, -0.90000000000000002 },
1495   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1496           4.0000000000000000, -0.80000000000000004 },
1497   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1498           4.0000000000000000, -0.69999999999999996 },
1499   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1500           4.0000000000000000, -0.59999999999999998 },
1501   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1502           4.0000000000000000, -0.50000000000000000 },
1503   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1504           4.0000000000000000, -0.40000000000000002 },
1505   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1506           4.0000000000000000, -0.30000000000000004 },
1507   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1508           4.0000000000000000, -0.19999999999999996 },
1509   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1510           4.0000000000000000, -0.099999999999999978 },
1511   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1512           4.0000000000000000, 0.0000000000000000 },
1513   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1514           4.0000000000000000, 0.10000000000000009 },
1515   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1516           4.0000000000000000, 0.19999999999999996 },
1517   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1518           4.0000000000000000, 0.30000000000000004 },
1519   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1520           4.0000000000000000, 0.39999999999999991 },
1521   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1522           4.0000000000000000, 0.50000000000000000 },
1523   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1524           4.0000000000000000, 0.60000000000000009 },
1525   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1526           4.0000000000000000, 0.69999999999999996 },
1527   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1528           4.0000000000000000, 0.80000000000000004 },
1529   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1530           4.0000000000000000, 0.89999999999999991 },
1531 };
1532 
1533 // Test function for a=0.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
1534 template <typename Tp>
test022()1535 void test022()
1536 {
1537   const Tp eps = std::numeric_limits<Tp>::epsilon();
1538   Tp max_abs_diff = -Tp(1);
1539   Tp max_abs_frac = -Tp(1);
1540   unsigned int num_datum = sizeof(data022)
1541                          / sizeof(testcase_hyperg<double>);
1542   for (unsigned int i = 0; i < num_datum; ++i)
1543     {
1544       const Tp f = std::tr1::hyperg(Tp(data022[i].a), Tp(data022[i].b),
1545                    Tp(data022[i].c), Tp(data022[i].x));
1546       const Tp f0 = data022[i].f0;
1547       const Tp diff = f - f0;
1548       if (std::abs(diff) > max_abs_diff)
1549         max_abs_diff = std::abs(diff);
1550       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1551         {
1552           const Tp frac = diff / f0;
1553           if (std::abs(frac) > max_abs_frac)
1554             max_abs_frac = std::abs(frac);
1555         }
1556     }
1557   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1558 }
1559 
1560 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
1561 testcase_hyperg<double> data023[] = {
1562   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1563           6.0000000000000000, -0.90000000000000002 },
1564   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1565           6.0000000000000000, -0.80000000000000004 },
1566   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1567           6.0000000000000000, -0.69999999999999996 },
1568   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1569           6.0000000000000000, -0.59999999999999998 },
1570   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1571           6.0000000000000000, -0.50000000000000000 },
1572   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1573           6.0000000000000000, -0.40000000000000002 },
1574   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1575           6.0000000000000000, -0.30000000000000004 },
1576   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1577           6.0000000000000000, -0.19999999999999996 },
1578   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1579           6.0000000000000000, -0.099999999999999978 },
1580   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1581           6.0000000000000000, 0.0000000000000000 },
1582   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1583           6.0000000000000000, 0.10000000000000009 },
1584   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1585           6.0000000000000000, 0.19999999999999996 },
1586   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1587           6.0000000000000000, 0.30000000000000004 },
1588   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1589           6.0000000000000000, 0.39999999999999991 },
1590   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1591           6.0000000000000000, 0.50000000000000000 },
1592   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1593           6.0000000000000000, 0.60000000000000009 },
1594   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1595           6.0000000000000000, 0.69999999999999996 },
1596   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1597           6.0000000000000000, 0.80000000000000004 },
1598   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1599           6.0000000000000000, 0.89999999999999991 },
1600 };
1601 
1602 // Test function for a=0.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
1603 template <typename Tp>
test023()1604 void test023()
1605 {
1606   const Tp eps = std::numeric_limits<Tp>::epsilon();
1607   Tp max_abs_diff = -Tp(1);
1608   Tp max_abs_frac = -Tp(1);
1609   unsigned int num_datum = sizeof(data023)
1610                          / sizeof(testcase_hyperg<double>);
1611   for (unsigned int i = 0; i < num_datum; ++i)
1612     {
1613       const Tp f = std::tr1::hyperg(Tp(data023[i].a), Tp(data023[i].b),
1614                    Tp(data023[i].c), Tp(data023[i].x));
1615       const Tp f0 = data023[i].f0;
1616       const Tp diff = f - f0;
1617       if (std::abs(diff) > max_abs_diff)
1618         max_abs_diff = std::abs(diff);
1619       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1620         {
1621           const Tp frac = diff / f0;
1622           if (std::abs(frac) > max_abs_frac)
1623             max_abs_frac = std::abs(frac);
1624         }
1625     }
1626   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1627 }
1628 
1629 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
1630 testcase_hyperg<double> data024[] = {
1631   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1632           8.0000000000000000, -0.90000000000000002 },
1633   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1634           8.0000000000000000, -0.80000000000000004 },
1635   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1636           8.0000000000000000, -0.69999999999999996 },
1637   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1638           8.0000000000000000, -0.59999999999999998 },
1639   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1640           8.0000000000000000, -0.50000000000000000 },
1641   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1642           8.0000000000000000, -0.40000000000000002 },
1643   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1644           8.0000000000000000, -0.30000000000000004 },
1645   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1646           8.0000000000000000, -0.19999999999999996 },
1647   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1648           8.0000000000000000, -0.099999999999999978 },
1649   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1650           8.0000000000000000, 0.0000000000000000 },
1651   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1652           8.0000000000000000, 0.10000000000000009 },
1653   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1654           8.0000000000000000, 0.19999999999999996 },
1655   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1656           8.0000000000000000, 0.30000000000000004 },
1657   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1658           8.0000000000000000, 0.39999999999999991 },
1659   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1660           8.0000000000000000, 0.50000000000000000 },
1661   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1662           8.0000000000000000, 0.60000000000000009 },
1663   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1664           8.0000000000000000, 0.69999999999999996 },
1665   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1666           8.0000000000000000, 0.80000000000000004 },
1667   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1668           8.0000000000000000, 0.89999999999999991 },
1669 };
1670 
1671 // Test function for a=0.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
1672 template <typename Tp>
test024()1673 void test024()
1674 {
1675   const Tp eps = std::numeric_limits<Tp>::epsilon();
1676   Tp max_abs_diff = -Tp(1);
1677   Tp max_abs_frac = -Tp(1);
1678   unsigned int num_datum = sizeof(data024)
1679                          / sizeof(testcase_hyperg<double>);
1680   for (unsigned int i = 0; i < num_datum; ++i)
1681     {
1682       const Tp f = std::tr1::hyperg(Tp(data024[i].a), Tp(data024[i].b),
1683                    Tp(data024[i].c), Tp(data024[i].x));
1684       const Tp f0 = data024[i].f0;
1685       const Tp diff = f - f0;
1686       if (std::abs(diff) > max_abs_diff)
1687         max_abs_diff = std::abs(diff);
1688       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1689         {
1690           const Tp frac = diff / f0;
1691           if (std::abs(frac) > max_abs_frac)
1692             max_abs_frac = std::abs(frac);
1693         }
1694     }
1695   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1696 }
1697 
1698 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
1699 testcase_hyperg<double> data025[] = {
1700   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1701           10.000000000000000, -0.90000000000000002 },
1702   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1703           10.000000000000000, -0.80000000000000004 },
1704   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1705           10.000000000000000, -0.69999999999999996 },
1706   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1707           10.000000000000000, -0.59999999999999998 },
1708   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1709           10.000000000000000, -0.50000000000000000 },
1710   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1711           10.000000000000000, -0.40000000000000002 },
1712   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1713           10.000000000000000, -0.30000000000000004 },
1714   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1715           10.000000000000000, -0.19999999999999996 },
1716   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1717           10.000000000000000, -0.099999999999999978 },
1718   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1719           10.000000000000000, 0.0000000000000000 },
1720   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1721           10.000000000000000, 0.10000000000000009 },
1722   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1723           10.000000000000000, 0.19999999999999996 },
1724   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1725           10.000000000000000, 0.30000000000000004 },
1726   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1727           10.000000000000000, 0.39999999999999991 },
1728   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1729           10.000000000000000, 0.50000000000000000 },
1730   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1731           10.000000000000000, 0.60000000000000009 },
1732   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1733           10.000000000000000, 0.69999999999999996 },
1734   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1735           10.000000000000000, 0.80000000000000004 },
1736   { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1737           10.000000000000000, 0.89999999999999991 },
1738 };
1739 
1740 // Test function for a=0.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
1741 template <typename Tp>
test025()1742 void test025()
1743 {
1744   const Tp eps = std::numeric_limits<Tp>::epsilon();
1745   Tp max_abs_diff = -Tp(1);
1746   Tp max_abs_frac = -Tp(1);
1747   unsigned int num_datum = sizeof(data025)
1748                          / sizeof(testcase_hyperg<double>);
1749   for (unsigned int i = 0; i < num_datum; ++i)
1750     {
1751       const Tp f = std::tr1::hyperg(Tp(data025[i].a), Tp(data025[i].b),
1752                    Tp(data025[i].c), Tp(data025[i].x));
1753       const Tp f0 = data025[i].f0;
1754       const Tp diff = f - f0;
1755       if (std::abs(diff) > max_abs_diff)
1756         max_abs_diff = std::abs(diff);
1757       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1758         {
1759           const Tp frac = diff / f0;
1760           if (std::abs(frac) > max_abs_frac)
1761             max_abs_frac = std::abs(frac);
1762         }
1763     }
1764   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1765 }
1766 
1767 // Test data for a=0.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
1768 testcase_hyperg<double> data026[] = {
1769   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1770           2.0000000000000000, -0.90000000000000002 },
1771   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1772           2.0000000000000000, -0.80000000000000004 },
1773   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1774           2.0000000000000000, -0.69999999999999996 },
1775   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1776           2.0000000000000000, -0.59999999999999998 },
1777   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1778           2.0000000000000000, -0.50000000000000000 },
1779   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1780           2.0000000000000000, -0.40000000000000002 },
1781   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1782           2.0000000000000000, -0.30000000000000004 },
1783   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1784           2.0000000000000000, -0.19999999999999996 },
1785   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1786           2.0000000000000000, -0.099999999999999978 },
1787   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1788           2.0000000000000000, 0.0000000000000000 },
1789   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1790           2.0000000000000000, 0.10000000000000009 },
1791   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1792           2.0000000000000000, 0.19999999999999996 },
1793   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1794           2.0000000000000000, 0.30000000000000004 },
1795   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1796           2.0000000000000000, 0.39999999999999991 },
1797   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1798           2.0000000000000000, 0.50000000000000000 },
1799   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1800           2.0000000000000000, 0.60000000000000009 },
1801   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1802           2.0000000000000000, 0.69999999999999996 },
1803   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1804           2.0000000000000000, 0.80000000000000004 },
1805   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1806           2.0000000000000000, 0.89999999999999991 },
1807 };
1808 
1809 // Test function for a=0.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
1810 template <typename Tp>
test026()1811 void test026()
1812 {
1813   const Tp eps = std::numeric_limits<Tp>::epsilon();
1814   Tp max_abs_diff = -Tp(1);
1815   Tp max_abs_frac = -Tp(1);
1816   unsigned int num_datum = sizeof(data026)
1817                          / sizeof(testcase_hyperg<double>);
1818   for (unsigned int i = 0; i < num_datum; ++i)
1819     {
1820       const Tp f = std::tr1::hyperg(Tp(data026[i].a), Tp(data026[i].b),
1821                    Tp(data026[i].c), Tp(data026[i].x));
1822       const Tp f0 = data026[i].f0;
1823       const Tp diff = f - f0;
1824       if (std::abs(diff) > max_abs_diff)
1825         max_abs_diff = std::abs(diff);
1826       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1827         {
1828           const Tp frac = diff / f0;
1829           if (std::abs(frac) > max_abs_frac)
1830             max_abs_frac = std::abs(frac);
1831         }
1832     }
1833   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1834 }
1835 
1836 // Test data for a=0.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
1837 testcase_hyperg<double> data027[] = {
1838   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1839           4.0000000000000000, -0.90000000000000002 },
1840   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1841           4.0000000000000000, -0.80000000000000004 },
1842   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1843           4.0000000000000000, -0.69999999999999996 },
1844   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1845           4.0000000000000000, -0.59999999999999998 },
1846   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1847           4.0000000000000000, -0.50000000000000000 },
1848   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1849           4.0000000000000000, -0.40000000000000002 },
1850   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1851           4.0000000000000000, -0.30000000000000004 },
1852   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1853           4.0000000000000000, -0.19999999999999996 },
1854   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1855           4.0000000000000000, -0.099999999999999978 },
1856   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1857           4.0000000000000000, 0.0000000000000000 },
1858   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1859           4.0000000000000000, 0.10000000000000009 },
1860   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1861           4.0000000000000000, 0.19999999999999996 },
1862   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1863           4.0000000000000000, 0.30000000000000004 },
1864   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1865           4.0000000000000000, 0.39999999999999991 },
1866   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1867           4.0000000000000000, 0.50000000000000000 },
1868   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1869           4.0000000000000000, 0.60000000000000009 },
1870   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1871           4.0000000000000000, 0.69999999999999996 },
1872   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1873           4.0000000000000000, 0.80000000000000004 },
1874   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1875           4.0000000000000000, 0.89999999999999991 },
1876 };
1877 
1878 // Test function for a=0.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
1879 template <typename Tp>
test027()1880 void test027()
1881 {
1882   const Tp eps = std::numeric_limits<Tp>::epsilon();
1883   Tp max_abs_diff = -Tp(1);
1884   Tp max_abs_frac = -Tp(1);
1885   unsigned int num_datum = sizeof(data027)
1886                          / sizeof(testcase_hyperg<double>);
1887   for (unsigned int i = 0; i < num_datum; ++i)
1888     {
1889       const Tp f = std::tr1::hyperg(Tp(data027[i].a), Tp(data027[i].b),
1890                    Tp(data027[i].c), Tp(data027[i].x));
1891       const Tp f0 = data027[i].f0;
1892       const Tp diff = f - f0;
1893       if (std::abs(diff) > max_abs_diff)
1894         max_abs_diff = std::abs(diff);
1895       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1896         {
1897           const Tp frac = diff / f0;
1898           if (std::abs(frac) > max_abs_frac)
1899             max_abs_frac = std::abs(frac);
1900         }
1901     }
1902   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1903 }
1904 
1905 // Test data for a=0.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
1906 testcase_hyperg<double> data028[] = {
1907   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1908           6.0000000000000000, -0.90000000000000002 },
1909   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1910           6.0000000000000000, -0.80000000000000004 },
1911   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1912           6.0000000000000000, -0.69999999999999996 },
1913   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1914           6.0000000000000000, -0.59999999999999998 },
1915   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1916           6.0000000000000000, -0.50000000000000000 },
1917   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1918           6.0000000000000000, -0.40000000000000002 },
1919   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1920           6.0000000000000000, -0.30000000000000004 },
1921   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1922           6.0000000000000000, -0.19999999999999996 },
1923   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1924           6.0000000000000000, -0.099999999999999978 },
1925   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1926           6.0000000000000000, 0.0000000000000000 },
1927   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1928           6.0000000000000000, 0.10000000000000009 },
1929   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1930           6.0000000000000000, 0.19999999999999996 },
1931   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1932           6.0000000000000000, 0.30000000000000004 },
1933   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1934           6.0000000000000000, 0.39999999999999991 },
1935   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1936           6.0000000000000000, 0.50000000000000000 },
1937   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1938           6.0000000000000000, 0.60000000000000009 },
1939   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1940           6.0000000000000000, 0.69999999999999996 },
1941   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1942           6.0000000000000000, 0.80000000000000004 },
1943   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1944           6.0000000000000000, 0.89999999999999991 },
1945 };
1946 
1947 // Test function for a=0.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
1948 template <typename Tp>
test028()1949 void test028()
1950 {
1951   const Tp eps = std::numeric_limits<Tp>::epsilon();
1952   Tp max_abs_diff = -Tp(1);
1953   Tp max_abs_frac = -Tp(1);
1954   unsigned int num_datum = sizeof(data028)
1955                          / sizeof(testcase_hyperg<double>);
1956   for (unsigned int i = 0; i < num_datum; ++i)
1957     {
1958       const Tp f = std::tr1::hyperg(Tp(data028[i].a), Tp(data028[i].b),
1959                    Tp(data028[i].c), Tp(data028[i].x));
1960       const Tp f0 = data028[i].f0;
1961       const Tp diff = f - f0;
1962       if (std::abs(diff) > max_abs_diff)
1963         max_abs_diff = std::abs(diff);
1964       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1965         {
1966           const Tp frac = diff / f0;
1967           if (std::abs(frac) > max_abs_frac)
1968             max_abs_frac = std::abs(frac);
1969         }
1970     }
1971   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1972 }
1973 
1974 // Test data for a=0.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
1975 testcase_hyperg<double> data029[] = {
1976   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1977           8.0000000000000000, -0.90000000000000002 },
1978   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1979           8.0000000000000000, -0.80000000000000004 },
1980   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1981           8.0000000000000000, -0.69999999999999996 },
1982   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1983           8.0000000000000000, -0.59999999999999998 },
1984   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1985           8.0000000000000000, -0.50000000000000000 },
1986   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1987           8.0000000000000000, -0.40000000000000002 },
1988   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1989           8.0000000000000000, -0.30000000000000004 },
1990   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1991           8.0000000000000000, -0.19999999999999996 },
1992   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1993           8.0000000000000000, -0.099999999999999978 },
1994   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1995           8.0000000000000000, 0.0000000000000000 },
1996   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1997           8.0000000000000000, 0.10000000000000009 },
1998   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1999           8.0000000000000000, 0.19999999999999996 },
2000   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2001           8.0000000000000000, 0.30000000000000004 },
2002   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2003           8.0000000000000000, 0.39999999999999991 },
2004   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2005           8.0000000000000000, 0.50000000000000000 },
2006   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2007           8.0000000000000000, 0.60000000000000009 },
2008   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2009           8.0000000000000000, 0.69999999999999996 },
2010   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2011           8.0000000000000000, 0.80000000000000004 },
2012   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2013           8.0000000000000000, 0.89999999999999991 },
2014 };
2015 
2016 // Test function for a=0.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
2017 template <typename Tp>
test029()2018 void test029()
2019 {
2020   const Tp eps = std::numeric_limits<Tp>::epsilon();
2021   Tp max_abs_diff = -Tp(1);
2022   Tp max_abs_frac = -Tp(1);
2023   unsigned int num_datum = sizeof(data029)
2024                          / sizeof(testcase_hyperg<double>);
2025   for (unsigned int i = 0; i < num_datum; ++i)
2026     {
2027       const Tp f = std::tr1::hyperg(Tp(data029[i].a), Tp(data029[i].b),
2028                    Tp(data029[i].c), Tp(data029[i].x));
2029       const Tp f0 = data029[i].f0;
2030       const Tp diff = f - f0;
2031       if (std::abs(diff) > max_abs_diff)
2032         max_abs_diff = std::abs(diff);
2033       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2034         {
2035           const Tp frac = diff / f0;
2036           if (std::abs(frac) > max_abs_frac)
2037             max_abs_frac = std::abs(frac);
2038         }
2039     }
2040   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2041 }
2042 
2043 // Test data for a=0.0000000000000000, b=10.000000000000000, c=10.000000000000000.
2044 testcase_hyperg<double> data030[] = {
2045   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2046           10.000000000000000, -0.90000000000000002 },
2047   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2048           10.000000000000000, -0.80000000000000004 },
2049   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2050           10.000000000000000, -0.69999999999999996 },
2051   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2052           10.000000000000000, -0.59999999999999998 },
2053   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2054           10.000000000000000, -0.50000000000000000 },
2055   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2056           10.000000000000000, -0.40000000000000002 },
2057   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2058           10.000000000000000, -0.30000000000000004 },
2059   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2060           10.000000000000000, -0.19999999999999996 },
2061   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2062           10.000000000000000, -0.099999999999999978 },
2063   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2064           10.000000000000000, 0.0000000000000000 },
2065   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2066           10.000000000000000, 0.10000000000000009 },
2067   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2068           10.000000000000000, 0.19999999999999996 },
2069   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2070           10.000000000000000, 0.30000000000000004 },
2071   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2072           10.000000000000000, 0.39999999999999991 },
2073   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2074           10.000000000000000, 0.50000000000000000 },
2075   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2076           10.000000000000000, 0.60000000000000009 },
2077   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2078           10.000000000000000, 0.69999999999999996 },
2079   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2080           10.000000000000000, 0.80000000000000004 },
2081   { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2082           10.000000000000000, 0.89999999999999991 },
2083 };
2084 
2085 // Test function for a=0.0000000000000000, b=10.000000000000000, c=10.000000000000000.
2086 template <typename Tp>
test030()2087 void test030()
2088 {
2089   const Tp eps = std::numeric_limits<Tp>::epsilon();
2090   Tp max_abs_diff = -Tp(1);
2091   Tp max_abs_frac = -Tp(1);
2092   unsigned int num_datum = sizeof(data030)
2093                          / sizeof(testcase_hyperg<double>);
2094   for (unsigned int i = 0; i < num_datum; ++i)
2095     {
2096       const Tp f = std::tr1::hyperg(Tp(data030[i].a), Tp(data030[i].b),
2097                    Tp(data030[i].c), Tp(data030[i].x));
2098       const Tp f0 = data030[i].f0;
2099       const Tp diff = f - f0;
2100       if (std::abs(diff) > max_abs_diff)
2101         max_abs_diff = std::abs(diff);
2102       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2103         {
2104           const Tp frac = diff / f0;
2105           if (std::abs(frac) > max_abs_frac)
2106             max_abs_frac = std::abs(frac);
2107         }
2108     }
2109   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2110 }
2111 
2112 // Test data for a=0.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
2113 testcase_hyperg<double> data031[] = {
2114   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2115           2.0000000000000000, -0.90000000000000002 },
2116   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2117           2.0000000000000000, -0.80000000000000004 },
2118   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2119           2.0000000000000000, -0.69999999999999996 },
2120   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2121           2.0000000000000000, -0.59999999999999998 },
2122   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2123           2.0000000000000000, -0.50000000000000000 },
2124   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2125           2.0000000000000000, -0.40000000000000002 },
2126   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2127           2.0000000000000000, -0.30000000000000004 },
2128   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2129           2.0000000000000000, -0.19999999999999996 },
2130   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2131           2.0000000000000000, -0.099999999999999978 },
2132   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2133           2.0000000000000000, 0.0000000000000000 },
2134   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2135           2.0000000000000000, 0.10000000000000009 },
2136   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2137           2.0000000000000000, 0.19999999999999996 },
2138   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2139           2.0000000000000000, 0.30000000000000004 },
2140   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2141           2.0000000000000000, 0.39999999999999991 },
2142   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2143           2.0000000000000000, 0.50000000000000000 },
2144   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2145           2.0000000000000000, 0.60000000000000009 },
2146   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2147           2.0000000000000000, 0.69999999999999996 },
2148   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2149           2.0000000000000000, 0.80000000000000004 },
2150   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2151           2.0000000000000000, 0.89999999999999991 },
2152 };
2153 
2154 // Test function for a=0.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
2155 template <typename Tp>
test031()2156 void test031()
2157 {
2158   const Tp eps = std::numeric_limits<Tp>::epsilon();
2159   Tp max_abs_diff = -Tp(1);
2160   Tp max_abs_frac = -Tp(1);
2161   unsigned int num_datum = sizeof(data031)
2162                          / sizeof(testcase_hyperg<double>);
2163   for (unsigned int i = 0; i < num_datum; ++i)
2164     {
2165       const Tp f = std::tr1::hyperg(Tp(data031[i].a), Tp(data031[i].b),
2166                    Tp(data031[i].c), Tp(data031[i].x));
2167       const Tp f0 = data031[i].f0;
2168       const Tp diff = f - f0;
2169       if (std::abs(diff) > max_abs_diff)
2170         max_abs_diff = std::abs(diff);
2171       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2172         {
2173           const Tp frac = diff / f0;
2174           if (std::abs(frac) > max_abs_frac)
2175             max_abs_frac = std::abs(frac);
2176         }
2177     }
2178   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2179 }
2180 
2181 // Test data for a=0.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
2182 testcase_hyperg<double> data032[] = {
2183   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2184           4.0000000000000000, -0.90000000000000002 },
2185   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2186           4.0000000000000000, -0.80000000000000004 },
2187   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2188           4.0000000000000000, -0.69999999999999996 },
2189   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2190           4.0000000000000000, -0.59999999999999998 },
2191   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2192           4.0000000000000000, -0.50000000000000000 },
2193   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2194           4.0000000000000000, -0.40000000000000002 },
2195   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2196           4.0000000000000000, -0.30000000000000004 },
2197   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2198           4.0000000000000000, -0.19999999999999996 },
2199   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2200           4.0000000000000000, -0.099999999999999978 },
2201   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2202           4.0000000000000000, 0.0000000000000000 },
2203   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2204           4.0000000000000000, 0.10000000000000009 },
2205   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2206           4.0000000000000000, 0.19999999999999996 },
2207   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2208           4.0000000000000000, 0.30000000000000004 },
2209   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2210           4.0000000000000000, 0.39999999999999991 },
2211   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2212           4.0000000000000000, 0.50000000000000000 },
2213   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2214           4.0000000000000000, 0.60000000000000009 },
2215   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2216           4.0000000000000000, 0.69999999999999996 },
2217   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2218           4.0000000000000000, 0.80000000000000004 },
2219   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2220           4.0000000000000000, 0.89999999999999991 },
2221 };
2222 
2223 // Test function for a=0.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
2224 template <typename Tp>
test032()2225 void test032()
2226 {
2227   const Tp eps = std::numeric_limits<Tp>::epsilon();
2228   Tp max_abs_diff = -Tp(1);
2229   Tp max_abs_frac = -Tp(1);
2230   unsigned int num_datum = sizeof(data032)
2231                          / sizeof(testcase_hyperg<double>);
2232   for (unsigned int i = 0; i < num_datum; ++i)
2233     {
2234       const Tp f = std::tr1::hyperg(Tp(data032[i].a), Tp(data032[i].b),
2235                    Tp(data032[i].c), Tp(data032[i].x));
2236       const Tp f0 = data032[i].f0;
2237       const Tp diff = f - f0;
2238       if (std::abs(diff) > max_abs_diff)
2239         max_abs_diff = std::abs(diff);
2240       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2241         {
2242           const Tp frac = diff / f0;
2243           if (std::abs(frac) > max_abs_frac)
2244             max_abs_frac = std::abs(frac);
2245         }
2246     }
2247   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2248 }
2249 
2250 // Test data for a=0.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
2251 testcase_hyperg<double> data033[] = {
2252   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2253           6.0000000000000000, -0.90000000000000002 },
2254   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2255           6.0000000000000000, -0.80000000000000004 },
2256   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2257           6.0000000000000000, -0.69999999999999996 },
2258   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2259           6.0000000000000000, -0.59999999999999998 },
2260   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2261           6.0000000000000000, -0.50000000000000000 },
2262   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2263           6.0000000000000000, -0.40000000000000002 },
2264   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2265           6.0000000000000000, -0.30000000000000004 },
2266   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2267           6.0000000000000000, -0.19999999999999996 },
2268   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2269           6.0000000000000000, -0.099999999999999978 },
2270   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2271           6.0000000000000000, 0.0000000000000000 },
2272   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2273           6.0000000000000000, 0.10000000000000009 },
2274   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2275           6.0000000000000000, 0.19999999999999996 },
2276   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2277           6.0000000000000000, 0.30000000000000004 },
2278   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2279           6.0000000000000000, 0.39999999999999991 },
2280   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2281           6.0000000000000000, 0.50000000000000000 },
2282   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2283           6.0000000000000000, 0.60000000000000009 },
2284   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2285           6.0000000000000000, 0.69999999999999996 },
2286   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2287           6.0000000000000000, 0.80000000000000004 },
2288   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2289           6.0000000000000000, 0.89999999999999991 },
2290 };
2291 
2292 // Test function for a=0.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
2293 template <typename Tp>
test033()2294 void test033()
2295 {
2296   const Tp eps = std::numeric_limits<Tp>::epsilon();
2297   Tp max_abs_diff = -Tp(1);
2298   Tp max_abs_frac = -Tp(1);
2299   unsigned int num_datum = sizeof(data033)
2300                          / sizeof(testcase_hyperg<double>);
2301   for (unsigned int i = 0; i < num_datum; ++i)
2302     {
2303       const Tp f = std::tr1::hyperg(Tp(data033[i].a), Tp(data033[i].b),
2304                    Tp(data033[i].c), Tp(data033[i].x));
2305       const Tp f0 = data033[i].f0;
2306       const Tp diff = f - f0;
2307       if (std::abs(diff) > max_abs_diff)
2308         max_abs_diff = std::abs(diff);
2309       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2310         {
2311           const Tp frac = diff / f0;
2312           if (std::abs(frac) > max_abs_frac)
2313             max_abs_frac = std::abs(frac);
2314         }
2315     }
2316   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2317 }
2318 
2319 // Test data for a=0.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
2320 testcase_hyperg<double> data034[] = {
2321   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2322           8.0000000000000000, -0.90000000000000002 },
2323   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2324           8.0000000000000000, -0.80000000000000004 },
2325   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2326           8.0000000000000000, -0.69999999999999996 },
2327   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2328           8.0000000000000000, -0.59999999999999998 },
2329   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2330           8.0000000000000000, -0.50000000000000000 },
2331   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2332           8.0000000000000000, -0.40000000000000002 },
2333   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2334           8.0000000000000000, -0.30000000000000004 },
2335   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2336           8.0000000000000000, -0.19999999999999996 },
2337   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2338           8.0000000000000000, -0.099999999999999978 },
2339   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2340           8.0000000000000000, 0.0000000000000000 },
2341   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2342           8.0000000000000000, 0.10000000000000009 },
2343   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2344           8.0000000000000000, 0.19999999999999996 },
2345   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2346           8.0000000000000000, 0.30000000000000004 },
2347   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2348           8.0000000000000000, 0.39999999999999991 },
2349   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2350           8.0000000000000000, 0.50000000000000000 },
2351   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2352           8.0000000000000000, 0.60000000000000009 },
2353   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2354           8.0000000000000000, 0.69999999999999996 },
2355   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2356           8.0000000000000000, 0.80000000000000004 },
2357   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2358           8.0000000000000000, 0.89999999999999991 },
2359 };
2360 
2361 // Test function for a=0.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
2362 template <typename Tp>
test034()2363 void test034()
2364 {
2365   const Tp eps = std::numeric_limits<Tp>::epsilon();
2366   Tp max_abs_diff = -Tp(1);
2367   Tp max_abs_frac = -Tp(1);
2368   unsigned int num_datum = sizeof(data034)
2369                          / sizeof(testcase_hyperg<double>);
2370   for (unsigned int i = 0; i < num_datum; ++i)
2371     {
2372       const Tp f = std::tr1::hyperg(Tp(data034[i].a), Tp(data034[i].b),
2373                    Tp(data034[i].c), Tp(data034[i].x));
2374       const Tp f0 = data034[i].f0;
2375       const Tp diff = f - f0;
2376       if (std::abs(diff) > max_abs_diff)
2377         max_abs_diff = std::abs(diff);
2378       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2379         {
2380           const Tp frac = diff / f0;
2381           if (std::abs(frac) > max_abs_frac)
2382             max_abs_frac = std::abs(frac);
2383         }
2384     }
2385   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2386 }
2387 
2388 // Test data for a=0.0000000000000000, b=20.000000000000000, c=10.000000000000000.
2389 testcase_hyperg<double> data035[] = {
2390   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2391           10.000000000000000, -0.90000000000000002 },
2392   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2393           10.000000000000000, -0.80000000000000004 },
2394   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2395           10.000000000000000, -0.69999999999999996 },
2396   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2397           10.000000000000000, -0.59999999999999998 },
2398   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2399           10.000000000000000, -0.50000000000000000 },
2400   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2401           10.000000000000000, -0.40000000000000002 },
2402   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2403           10.000000000000000, -0.30000000000000004 },
2404   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2405           10.000000000000000, -0.19999999999999996 },
2406   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2407           10.000000000000000, -0.099999999999999978 },
2408   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2409           10.000000000000000, 0.0000000000000000 },
2410   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2411           10.000000000000000, 0.10000000000000009 },
2412   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2413           10.000000000000000, 0.19999999999999996 },
2414   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2415           10.000000000000000, 0.30000000000000004 },
2416   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2417           10.000000000000000, 0.39999999999999991 },
2418   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2419           10.000000000000000, 0.50000000000000000 },
2420   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2421           10.000000000000000, 0.60000000000000009 },
2422   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2423           10.000000000000000, 0.69999999999999996 },
2424   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2425           10.000000000000000, 0.80000000000000004 },
2426   { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2427           10.000000000000000, 0.89999999999999991 },
2428 };
2429 
2430 // Test function for a=0.0000000000000000, b=20.000000000000000, c=10.000000000000000.
2431 template <typename Tp>
test035()2432 void test035()
2433 {
2434   const Tp eps = std::numeric_limits<Tp>::epsilon();
2435   Tp max_abs_diff = -Tp(1);
2436   Tp max_abs_frac = -Tp(1);
2437   unsigned int num_datum = sizeof(data035)
2438                          / sizeof(testcase_hyperg<double>);
2439   for (unsigned int i = 0; i < num_datum; ++i)
2440     {
2441       const Tp f = std::tr1::hyperg(Tp(data035[i].a), Tp(data035[i].b),
2442                    Tp(data035[i].c), Tp(data035[i].x));
2443       const Tp f0 = data035[i].f0;
2444       const Tp diff = f - f0;
2445       if (std::abs(diff) > max_abs_diff)
2446         max_abs_diff = std::abs(diff);
2447       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2448         {
2449           const Tp frac = diff / f0;
2450           if (std::abs(frac) > max_abs_frac)
2451             max_abs_frac = std::abs(frac);
2452         }
2453     }
2454   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2455 }
2456 
2457 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=2.0000000000000000.
2458 testcase_hyperg<double> data036[] = {
2459   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2460           2.0000000000000000, -0.90000000000000002 },
2461   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2462           2.0000000000000000, -0.80000000000000004 },
2463   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2464           2.0000000000000000, -0.69999999999999996 },
2465   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2466           2.0000000000000000, -0.59999999999999998 },
2467   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2468           2.0000000000000000, -0.50000000000000000 },
2469   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2470           2.0000000000000000, -0.40000000000000002 },
2471   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2472           2.0000000000000000, -0.30000000000000004 },
2473   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2474           2.0000000000000000, -0.19999999999999996 },
2475   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2476           2.0000000000000000, -0.099999999999999978 },
2477   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2478           2.0000000000000000, 0.0000000000000000 },
2479   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2480           2.0000000000000000, 0.10000000000000009 },
2481   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2482           2.0000000000000000, 0.19999999999999996 },
2483   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2484           2.0000000000000000, 0.30000000000000004 },
2485   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2486           2.0000000000000000, 0.39999999999999991 },
2487   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2488           2.0000000000000000, 0.50000000000000000 },
2489   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2490           2.0000000000000000, 0.60000000000000009 },
2491   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2492           2.0000000000000000, 0.69999999999999996 },
2493   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2494           2.0000000000000000, 0.80000000000000004 },
2495   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2496           2.0000000000000000, 0.89999999999999991 },
2497 };
2498 
2499 // Test function for a=0.50000000000000000, b=0.0000000000000000, c=2.0000000000000000.
2500 template <typename Tp>
test036()2501 void test036()
2502 {
2503   const Tp eps = std::numeric_limits<Tp>::epsilon();
2504   Tp max_abs_diff = -Tp(1);
2505   Tp max_abs_frac = -Tp(1);
2506   unsigned int num_datum = sizeof(data036)
2507                          / sizeof(testcase_hyperg<double>);
2508   for (unsigned int i = 0; i < num_datum; ++i)
2509     {
2510       const Tp f = std::tr1::hyperg(Tp(data036[i].a), Tp(data036[i].b),
2511                    Tp(data036[i].c), Tp(data036[i].x));
2512       const Tp f0 = data036[i].f0;
2513       const Tp diff = f - f0;
2514       if (std::abs(diff) > max_abs_diff)
2515         max_abs_diff = std::abs(diff);
2516       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2517         {
2518           const Tp frac = diff / f0;
2519           if (std::abs(frac) > max_abs_frac)
2520             max_abs_frac = std::abs(frac);
2521         }
2522     }
2523   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2524 }
2525 
2526 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=4.0000000000000000.
2527 testcase_hyperg<double> data037[] = {
2528   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2529           4.0000000000000000, -0.90000000000000002 },
2530   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2531           4.0000000000000000, -0.80000000000000004 },
2532   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2533           4.0000000000000000, -0.69999999999999996 },
2534   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2535           4.0000000000000000, -0.59999999999999998 },
2536   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2537           4.0000000000000000, -0.50000000000000000 },
2538   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2539           4.0000000000000000, -0.40000000000000002 },
2540   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2541           4.0000000000000000, -0.30000000000000004 },
2542   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2543           4.0000000000000000, -0.19999999999999996 },
2544   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2545           4.0000000000000000, -0.099999999999999978 },
2546   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2547           4.0000000000000000, 0.0000000000000000 },
2548   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2549           4.0000000000000000, 0.10000000000000009 },
2550   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2551           4.0000000000000000, 0.19999999999999996 },
2552   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2553           4.0000000000000000, 0.30000000000000004 },
2554   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2555           4.0000000000000000, 0.39999999999999991 },
2556   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2557           4.0000000000000000, 0.50000000000000000 },
2558   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2559           4.0000000000000000, 0.60000000000000009 },
2560   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2561           4.0000000000000000, 0.69999999999999996 },
2562   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2563           4.0000000000000000, 0.80000000000000004 },
2564   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2565           4.0000000000000000, 0.89999999999999991 },
2566 };
2567 
2568 // Test function for a=0.50000000000000000, b=0.0000000000000000, c=4.0000000000000000.
2569 template <typename Tp>
test037()2570 void test037()
2571 {
2572   const Tp eps = std::numeric_limits<Tp>::epsilon();
2573   Tp max_abs_diff = -Tp(1);
2574   Tp max_abs_frac = -Tp(1);
2575   unsigned int num_datum = sizeof(data037)
2576                          / sizeof(testcase_hyperg<double>);
2577   for (unsigned int i = 0; i < num_datum; ++i)
2578     {
2579       const Tp f = std::tr1::hyperg(Tp(data037[i].a), Tp(data037[i].b),
2580                    Tp(data037[i].c), Tp(data037[i].x));
2581       const Tp f0 = data037[i].f0;
2582       const Tp diff = f - f0;
2583       if (std::abs(diff) > max_abs_diff)
2584         max_abs_diff = std::abs(diff);
2585       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2586         {
2587           const Tp frac = diff / f0;
2588           if (std::abs(frac) > max_abs_frac)
2589             max_abs_frac = std::abs(frac);
2590         }
2591     }
2592   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2593 }
2594 
2595 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=6.0000000000000000.
2596 testcase_hyperg<double> data038[] = {
2597   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2598           6.0000000000000000, -0.90000000000000002 },
2599   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2600           6.0000000000000000, -0.80000000000000004 },
2601   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2602           6.0000000000000000, -0.69999999999999996 },
2603   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2604           6.0000000000000000, -0.59999999999999998 },
2605   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2606           6.0000000000000000, -0.50000000000000000 },
2607   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2608           6.0000000000000000, -0.40000000000000002 },
2609   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2610           6.0000000000000000, -0.30000000000000004 },
2611   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2612           6.0000000000000000, -0.19999999999999996 },
2613   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2614           6.0000000000000000, -0.099999999999999978 },
2615   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2616           6.0000000000000000, 0.0000000000000000 },
2617   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2618           6.0000000000000000, 0.10000000000000009 },
2619   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2620           6.0000000000000000, 0.19999999999999996 },
2621   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2622           6.0000000000000000, 0.30000000000000004 },
2623   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2624           6.0000000000000000, 0.39999999999999991 },
2625   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2626           6.0000000000000000, 0.50000000000000000 },
2627   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2628           6.0000000000000000, 0.60000000000000009 },
2629   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2630           6.0000000000000000, 0.69999999999999996 },
2631   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2632           6.0000000000000000, 0.80000000000000004 },
2633   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2634           6.0000000000000000, 0.89999999999999991 },
2635 };
2636 
2637 // Test function for a=0.50000000000000000, b=0.0000000000000000, c=6.0000000000000000.
2638 template <typename Tp>
test038()2639 void test038()
2640 {
2641   const Tp eps = std::numeric_limits<Tp>::epsilon();
2642   Tp max_abs_diff = -Tp(1);
2643   Tp max_abs_frac = -Tp(1);
2644   unsigned int num_datum = sizeof(data038)
2645                          / sizeof(testcase_hyperg<double>);
2646   for (unsigned int i = 0; i < num_datum; ++i)
2647     {
2648       const Tp f = std::tr1::hyperg(Tp(data038[i].a), Tp(data038[i].b),
2649                    Tp(data038[i].c), Tp(data038[i].x));
2650       const Tp f0 = data038[i].f0;
2651       const Tp diff = f - f0;
2652       if (std::abs(diff) > max_abs_diff)
2653         max_abs_diff = std::abs(diff);
2654       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2655         {
2656           const Tp frac = diff / f0;
2657           if (std::abs(frac) > max_abs_frac)
2658             max_abs_frac = std::abs(frac);
2659         }
2660     }
2661   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2662 }
2663 
2664 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=8.0000000000000000.
2665 testcase_hyperg<double> data039[] = {
2666   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2667           8.0000000000000000, -0.90000000000000002 },
2668   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2669           8.0000000000000000, -0.80000000000000004 },
2670   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2671           8.0000000000000000, -0.69999999999999996 },
2672   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2673           8.0000000000000000, -0.59999999999999998 },
2674   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2675           8.0000000000000000, -0.50000000000000000 },
2676   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2677           8.0000000000000000, -0.40000000000000002 },
2678   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2679           8.0000000000000000, -0.30000000000000004 },
2680   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2681           8.0000000000000000, -0.19999999999999996 },
2682   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2683           8.0000000000000000, -0.099999999999999978 },
2684   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2685           8.0000000000000000, 0.0000000000000000 },
2686   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2687           8.0000000000000000, 0.10000000000000009 },
2688   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2689           8.0000000000000000, 0.19999999999999996 },
2690   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2691           8.0000000000000000, 0.30000000000000004 },
2692   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2693           8.0000000000000000, 0.39999999999999991 },
2694   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2695           8.0000000000000000, 0.50000000000000000 },
2696   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2697           8.0000000000000000, 0.60000000000000009 },
2698   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2699           8.0000000000000000, 0.69999999999999996 },
2700   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2701           8.0000000000000000, 0.80000000000000004 },
2702   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2703           8.0000000000000000, 0.89999999999999991 },
2704 };
2705 
2706 // Test function for a=0.50000000000000000, b=0.0000000000000000, c=8.0000000000000000.
2707 template <typename Tp>
test039()2708 void test039()
2709 {
2710   const Tp eps = std::numeric_limits<Tp>::epsilon();
2711   Tp max_abs_diff = -Tp(1);
2712   Tp max_abs_frac = -Tp(1);
2713   unsigned int num_datum = sizeof(data039)
2714                          / sizeof(testcase_hyperg<double>);
2715   for (unsigned int i = 0; i < num_datum; ++i)
2716     {
2717       const Tp f = std::tr1::hyperg(Tp(data039[i].a), Tp(data039[i].b),
2718                    Tp(data039[i].c), Tp(data039[i].x));
2719       const Tp f0 = data039[i].f0;
2720       const Tp diff = f - f0;
2721       if (std::abs(diff) > max_abs_diff)
2722         max_abs_diff = std::abs(diff);
2723       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2724         {
2725           const Tp frac = diff / f0;
2726           if (std::abs(frac) > max_abs_frac)
2727             max_abs_frac = std::abs(frac);
2728         }
2729     }
2730   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2731 }
2732 
2733 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=10.000000000000000.
2734 testcase_hyperg<double> data040[] = {
2735   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2736           10.000000000000000, -0.90000000000000002 },
2737   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2738           10.000000000000000, -0.80000000000000004 },
2739   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2740           10.000000000000000, -0.69999999999999996 },
2741   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2742           10.000000000000000, -0.59999999999999998 },
2743   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2744           10.000000000000000, -0.50000000000000000 },
2745   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2746           10.000000000000000, -0.40000000000000002 },
2747   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2748           10.000000000000000, -0.30000000000000004 },
2749   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2750           10.000000000000000, -0.19999999999999996 },
2751   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2752           10.000000000000000, -0.099999999999999978 },
2753   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2754           10.000000000000000, 0.0000000000000000 },
2755   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2756           10.000000000000000, 0.10000000000000009 },
2757   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2758           10.000000000000000, 0.19999999999999996 },
2759   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2760           10.000000000000000, 0.30000000000000004 },
2761   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2762           10.000000000000000, 0.39999999999999991 },
2763   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2764           10.000000000000000, 0.50000000000000000 },
2765   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2766           10.000000000000000, 0.60000000000000009 },
2767   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2768           10.000000000000000, 0.69999999999999996 },
2769   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2770           10.000000000000000, 0.80000000000000004 },
2771   { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2772           10.000000000000000, 0.89999999999999991 },
2773 };
2774 
2775 // Test function for a=0.50000000000000000, b=0.0000000000000000, c=10.000000000000000.
2776 template <typename Tp>
test040()2777 void test040()
2778 {
2779   const Tp eps = std::numeric_limits<Tp>::epsilon();
2780   Tp max_abs_diff = -Tp(1);
2781   Tp max_abs_frac = -Tp(1);
2782   unsigned int num_datum = sizeof(data040)
2783                          / sizeof(testcase_hyperg<double>);
2784   for (unsigned int i = 0; i < num_datum; ++i)
2785     {
2786       const Tp f = std::tr1::hyperg(Tp(data040[i].a), Tp(data040[i].b),
2787                    Tp(data040[i].c), Tp(data040[i].x));
2788       const Tp f0 = data040[i].f0;
2789       const Tp diff = f - f0;
2790       if (std::abs(diff) > max_abs_diff)
2791         max_abs_diff = std::abs(diff);
2792       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2793         {
2794           const Tp frac = diff / f0;
2795           if (std::abs(frac) > max_abs_frac)
2796             max_abs_frac = std::abs(frac);
2797         }
2798     }
2799   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2800 }
2801 
2802 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=2.0000000000000000.
2803 testcase_hyperg<double> data041[] = {
2804   { 0.91383715388743758, 0.50000000000000000, 0.50000000000000000,
2805           2.0000000000000000, -0.90000000000000002 },
2806   { 0.92151232618202283, 0.50000000000000000, 0.50000000000000000,
2807           2.0000000000000000, -0.80000000000000004 },
2808   { 0.92955086110354823, 0.50000000000000000, 0.50000000000000000,
2809           2.0000000000000000, -0.69999999999999996 },
2810   { 0.93798900119104844, 0.50000000000000000, 0.50000000000000000,
2811           2.0000000000000000, -0.59999999999999998 },
2812   { 0.94686887307107304, 0.50000000000000000, 0.50000000000000000,
2813           2.0000000000000000, -0.50000000000000000 },
2814   { 0.95623987262143295, 0.50000000000000000, 0.50000000000000000,
2815           2.0000000000000000, -0.40000000000000002 },
2816   { 0.96616049387450154, 0.50000000000000000, 0.50000000000000000,
2817           2.0000000000000000, -0.30000000000000004 },
2818   { 0.97670078782187519, 0.50000000000000000, 0.50000000000000000,
2819           2.0000000000000000, -0.19999999999999996 },
2820   { 0.98794573712298384, 0.50000000000000000, 0.50000000000000000,
2821           2.0000000000000000, -0.099999999999999978 },
2822   { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
2823           2.0000000000000000, 0.0000000000000000 },
2824   { 1.0129947682256604, 0.50000000000000000, 0.50000000000000000,
2825           2.0000000000000000, 0.10000000000000009 },
2826   { 1.0270980168168973, 0.50000000000000000, 0.50000000000000000,
2827           2.0000000000000000, 0.19999999999999996 },
2828   { 1.0425304520063581, 0.50000000000000000, 0.50000000000000000,
2829           2.0000000000000000, 0.30000000000000004 },
2830   { 1.0595915916161471, 0.50000000000000000, 0.50000000000000000,
2831           2.0000000000000000, 0.39999999999999991 },
2832   { 1.0787052023767585, 0.50000000000000000, 0.50000000000000000,
2833           2.0000000000000000, 0.50000000000000000 },
2834   { 1.1005053642285867, 0.50000000000000000, 0.50000000000000000,
2835           2.0000000000000000, 0.60000000000000009 },
2836   { 1.1260196351148746, 0.50000000000000000, 0.50000000000000000,
2837           2.0000000000000000, 0.69999999999999996 },
2838   { 1.1571341977338991, 0.50000000000000000, 0.50000000000000000,
2839           2.0000000000000000, 0.80000000000000004 },
2840   { 1.1982111053717450, 0.50000000000000000, 0.50000000000000000,
2841           2.0000000000000000, 0.89999999999999991 },
2842 };
2843 
2844 // Test function for a=0.50000000000000000, b=0.50000000000000000, c=2.0000000000000000.
2845 template <typename Tp>
test041()2846 void test041()
2847 {
2848   const Tp eps = std::numeric_limits<Tp>::epsilon();
2849   Tp max_abs_diff = -Tp(1);
2850   Tp max_abs_frac = -Tp(1);
2851   unsigned int num_datum = sizeof(data041)
2852                          / sizeof(testcase_hyperg<double>);
2853   for (unsigned int i = 0; i < num_datum; ++i)
2854     {
2855       const Tp f = std::tr1::hyperg(Tp(data041[i].a), Tp(data041[i].b),
2856                    Tp(data041[i].c), Tp(data041[i].x));
2857       const Tp f0 = data041[i].f0;
2858       const Tp diff = f - f0;
2859       if (std::abs(diff) > max_abs_diff)
2860         max_abs_diff = std::abs(diff);
2861       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2862         {
2863           const Tp frac = diff / f0;
2864           if (std::abs(frac) > max_abs_frac)
2865             max_abs_frac = std::abs(frac);
2866         }
2867     }
2868   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2869 }
2870 
2871 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=4.0000000000000000.
2872 testcase_hyperg<double> data042[] = {
2873   { 0.95255425675562733, 0.50000000000000000, 0.50000000000000000,
2874           4.0000000000000000, -0.90000000000000002 },
2875   { 0.95712841850078245, 0.50000000000000000, 0.50000000000000000,
2876           4.0000000000000000, -0.80000000000000004 },
2877   { 0.96184734120034532, 0.50000000000000000, 0.50000000000000000,
2878           4.0000000000000000, -0.69999999999999996 },
2879   { 0.96672141255196242, 0.50000000000000000, 0.50000000000000000,
2880           4.0000000000000000, -0.59999999999999998 },
2881   { 0.97176228710138646, 0.50000000000000000, 0.50000000000000000,
2882           4.0000000000000000, -0.50000000000000000 },
2883   { 0.97698311668286286, 0.50000000000000000, 0.50000000000000000,
2884           4.0000000000000000, -0.40000000000000002 },
2885   { 0.98239883902556069, 0.50000000000000000, 0.50000000000000000,
2886           4.0000000000000000, -0.30000000000000004 },
2887   { 0.98802654401961032, 0.50000000000000000, 0.50000000000000000,
2888           4.0000000000000000, -0.19999999999999996 },
2889   { 0.99388594556732701, 0.50000000000000000, 0.50000000000000000,
2890           4.0000000000000000, -0.099999999999999978 },
2891   { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
2892           4.0000000000000000, 0.0000000000000000 },
2893   { 1.0063957328951061, 0.50000000000000000, 0.50000000000000000,
2894           4.0000000000000000, 0.10000000000000009 },
2895   { 1.0131053706824598, 0.50000000000000000, 0.50000000000000000,
2896           4.0000000000000000, 0.19999999999999996 },
2897   { 1.0201679332118803, 0.50000000000000000, 0.50000000000000000,
2898           4.0000000000000000, 0.30000000000000004 },
2899   { 1.0276315524377497, 0.50000000000000000, 0.50000000000000000,
2900           4.0000000000000000, 0.39999999999999991 },
2901   { 1.0355569942816882, 0.50000000000000000, 0.50000000000000000,
2902           4.0000000000000000, 0.50000000000000000 },
2903   { 1.0440233080381554, 0.50000000000000000, 0.50000000000000000,
2904           4.0000000000000000, 0.60000000000000009 },
2905   { 1.0531375808028993, 0.50000000000000000, 0.50000000000000000,
2906           4.0000000000000000, 0.69999999999999996 },
2907   { 1.0630536689840200, 0.50000000000000000, 0.50000000000000000,
2908           4.0000000000000000, 0.80000000000000004 },
2909   { 1.0740149570414563, 0.50000000000000000, 0.50000000000000000,
2910           4.0000000000000000, 0.89999999999999991 },
2911 };
2912 
2913 // Test function for a=0.50000000000000000, b=0.50000000000000000, c=4.0000000000000000.
2914 template <typename Tp>
test042()2915 void test042()
2916 {
2917   const Tp eps = std::numeric_limits<Tp>::epsilon();
2918   Tp max_abs_diff = -Tp(1);
2919   Tp max_abs_frac = -Tp(1);
2920   unsigned int num_datum = sizeof(data042)
2921                          / sizeof(testcase_hyperg<double>);
2922   for (unsigned int i = 0; i < num_datum; ++i)
2923     {
2924       const Tp f = std::tr1::hyperg(Tp(data042[i].a), Tp(data042[i].b),
2925                    Tp(data042[i].c), Tp(data042[i].x));
2926       const Tp f0 = data042[i].f0;
2927       const Tp diff = f - f0;
2928       if (std::abs(diff) > max_abs_diff)
2929         max_abs_diff = std::abs(diff);
2930       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2931         {
2932           const Tp frac = diff / f0;
2933           if (std::abs(frac) > max_abs_frac)
2934             max_abs_frac = std::abs(frac);
2935         }
2936     }
2937   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2938 }
2939 
2940 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=6.0000000000000000.
2941 testcase_hyperg<double> data043[] = {
2942   { 0.96694084713323891, 0.50000000000000000, 0.50000000000000000,
2943           6.0000000000000000, -0.90000000000000002 },
2944   { 0.97024454918852587, 0.50000000000000000, 0.50000000000000000,
2945           6.0000000000000000, -0.80000000000000004 },
2946   { 0.97362815600391461, 0.50000000000000000, 0.50000000000000000,
2947           6.0000000000000000, -0.69999999999999996 },
2948   { 0.97709622064205115, 0.50000000000000000, 0.50000000000000000,
2949           6.0000000000000000, -0.59999999999999998 },
2950   { 0.98065374770570624, 0.50000000000000000, 0.50000000000000000,
2951           6.0000000000000000, -0.50000000000000000 },
2952   { 0.98430626119885489, 0.50000000000000000, 0.50000000000000000,
2953           6.0000000000000000, -0.40000000000000002 },
2954   { 0.98805988669621037, 0.50000000000000000, 0.50000000000000000,
2955           6.0000000000000000, -0.30000000000000004 },
2956   { 0.99192145185739655, 0.50000000000000000, 0.50000000000000000,
2957           6.0000000000000000, -0.19999999999999996 },
2958   { 0.99589861079880937, 0.50000000000000000, 0.50000000000000000,
2959           6.0000000000000000, -0.099999999999999978 },
2960   { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
2961           6.0000000000000000, 0.0000000000000000 },
2962   { 1.0042354366729904, 0.50000000000000000, 0.50000000000000000,
2963           6.0000000000000000, 0.10000000000000009 },
2964   { 1.0086161755545404, 0.50000000000000000, 0.50000000000000000,
2965           6.0000000000000000, 0.19999999999999996 },
2966   { 1.0131552481403503, 0.50000000000000000, 0.50000000000000000,
2967           6.0000000000000000, 0.30000000000000004 },
2968   { 1.0178679218284707, 0.50000000000000000, 0.50000000000000000,
2969           6.0000000000000000, 0.39999999999999991 },
2970   { 1.0227723400312978, 0.50000000000000000, 0.50000000000000000,
2971           6.0000000000000000, 0.50000000000000000 },
2972   { 1.0278904483717863, 0.50000000000000000, 0.50000000000000000,
2973           6.0000000000000000, 0.60000000000000009 },
2974   { 1.0332494012993472, 0.50000000000000000, 0.50000000000000000,
2975           6.0000000000000000, 0.69999999999999996 },
2976   { 1.0388838453357794, 0.50000000000000000, 0.50000000000000000,
2977           6.0000000000000000, 0.80000000000000004 },
2978   { 1.0448400142331342, 0.50000000000000000, 0.50000000000000000,
2979           6.0000000000000000, 0.89999999999999991 },
2980 };
2981 
2982 // Test function for a=0.50000000000000000, b=0.50000000000000000, c=6.0000000000000000.
2983 template <typename Tp>
test043()2984 void test043()
2985 {
2986   const Tp eps = std::numeric_limits<Tp>::epsilon();
2987   Tp max_abs_diff = -Tp(1);
2988   Tp max_abs_frac = -Tp(1);
2989   unsigned int num_datum = sizeof(data043)
2990                          / sizeof(testcase_hyperg<double>);
2991   for (unsigned int i = 0; i < num_datum; ++i)
2992     {
2993       const Tp f = std::tr1::hyperg(Tp(data043[i].a), Tp(data043[i].b),
2994                    Tp(data043[i].c), Tp(data043[i].x));
2995       const Tp f0 = data043[i].f0;
2996       const Tp diff = f - f0;
2997       if (std::abs(diff) > max_abs_diff)
2998         max_abs_diff = std::abs(diff);
2999       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3000         {
3001           const Tp frac = diff / f0;
3002           if (std::abs(frac) > max_abs_frac)
3003             max_abs_frac = std::abs(frac);
3004         }
3005     }
3006   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3007 }
3008 
3009 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=8.0000000000000000.
3010 testcase_hyperg<double> data044[] = {
3011   { 0.97456073259047449, 0.50000000000000000, 0.50000000000000000,
3012           8.0000000000000000, -0.90000000000000002 },
3013   { 0.97715689327833344, 0.50000000000000000, 0.50000000000000000,
3014           8.0000000000000000, -0.80000000000000004 },
3015   { 0.97980416868943099, 0.50000000000000000, 0.50000000000000000,
3016           8.0000000000000000, -0.69999999999999996 },
3017   { 0.98250498942832509, 0.50000000000000000, 0.50000000000000000,
3018           8.0000000000000000, -0.59999999999999998 },
3019   { 0.98526199049760832, 0.50000000000000000, 0.50000000000000000,
3020           8.0000000000000000, -0.50000000000000000 },
3021   { 0.98807803762902813, 0.50000000000000000, 0.50000000000000000,
3022           8.0000000000000000, -0.40000000000000002 },
3023   { 0.99095625840920332, 0.50000000000000000, 0.50000000000000000,
3024           8.0000000000000000, -0.30000000000000004 },
3025   { 0.99390007937387959, 0.50000000000000000, 0.50000000000000000,
3026           8.0000000000000000, -0.19999999999999996 },
3027   { 0.99691327061866730, 0.50000000000000000, 0.50000000000000000,
3028           8.0000000000000000, -0.099999999999999978 },
3029   { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
3030           8.0000000000000000, 0.0000000000000000 },
3031   { 1.0031648997547440, 0.50000000000000000, 0.50000000000000000,
3032           8.0000000000000000, 0.10000000000000009 },
3033   { 1.0064131494767281, 0.50000000000000000, 0.50000000000000000,
3034           8.0000000000000000, 0.19999999999999996 },
3035   { 1.0097505810668461, 0.50000000000000000, 0.50000000000000000,
3036           8.0000000000000000, 0.30000000000000004 },
3037   { 1.0131838138968663, 0.50000000000000000, 0.50000000000000000,
3038           8.0000000000000000, 0.39999999999999991 },
3039   { 1.0167204326938339, 0.50000000000000000, 0.50000000000000000,
3040           8.0000000000000000, 0.50000000000000000 },
3041   { 1.0203692279382193, 0.50000000000000000, 0.50000000000000000,
3042           8.0000000000000000, 0.60000000000000009 },
3043   { 1.0241405318057402, 0.50000000000000000, 0.50000000000000000,
3044           8.0000000000000000, 0.69999999999999996 },
3045   { 1.0280467087844301, 0.50000000000000000, 0.50000000000000000,
3046           8.0000000000000000, 0.80000000000000004 },
3047   { 1.0321029179180026, 0.50000000000000000, 0.50000000000000000,
3048           8.0000000000000000, 0.89999999999999991 },
3049 };
3050 
3051 // Test function for a=0.50000000000000000, b=0.50000000000000000, c=8.0000000000000000.
3052 template <typename Tp>
test044()3053 void test044()
3054 {
3055   const Tp eps = std::numeric_limits<Tp>::epsilon();
3056   Tp max_abs_diff = -Tp(1);
3057   Tp max_abs_frac = -Tp(1);
3058   unsigned int num_datum = sizeof(data044)
3059                          / sizeof(testcase_hyperg<double>);
3060   for (unsigned int i = 0; i < num_datum; ++i)
3061     {
3062       const Tp f = std::tr1::hyperg(Tp(data044[i].a), Tp(data044[i].b),
3063                    Tp(data044[i].c), Tp(data044[i].x));
3064       const Tp f0 = data044[i].f0;
3065       const Tp diff = f - f0;
3066       if (std::abs(diff) > max_abs_diff)
3067         max_abs_diff = std::abs(diff);
3068       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3069         {
3070           const Tp frac = diff / f0;
3071           if (std::abs(frac) > max_abs_frac)
3072             max_abs_frac = std::abs(frac);
3073         }
3074     }
3075   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3076 }
3077 
3078 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=10.000000000000000.
3079 testcase_hyperg<double> data045[] = {
3080   { 0.97930223035212161, 0.50000000000000000, 0.50000000000000000,
3081           10.000000000000000, -0.90000000000000002 },
3082   { 0.98144406855076416, 0.50000000000000000, 0.50000000000000000,
3083           10.000000000000000, -0.80000000000000004 },
3084   { 0.98362155940297302, 0.50000000000000000, 0.50000000000000000,
3085           10.000000000000000, -0.69999999999999996 },
3086   { 0.98583616201745805, 0.50000000000000000, 0.50000000000000000,
3087           10.000000000000000, -0.59999999999999998 },
3088   { 0.98808944235385077, 0.50000000000000000, 0.50000000000000000,
3089           10.000000000000000, -0.50000000000000000 },
3090   { 0.99038308530635433, 0.50000000000000000, 0.50000000000000000,
3091           10.000000000000000, -0.40000000000000002 },
3092   { 0.99271890872975732, 0.50000000000000000, 0.50000000000000000,
3093           10.000000000000000, -0.30000000000000004 },
3094   { 0.99509887982916734, 0.50000000000000000, 0.50000000000000000,
3095           10.000000000000000, -0.19999999999999996 },
3096   { 0.99752513445413604, 0.50000000000000000, 0.50000000000000000,
3097           10.000000000000000, -0.099999999999999978 },
3098   { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
3099           10.000000000000000, 0.0000000000000000 },
3100   { 1.0025260228440118, 0.50000000000000000, 0.50000000000000000,
3101           10.000000000000000, 0.10000000000000009 },
3102   { 1.0051060015613384, 0.50000000000000000, 0.50000000000000000,
3103           10.000000000000000, 0.19999999999999996 },
3104   { 1.0077430276253163, 0.50000000000000000, 0.50000000000000000,
3105           10.000000000000000, 0.30000000000000004 },
3106   { 1.0104405359789990, 0.50000000000000000, 0.50000000000000000,
3107           10.000000000000000, 0.39999999999999991 },
3108   { 1.0132023689128868, 0.50000000000000000, 0.50000000000000000,
3109           10.000000000000000, 0.50000000000000000 },
3110   { 1.0160328583559475, 0.50000000000000000, 0.50000000000000000,
3111           10.000000000000000, 0.60000000000000009 },
3112   { 1.0189369344885053, 0.50000000000000000, 0.50000000000000000,
3113           10.000000000000000, 0.69999999999999996 },
3114   { 1.0219202735809589, 0.50000000000000000, 0.50000000000000000,
3115           10.000000000000000, 0.80000000000000004 },
3116   { 1.0249895076611382, 0.50000000000000000, 0.50000000000000000,
3117           10.000000000000000, 0.89999999999999991 },
3118 };
3119 
3120 // Test function for a=0.50000000000000000, b=0.50000000000000000, c=10.000000000000000.
3121 template <typename Tp>
test045()3122 void test045()
3123 {
3124   const Tp eps = std::numeric_limits<Tp>::epsilon();
3125   Tp max_abs_diff = -Tp(1);
3126   Tp max_abs_frac = -Tp(1);
3127   unsigned int num_datum = sizeof(data045)
3128                          / sizeof(testcase_hyperg<double>);
3129   for (unsigned int i = 0; i < num_datum; ++i)
3130     {
3131       const Tp f = std::tr1::hyperg(Tp(data045[i].a), Tp(data045[i].b),
3132                    Tp(data045[i].c), Tp(data045[i].x));
3133       const Tp f0 = data045[i].f0;
3134       const Tp diff = f - f0;
3135       if (std::abs(diff) > max_abs_diff)
3136         max_abs_diff = std::abs(diff);
3137       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3138         {
3139           const Tp frac = diff / f0;
3140           if (std::abs(frac) > max_abs_frac)
3141             max_abs_frac = std::abs(frac);
3142         }
3143     }
3144   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3145 }
3146 
3147 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=2.0000000000000000.
3148 testcase_hyperg<double> data046[] = {
3149   { 0.84089972268671609, 0.50000000000000000, 1.0000000000000000,
3150           2.0000000000000000, -0.90000000000000002 },
3151   { 0.85410196624968437, 0.50000000000000000, 1.0000000000000000,
3152           2.0000000000000000, -0.80000000000000004 },
3153   { 0.86811566011579933, 0.50000000000000000, 1.0000000000000000,
3154           2.0000000000000000, -0.69999999999999996 },
3155   { 0.88303688022450544, 0.50000000000000000, 1.0000000000000000,
3156           2.0000000000000000, -0.59999999999999998 },
3157   { 0.89897948556635565, 0.50000000000000000, 1.0000000000000000,
3158           2.0000000000000000, -0.50000000000000000 },
3159   { 0.91607978309961580, 0.50000000000000000, 1.0000000000000000,
3160           2.0000000000000000, -0.40000000000000002 },
3161   { 0.93450283399425305, 0.50000000000000000, 1.0000000000000000,
3162           2.0000000000000000, -0.30000000000000004 },
3163   { 0.95445115010332193, 0.50000000000000000, 1.0000000000000000,
3164           2.0000000000000000, -0.19999999999999996 },
3165   { 0.97617696340303095, 0.50000000000000000, 1.0000000000000000,
3166           2.0000000000000000, -0.099999999999999978 },
3167   { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
3168           2.0000000000000000, 0.0000000000000000 },
3169   { 1.0263340389897240, 0.50000000000000000, 1.0000000000000000,
3170           2.0000000000000000, 0.10000000000000009 },
3171   { 1.0557280900008410, 0.50000000000000000, 1.0000000000000000,
3172           2.0000000000000000, 0.19999999999999996 },
3173   { 1.0889331564394962, 0.50000000000000000, 1.0000000000000000,
3174           2.0000000000000000, 0.30000000000000004 },
3175   { 1.1270166537925830, 0.50000000000000000, 1.0000000000000000,
3176           2.0000000000000000, 0.39999999999999991 },
3177   { 1.1715728752538095, 0.50000000000000000, 1.0000000000000000,
3178           2.0000000000000000, 0.50000000000000000 },
3179   { 1.2251482265544145, 0.50000000000000000, 1.0000000000000000,
3180           2.0000000000000000, 0.60000000000000009 },
3181   { 1.2922212642709541, 0.50000000000000000, 1.0000000000000000,
3182           2.0000000000000000, 0.69999999999999996 },
3183   { 1.3819660112501042, 0.50000000000000000, 1.0000000000000000,
3184           2.0000000000000000, 0.80000000000000004 },
3185   { 1.5194938532959119, 0.50000000000000000, 1.0000000000000000,
3186           2.0000000000000000, 0.89999999999999991 },
3187 };
3188 
3189 // Test function for a=0.50000000000000000, b=1.0000000000000000, c=2.0000000000000000.
3190 template <typename Tp>
test046()3191 void test046()
3192 {
3193   const Tp eps = std::numeric_limits<Tp>::epsilon();
3194   Tp max_abs_diff = -Tp(1);
3195   Tp max_abs_frac = -Tp(1);
3196   unsigned int num_datum = sizeof(data046)
3197                          / sizeof(testcase_hyperg<double>);
3198   for (unsigned int i = 0; i < num_datum; ++i)
3199     {
3200       const Tp f = std::tr1::hyperg(Tp(data046[i].a), Tp(data046[i].b),
3201                    Tp(data046[i].c), Tp(data046[i].x));
3202       const Tp f0 = data046[i].f0;
3203       const Tp diff = f - f0;
3204       if (std::abs(diff) > max_abs_diff)
3205         max_abs_diff = std::abs(diff);
3206       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3207         {
3208           const Tp frac = diff / f0;
3209           if (std::abs(frac) > max_abs_frac)
3210             max_abs_frac = std::abs(frac);
3211         }
3212     }
3213   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3214 }
3215 
3216 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=4.0000000000000000.
3217 testcase_hyperg<double> data047[] = {
3218   { 0.90992197313391499, 0.50000000000000000, 1.0000000000000000,
3219           4.0000000000000000, -0.90000000000000002 },
3220   { 0.91822592662244507, 0.50000000000000000, 1.0000000000000000,
3221           4.0000000000000000, -0.80000000000000004 },
3222   { 0.92687104566419531, 0.50000000000000000, 1.0000000000000000,
3223           4.0000000000000000, -0.69999999999999996 },
3224   { 0.93588628166548815, 0.50000000000000000, 1.0000000000000000,
3225           4.0000000000000000, -0.59999999999999998 },
3226   { 0.94530459215552909, 0.50000000000000000, 1.0000000000000000,
3227           4.0000000000000000, -0.50000000000000000 },
3228   { 0.95516374875247467, 0.50000000000000000, 1.0000000000000000,
3229           4.0000000000000000, -0.40000000000000002 },
3230   { 0.96550736800511827, 0.50000000000000000, 1.0000000000000000,
3231           4.0000000000000000, -0.30000000000000004 },
3232   { 0.97638624595136270, 0.50000000000000000, 1.0000000000000000,
3233           4.0000000000000000, -0.19999999999999996 },
3234   { 0.98786011482678993, 0.50000000000000000, 1.0000000000000000,
3235           4.0000000000000000, -0.099999999999999978 },
3236   { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
3237           4.0000000000000000, 0.0000000000000000 },
3238   { 1.0128914530682316, 0.50000000000000000, 1.0000000000000000,
3239           4.0000000000000000, 0.10000000000000009 },
3240   { 1.0266391040215350, 0.50000000000000000, 1.0000000000000000,
3241           4.0000000000000000, 0.19999999999999996 },
3242   { 1.0413732738729464, 0.50000000000000000, 1.0000000000000000,
3243           4.0000000000000000, 0.30000000000000004 },
3244   { 1.0572599536532992, 0.50000000000000000, 1.0000000000000000,
3245           4.0000000000000000, 0.39999999999999991 },
3246   { 1.0745166004060953, 0.50000000000000000, 1.0000000000000000,
3247           4.0000000000000000, 0.50000000000000000 },
3248   { 1.0934387388831386, 0.50000000000000000, 1.0000000000000000,
3249           4.0000000000000000, 0.60000000000000009 },
3250   { 1.1144486980714641, 0.50000000000000000, 1.0000000000000000,
3251           4.0000000000000000, 0.69999999999999996 },
3252   { 1.1381966011250106, 0.50000000000000000, 1.0000000000000000,
3253           4.0000000000000000, 0.80000000000000004 },
3254   { 1.1658171625342397, 0.50000000000000000, 1.0000000000000000,
3255           4.0000000000000000, 0.89999999999999991 },
3256 };
3257 
3258 // Test function for a=0.50000000000000000, b=1.0000000000000000, c=4.0000000000000000.
3259 template <typename Tp>
test047()3260 void test047()
3261 {
3262   const Tp eps = std::numeric_limits<Tp>::epsilon();
3263   Tp max_abs_diff = -Tp(1);
3264   Tp max_abs_frac = -Tp(1);
3265   unsigned int num_datum = sizeof(data047)
3266                          / sizeof(testcase_hyperg<double>);
3267   for (unsigned int i = 0; i < num_datum; ++i)
3268     {
3269       const Tp f = std::tr1::hyperg(Tp(data047[i].a), Tp(data047[i].b),
3270                    Tp(data047[i].c), Tp(data047[i].x));
3271       const Tp f0 = data047[i].f0;
3272       const Tp diff = f - f0;
3273       if (std::abs(diff) > max_abs_diff)
3274         max_abs_diff = std::abs(diff);
3275       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3276         {
3277           const Tp frac = diff / f0;
3278           if (std::abs(frac) > max_abs_frac)
3279             max_abs_frac = std::abs(frac);
3280         }
3281     }
3282   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3283 }
3284 
3285 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=6.0000000000000000.
3286 testcase_hyperg<double> data048[] = {
3287   { 0.93641908369732885, 0.50000000000000000, 1.0000000000000000,
3288           6.0000000000000000, -0.90000000000000002 },
3289   { 0.94256349654111315, 0.50000000000000000, 1.0000000000000000,
3290           6.0000000000000000, -0.80000000000000004 },
3291   { 0.94890138508461319, 0.50000000000000000, 1.0000000000000000,
3292           6.0000000000000000, -0.69999999999999996 },
3293   { 0.95544578858430007, 0.50000000000000000, 1.0000000000000000,
3294           6.0000000000000000, -0.59999999999999998 },
3295   { 0.96221121193620718, 0.50000000000000000, 1.0000000000000000,
3296           6.0000000000000000, -0.50000000000000000 },
3297   { 0.96921386948293542, 0.50000000000000000, 1.0000000000000000,
3298           6.0000000000000000, -0.40000000000000002 },
3299   { 0.97647198488394704, 0.50000000000000000, 1.0000000000000000,
3300           6.0000000000000000, -0.30000000000000004 },
3301   { 0.98400616412578656, 0.50000000000000000, 1.0000000000000000,
3302           6.0000000000000000, -0.19999999999999996 },
3303   { 0.99183986544963032, 0.50000000000000000, 1.0000000000000000,
3304           6.0000000000000000, -0.099999999999999978 },
3305   { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
3306           6.0000000000000000, 0.0000000000000000 },
3307   { 1.0085177124149158, 0.50000000000000000, 1.0000000000000000,
3308           6.0000000000000000, 0.10000000000000009 },
3309   { 1.0174294150407122, 0.50000000000000000, 1.0000000000000000,
3310           6.0000000000000000, 0.19999999999999996 },
3311   { 1.0267781897388850, 0.50000000000000000, 1.0000000000000000,
3312           6.0000000000000000, 0.30000000000000004 },
3313   { 1.0366157405967285, 0.50000000000000000, 1.0000000000000000,
3314           6.0000000000000000, 0.39999999999999991 },
3315   { 1.0470052068648839, 0.50000000000000000, 1.0000000000000000,
3316           6.0000000000000000, 0.50000000000000000 },
3317   { 1.0580253905513313, 0.50000000000000000, 1.0000000000000000,
3318           6.0000000000000000, 0.60000000000000009 },
3319   { 1.0697774741209765, 0.50000000000000000, 1.0000000000000000,
3320           6.0000000000000000, 0.69999999999999996 },
3321   { 1.0823965556448414, 0.50000000000000000, 1.0000000000000000,
3322           6.0000000000000000, 0.80000000000000004 },
3323   { 1.0960739512057103, 0.50000000000000000, 1.0000000000000000,
3324           6.0000000000000000, 0.89999999999999991 },
3325 };
3326 
3327 // Test function for a=0.50000000000000000, b=1.0000000000000000, c=6.0000000000000000.
3328 template <typename Tp>
test048()3329 void test048()
3330 {
3331   const Tp eps = std::numeric_limits<Tp>::epsilon();
3332   Tp max_abs_diff = -Tp(1);
3333   Tp max_abs_frac = -Tp(1);
3334   unsigned int num_datum = sizeof(data048)
3335                          / sizeof(testcase_hyperg<double>);
3336   for (unsigned int i = 0; i < num_datum; ++i)
3337     {
3338       const Tp f = std::tr1::hyperg(Tp(data048[i].a), Tp(data048[i].b),
3339                    Tp(data048[i].c), Tp(data048[i].x));
3340       const Tp f0 = data048[i].f0;
3341       const Tp diff = f - f0;
3342       if (std::abs(diff) > max_abs_diff)
3343         max_abs_diff = std::abs(diff);
3344       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3345         {
3346           const Tp frac = diff / f0;
3347           if (std::abs(frac) > max_abs_frac)
3348             max_abs_frac = std::abs(frac);
3349         }
3350     }
3351   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3352 }
3353 
3354 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=8.0000000000000000.
3355 testcase_hyperg<double> data049[] = {
3356   { 0.95069883346936235, 0.50000000000000000, 1.0000000000000000,
3357           8.0000000000000000, -0.90000000000000002 },
3358   { 0.95559618047704165, 0.50000000000000000, 1.0000000000000000,
3359           8.0000000000000000, -0.80000000000000004 },
3360   { 0.96061938755931653, 0.50000000000000000, 1.0000000000000000,
3361           8.0000000000000000, -0.69999999999999996 },
3362   { 0.96577553912851344, 0.50000000000000000, 1.0000000000000000,
3363           8.0000000000000000, -0.59999999999999998 },
3364   { 0.97107239473807716, 0.50000000000000000, 1.0000000000000000,
3365           8.0000000000000000, -0.50000000000000000 },
3366   { 0.97651848528588503, 0.50000000000000000, 1.0000000000000000,
3367           8.0000000000000000, -0.40000000000000002 },
3368   { 0.98212322830227139, 0.50000000000000000, 1.0000000000000000,
3369           8.0000000000000000, -0.30000000000000004 },
3370   { 0.98789706736195781, 0.50000000000000000, 1.0000000000000000,
3371           8.0000000000000000, -0.19999999999999996 },
3372   { 0.99385164237825074, 0.50000000000000000, 1.0000000000000000,
3373           8.0000000000000000, -0.099999999999999978 },
3374   { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
3375           8.0000000000000000, 0.0000000000000000 },
3376   { 1.0063568569383123, 0.50000000000000000, 1.0000000000000000,
3377           8.0000000000000000, 0.10000000000000009 },
3378   { 1.0129389344715818, 0.50000000000000000, 1.0000000000000000,
3379           8.0000000000000000, 0.19999999999999996 },
3380   { 1.0197653907773940, 0.50000000000000000, 1.0000000000000000,
3381           8.0000000000000000, 0.30000000000000004 },
3382   { 1.0268583912277143, 0.50000000000000000, 1.0000000000000000,
3383           8.0000000000000000, 0.39999999999999991 },
3384   { 1.0342438793937092, 0.50000000000000000, 1.0000000000000000,
3385           8.0000000000000000, 0.50000000000000000 },
3386   { 1.0419526514766855, 0.50000000000000000, 1.0000000000000000,
3387           8.0000000000000000, 0.60000000000000009 },
3388   { 1.0500219124976327, 0.50000000000000000, 1.0000000000000000,
3389           8.0000000000000000, 0.69999999999999996 },
3390   { 1.0584976491907043, 0.50000000000000000, 1.0000000000000000,
3391           8.0000000000000000, 0.80000000000000004 },
3392   { 1.0674385240268101, 0.50000000000000000, 1.0000000000000000,
3393           8.0000000000000000, 0.89999999999999991 },
3394 };
3395 
3396 // Test function for a=0.50000000000000000, b=1.0000000000000000, c=8.0000000000000000.
3397 template <typename Tp>
test049()3398 void test049()
3399 {
3400   const Tp eps = std::numeric_limits<Tp>::epsilon();
3401   Tp max_abs_diff = -Tp(1);
3402   Tp max_abs_frac = -Tp(1);
3403   unsigned int num_datum = sizeof(data049)
3404                          / sizeof(testcase_hyperg<double>);
3405   for (unsigned int i = 0; i < num_datum; ++i)
3406     {
3407       const Tp f = std::tr1::hyperg(Tp(data049[i].a), Tp(data049[i].b),
3408                    Tp(data049[i].c), Tp(data049[i].x));
3409       const Tp f0 = data049[i].f0;
3410       const Tp diff = f - f0;
3411       if (std::abs(diff) > max_abs_diff)
3412         max_abs_diff = std::abs(diff);
3413       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3414         {
3415           const Tp frac = diff / f0;
3416           if (std::abs(frac) > max_abs_frac)
3417             max_abs_frac = std::abs(frac);
3418         }
3419     }
3420   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3421 }
3422 
3423 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=10.000000000000000.
3424 testcase_hyperg<double> data050[] = {
3425   { 0.95968319138913893, 0.50000000000000000, 1.0000000000000000,
3426           10.000000000000000, -0.90000000000000002 },
3427   { 0.96376169072755768, 0.50000000000000000, 1.0000000000000000,
3428           10.000000000000000, -0.80000000000000004 },
3429   { 0.96792900082729316, 0.50000000000000000, 1.0000000000000000,
3430           10.000000000000000, -0.69999999999999996 },
3431   { 0.97218942798115737, 0.50000000000000000, 1.0000000000000000,
3432           10.000000000000000, -0.59999999999999998 },
3433   { 0.97654763592586857, 0.50000000000000000, 1.0000000000000000,
3434           10.000000000000000, -0.50000000000000000 },
3435   { 0.98100869054353856, 0.50000000000000000, 1.0000000000000000,
3436           10.000000000000000, -0.40000000000000002 },
3437   { 0.98557811238699278, 0.50000000000000000, 1.0000000000000000,
3438           10.000000000000000, -0.30000000000000004 },
3439   { 0.99026193885795544, 0.50000000000000000, 1.0000000000000000,
3440           10.000000000000000, -0.19999999999999996 },
3441   { 0.99506679842072221, 0.50000000000000000, 1.0000000000000000,
3442           10.000000000000000, -0.099999999999999978 },
3443   { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
3444           10.000000000000000, 0.0000000000000000 },
3445   { 1.0050696417919618, 0.50000000000000000, 1.0000000000000000,
3446           10.000000000000000, 0.10000000000000009 },
3447   { 1.0102847452747090, 0.50000000000000000, 1.0000000000000000,
3448           10.000000000000000, 0.19999999999999996 },
3449   { 1.0156554225057022, 0.50000000000000000, 1.0000000000000000,
3450           10.000000000000000, 0.30000000000000004 },
3451   { 1.0211930882963096, 0.50000000000000000, 1.0000000000000000,
3452           10.000000000000000, 0.39999999999999991 },
3453   { 1.0269107343740711, 0.50000000000000000, 1.0000000000000000,
3454           10.000000000000000, 0.50000000000000000 },
3455   { 1.0328232917216298, 0.50000000000000000, 1.0000000000000000,
3456           10.000000000000000, 0.60000000000000009 },
3457   { 1.0389481230247195, 0.50000000000000000, 1.0000000000000000,
3458           10.000000000000000, 0.69999999999999996 },
3459   { 1.0453057164134614, 0.50000000000000000, 1.0000000000000000,
3460           10.000000000000000, 0.80000000000000004 },
3461   { 1.0519207114461246, 0.50000000000000000, 1.0000000000000000,
3462           10.000000000000000, 0.89999999999999991 },
3463 };
3464 
3465 // Test function for a=0.50000000000000000, b=1.0000000000000000, c=10.000000000000000.
3466 template <typename Tp>
test050()3467 void test050()
3468 {
3469   const Tp eps = std::numeric_limits<Tp>::epsilon();
3470   Tp max_abs_diff = -Tp(1);
3471   Tp max_abs_frac = -Tp(1);
3472   unsigned int num_datum = sizeof(data050)
3473                          / sizeof(testcase_hyperg<double>);
3474   for (unsigned int i = 0; i < num_datum; ++i)
3475     {
3476       const Tp f = std::tr1::hyperg(Tp(data050[i].a), Tp(data050[i].b),
3477                    Tp(data050[i].c), Tp(data050[i].x));
3478       const Tp f0 = data050[i].f0;
3479       const Tp diff = f - f0;
3480       if (std::abs(diff) > max_abs_diff)
3481         max_abs_diff = std::abs(diff);
3482       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3483         {
3484           const Tp frac = diff / f0;
3485           if (std::abs(frac) > max_abs_frac)
3486             max_abs_frac = std::abs(frac);
3487         }
3488     }
3489   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3490 }
3491 
3492 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=2.0000000000000000.
3493 testcase_hyperg<double> data051[] = {
3494   { 0.72547625011001171, 0.50000000000000000, 2.0000000000000000,
3495           2.0000000000000000, -0.90000000000000002 },
3496   { 0.74535599249992990, 0.50000000000000000, 2.0000000000000000,
3497           2.0000000000000000, -0.80000000000000004 },
3498   { 0.76696498884737041, 0.50000000000000000, 2.0000000000000000,
3499           2.0000000000000000, -0.69999999999999996 },
3500   { 0.79056941504209477, 0.50000000000000000, 2.0000000000000000,
3501           2.0000000000000000, -0.59999999999999998 },
3502   { 0.81649658092772603, 0.50000000000000000, 2.0000000000000000,
3503           2.0000000000000000, -0.50000000000000000 },
3504   { 0.84515425472851657, 0.50000000000000000, 2.0000000000000000,
3505           2.0000000000000000, -0.40000000000000002 },
3506   { 0.87705801930702920, 0.50000000000000000, 2.0000000000000000,
3507           2.0000000000000000, -0.30000000000000004 },
3508   { 0.91287092917527690, 0.50000000000000000, 2.0000000000000000,
3509           2.0000000000000000, -0.19999999999999996 },
3510   { 0.95346258924559224, 0.50000000000000000, 2.0000000000000000,
3511           2.0000000000000000, -0.099999999999999978 },
3512   { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
3513           2.0000000000000000, 0.0000000000000000 },
3514   { 1.0540925533894598, 0.50000000000000000, 2.0000000000000000,
3515           2.0000000000000000, 0.10000000000000009 },
3516   { 1.1180339887498949, 0.50000000000000000, 2.0000000000000000,
3517           2.0000000000000000, 0.19999999999999996 },
3518   { 1.1952286093343938, 0.50000000000000000, 2.0000000000000000,
3519           2.0000000000000000, 0.30000000000000004 },
3520   { 1.2909944487358056, 0.50000000000000000, 2.0000000000000000,
3521           2.0000000000000000, 0.39999999999999991 },
3522   { 1.4142135623730949, 0.50000000000000000, 2.0000000000000000,
3523           2.0000000000000000, 0.50000000000000000 },
3524   { 1.5811388300841900, 0.50000000000000000, 2.0000000000000000,
3525           2.0000000000000000, 0.60000000000000009 },
3526   { 1.8257418583505536, 0.50000000000000000, 2.0000000000000000,
3527           2.0000000000000000, 0.69999999999999996 },
3528   { 2.2360679774997898, 0.50000000000000000, 2.0000000000000000,
3529           2.0000000000000000, 0.80000000000000004 },
3530   { 3.1622776601683782, 0.50000000000000000, 2.0000000000000000,
3531           2.0000000000000000, 0.89999999999999991 },
3532 };
3533 
3534 // Test function for a=0.50000000000000000, b=2.0000000000000000, c=2.0000000000000000.
3535 template <typename Tp>
test051()3536 void test051()
3537 {
3538   const Tp eps = std::numeric_limits<Tp>::epsilon();
3539   Tp max_abs_diff = -Tp(1);
3540   Tp max_abs_frac = -Tp(1);
3541   unsigned int num_datum = sizeof(data051)
3542                          / sizeof(testcase_hyperg<double>);
3543   for (unsigned int i = 0; i < num_datum; ++i)
3544     {
3545       const Tp f = std::tr1::hyperg(Tp(data051[i].a), Tp(data051[i].b),
3546                    Tp(data051[i].c), Tp(data051[i].x));
3547       const Tp f0 = data051[i].f0;
3548       const Tp diff = f - f0;
3549       if (std::abs(diff) > max_abs_diff)
3550         max_abs_diff = std::abs(diff);
3551       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3552         {
3553           const Tp frac = diff / f0;
3554           if (std::abs(frac) > max_abs_frac)
3555             max_abs_frac = std::abs(frac);
3556         }
3557     }
3558   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3559 }
3560 
3561 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=4.0000000000000000.
3562 testcase_hyperg<double> data052[] = {
3563   { 0.83664260086443798, 0.50000000000000000, 2.0000000000000000,
3564           4.0000000000000000, -0.90000000000000002 },
3565   { 0.85046584300227146, 0.50000000000000000, 2.0000000000000000,
3566           4.0000000000000000, -0.80000000000000004 },
3567   { 0.86509574979651593, 0.50000000000000000, 2.0000000000000000,
3568           4.0000000000000000, -0.69999999999999996 },
3569   { 0.88062082573041867, 0.50000000000000000, 2.0000000000000000,
3570           4.0000000000000000, -0.59999999999999998 },
3571   { 0.89714464248521586, 0.50000000000000000, 2.0000000000000000,
3572           4.0000000000000000, -0.50000000000000000 },
3573   { 0.91478946588967558, 0.50000000000000000, 2.0000000000000000,
3574           4.0000000000000000, -0.40000000000000002 },
3575   { 0.93370105322348573, 0.50000000000000000, 2.0000000000000000,
3576           4.0000000000000000, -0.30000000000000004 },
3577   { 0.95405511057700887, 0.50000000000000000, 2.0000000000000000,
3578           4.0000000000000000, -0.19999999999999996 },
3579   { 0.97606616007978142, 0.50000000000000000, 2.0000000000000000,
3580           4.0000000000000000, -0.099999999999999978 },
3581   { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
3582           4.0000000000000000, 0.0000000000000000 },
3583   { 1.0261916902334731, 0.50000000000000000, 2.0000000000000000,
3584           4.0000000000000000, 0.10000000000000009 },
3585   { 1.0550723519434702, 0.50000000000000000, 2.0000000000000000,
3586           4.0000000000000000, 0.19999999999999996 },
3587   { 1.0872106588188091, 0.50000000000000000, 2.0000000000000000,
3588           4.0000000000000000, 0.30000000000000004 },
3589   { 1.1233801699379020, 0.50000000000000000, 2.0000000000000000,
3590           4.0000000000000000, 0.39999999999999991 },
3591   { 1.1646752981725688, 0.50000000000000000, 2.0000000000000000,
3592           4.0000000000000000, 0.50000000000000000 },
3593   { 1.2127272514219511, 0.50000000000000000, 2.0000000000000000,
3594           4.0000000000000000, 0.60000000000000009 },
3595   { 1.2701518651068637, 0.50000000000000000, 2.0000000000000000,
3596           4.0000000000000000, 0.69999999999999996 },
3597   { 1.3416407864998725, 0.50000000000000000, 2.0000000000000000,
3598           4.0000000000000000, 0.80000000000000004 },
3599   { 1.4374795179111102, 0.50000000000000000, 2.0000000000000000,
3600           4.0000000000000000, 0.89999999999999991 },
3601 };
3602 
3603 // Test function for a=0.50000000000000000, b=2.0000000000000000, c=4.0000000000000000.
3604 template <typename Tp>
test052()3605 void test052()
3606 {
3607   const Tp eps = std::numeric_limits<Tp>::epsilon();
3608   Tp max_abs_diff = -Tp(1);
3609   Tp max_abs_frac = -Tp(1);
3610   unsigned int num_datum = sizeof(data052)
3611                          / sizeof(testcase_hyperg<double>);
3612   for (unsigned int i = 0; i < num_datum; ++i)
3613     {
3614       const Tp f = std::tr1::hyperg(Tp(data052[i].a), Tp(data052[i].b),
3615                    Tp(data052[i].c), Tp(data052[i].x));
3616       const Tp f0 = data052[i].f0;
3617       const Tp diff = f - f0;
3618       if (std::abs(diff) > max_abs_diff)
3619         max_abs_diff = std::abs(diff);
3620       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3621         {
3622           const Tp frac = diff / f0;
3623           if (std::abs(frac) > max_abs_frac)
3624             max_abs_frac = std::abs(frac);
3625         }
3626     }
3627   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3628 }
3629 
3630 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=6.0000000000000000.
3631 testcase_hyperg<double> data053[] = {
3632   { 0.88195381730235833, 0.50000000000000000, 2.0000000000000000,
3633           6.0000000000000000, -0.90000000000000002 },
3634   { 0.89265078469555093, 0.50000000000000000, 2.0000000000000000,
3635           6.0000000000000000, -0.80000000000000004 },
3636   { 0.90382937908303707, 0.50000000000000000, 2.0000000000000000,
3637           6.0000000000000000, -0.69999999999999996 },
3638   { 0.91553161389880577, 0.50000000000000000, 2.0000000000000000,
3639           6.0000000000000000, -0.59999999999999998 },
3640   { 0.92780530349281576, 0.50000000000000000, 2.0000000000000000,
3641           6.0000000000000000, -0.50000000000000000 },
3642   { 0.94070521140346042, 0.50000000000000000, 2.0000000000000000,
3643           6.0000000000000000, -0.40000000000000002 },
3644   { 0.95429450630523349, 0.50000000000000000, 2.0000000000000000,
3645           6.0000000000000000, -0.30000000000000004 },
3646   { 0.96864663325785849, 0.50000000000000000, 2.0000000000000000,
3647           6.0000000000000000, -0.19999999999999996 },
3648   { 0.98384775588541795, 0.50000000000000000, 2.0000000000000000,
3649           6.0000000000000000, -0.099999999999999978 },
3650   { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
3651           6.0000000000000000, 0.0000000000000000 },
3652   { 1.0172258496884334, 0.50000000000000000, 2.0000000000000000,
3653           6.0000000000000000, 0.10000000000000009 },
3654   { 1.0356742479163459, 0.50000000000000000, 2.0000000000000000,
3655           6.0000000000000000, 0.19999999999999996 },
3656   { 1.0555293036908924, 0.50000000000000000, 2.0000000000000000,
3657           6.0000000000000000, 0.30000000000000004 },
3658   { 1.0770231491562379, 0.50000000000000000, 2.0000000000000000,
3659           6.0000000000000000, 0.39999999999999991 },
3660   { 1.1004557416484888, 0.50000000000000000, 2.0000000000000000,
3661           6.0000000000000000, 0.50000000000000000 },
3662   { 1.1262270515731978, 0.50000000000000000, 2.0000000000000000,
3663           6.0000000000000000, 0.60000000000000009 },
3664   { 1.1548932919125086, 0.50000000000000000, 2.0000000000000000,
3665           6.0000000000000000, 0.69999999999999996 },
3666   { 1.1872757758134724, 0.50000000000000000, 2.0000000000000000,
3667           6.0000000000000000, 0.80000000000000004 },
3668   { 1.2247091713458949, 0.50000000000000000, 2.0000000000000000,
3669           6.0000000000000000, 0.89999999999999991 },
3670 };
3671 
3672 // Test function for a=0.50000000000000000, b=2.0000000000000000, c=6.0000000000000000.
3673 template <typename Tp>
test053()3674 void test053()
3675 {
3676   const Tp eps = std::numeric_limits<Tp>::epsilon();
3677   Tp max_abs_diff = -Tp(1);
3678   Tp max_abs_frac = -Tp(1);
3679   unsigned int num_datum = sizeof(data053)
3680                          / sizeof(testcase_hyperg<double>);
3681   for (unsigned int i = 0; i < num_datum; ++i)
3682     {
3683       const Tp f = std::tr1::hyperg(Tp(data053[i].a), Tp(data053[i].b),
3684                    Tp(data053[i].c), Tp(data053[i].x));
3685       const Tp f0 = data053[i].f0;
3686       const Tp diff = f - f0;
3687       if (std::abs(diff) > max_abs_diff)
3688         max_abs_diff = std::abs(diff);
3689       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3690         {
3691           const Tp frac = diff / f0;
3692           if (std::abs(frac) > max_abs_frac)
3693             max_abs_frac = std::abs(frac);
3694         }
3695     }
3696   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3697 }
3698 
3699 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=8.0000000000000000.
3700 testcase_hyperg<double> data054[] = {
3701   { 0.90716919697107301, 0.50000000000000000, 2.0000000000000000,
3702           8.0000000000000000, -0.90000000000000002 },
3703   { 0.91592299407142519, 0.50000000000000000, 2.0000000000000000,
3704           8.0000000000000000, -0.80000000000000004 },
3705   { 0.92500027075874236, 0.50000000000000000, 2.0000000000000000,
3706           8.0000000000000000, -0.69999999999999996 },
3707   { 0.93442464185467167, 0.50000000000000000, 2.0000000000000000,
3708           8.0000000000000000, -0.59999999999999998 },
3709   { 0.94422248683737009, 0.50000000000000000, 2.0000000000000000,
3710           8.0000000000000000, -0.50000000000000000 },
3711   { 0.95442341810133347, 0.50000000000000000, 2.0000000000000000,
3712           8.0000000000000000, -0.40000000000000002 },
3713   { 0.96506085725516400, 0.50000000000000000, 2.0000000000000000,
3714           8.0000000000000000, -0.30000000000000004 },
3715   { 0.97617275213704069, 0.50000000000000000, 2.0000000000000000,
3716           8.0000000000000000, -0.19999999999999996 },
3717   { 0.98780247986309799, 0.50000000000000000, 2.0000000000000000,
3718           8.0000000000000000, -0.099999999999999978 },
3719   { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
3720           8.0000000000000000, 0.0000000000000000 },
3721   { 1.0128233505813447, 0.50000000000000000, 2.0000000000000000,
3722           8.0000000000000000, 0.10000000000000009 },
3723   { 1.0263406246541855, 0.50000000000000000, 2.0000000000000000,
3724           8.0000000000000000, 0.19999999999999996 },
3725   { 1.0406326381700366, 0.50000000000000000, 2.0000000000000000,
3726           8.0000000000000000, 0.30000000000000004 },
3727   { 1.0557966239802845, 0.50000000000000000, 2.0000000000000000,
3728           8.0000000000000000, 0.39999999999999991 },
3729   { 1.0719515075786321, 0.50000000000000000, 2.0000000000000000,
3730           8.0000000000000000, 0.50000000000000000 },
3731   { 1.0892457392422055, 0.50000000000000000, 2.0000000000000000,
3732           8.0000000000000000, 0.60000000000000009 },
3733   { 1.1078695188000958, 0.50000000000000000, 2.0000000000000000,
3734           8.0000000000000000, 0.69999999999999996 },
3735   { 1.1280752258974340, 0.50000000000000000, 2.0000000000000000,
3736           8.0000000000000000, 0.80000000000000004 },
3737   { 1.1502152002706476, 0.50000000000000000, 2.0000000000000000,
3738           8.0000000000000000, 0.89999999999999991 },
3739 };
3740 
3741 // Test function for a=0.50000000000000000, b=2.0000000000000000, c=8.0000000000000000.
3742 template <typename Tp>
test054()3743 void test054()
3744 {
3745   const Tp eps = std::numeric_limits<Tp>::epsilon();
3746   Tp max_abs_diff = -Tp(1);
3747   Tp max_abs_frac = -Tp(1);
3748   unsigned int num_datum = sizeof(data054)
3749                          / sizeof(testcase_hyperg<double>);
3750   for (unsigned int i = 0; i < num_datum; ++i)
3751     {
3752       const Tp f = std::tr1::hyperg(Tp(data054[i].a), Tp(data054[i].b),
3753                    Tp(data054[i].c), Tp(data054[i].x));
3754       const Tp f0 = data054[i].f0;
3755       const Tp diff = f - f0;
3756       if (std::abs(diff) > max_abs_diff)
3757         max_abs_diff = std::abs(diff);
3758       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3759         {
3760           const Tp frac = diff / f0;
3761           if (std::abs(frac) > max_abs_frac)
3762             max_abs_frac = std::abs(frac);
3763         }
3764     }
3765   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3766 }
3767 
3768 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=10.000000000000000.
3769 testcase_hyperg<double> data055[] = {
3770   { 0.92336416053263093, 0.50000000000000000, 2.0000000000000000,
3771           10.000000000000000, -0.90000000000000002 },
3772   { 0.93078397248364519, 0.50000000000000000, 2.0000000000000000,
3773           10.000000000000000, -0.80000000000000004 },
3774   { 0.93843714333600226, 0.50000000000000000, 2.0000000000000000,
3775           10.000000000000000, -0.69999999999999996 },
3776   { 0.94633837784068076, 0.50000000000000000, 2.0000000000000000,
3777           10.000000000000000, -0.59999999999999998 },
3778   { 0.95450388104967909, 0.50000000000000000, 2.0000000000000000,
3779           10.000000000000000, -0.50000000000000000 },
3780   { 0.96295158125742764, 0.50000000000000000, 2.0000000000000000,
3781           10.000000000000000, -0.40000000000000002 },
3782   { 0.97170139827854296, 0.50000000000000000, 2.0000000000000000,
3783           10.000000000000000, -0.30000000000000004 },
3784   { 0.98077556918512687, 0.50000000000000000, 2.0000000000000000,
3785           10.000000000000000, -0.19999999999999996 },
3786   { 0.99019904777750845, 0.50000000000000000, 2.0000000000000000,
3787           10.000000000000000, -0.099999999999999978 },
3788   { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
3789           10.000000000000000, 0.0000000000000000 },
3790   { 1.0102104261941198, 0.50000000000000000, 2.0000000000000000,
3791           10.000000000000000, 0.10000000000000009 },
3792   { 1.0208669540935695, 0.50000000000000000, 2.0000000000000000,
3793           10.000000000000000, 0.19999999999999996 },
3794   { 1.0320118665407505, 0.50000000000000000, 2.0000000000000000,
3795           10.000000000000000, 0.30000000000000004 },
3796   { 1.0436944599504387, 0.50000000000000000, 2.0000000000000000,
3797           10.000000000000000, 0.39999999999999991 },
3798   { 1.0559728828278145, 0.50000000000000000, 2.0000000000000000,
3799           10.000000000000000, 0.50000000000000000 },
3800   { 1.0689166967761712, 0.50000000000000000, 2.0000000000000000,
3801           10.000000000000000, 0.60000000000000009 },
3802   { 1.0826105758119842, 0.50000000000000000, 2.0000000000000000,
3803           10.000000000000000, 0.69999999999999996 },
3804   { 1.0971599106346146, 0.50000000000000000, 2.0000000000000000,
3805           10.000000000000000, 0.80000000000000004 },
3806   { 1.1126998828023964, 0.50000000000000000, 2.0000000000000000,
3807           10.000000000000000, 0.89999999999999991 },
3808 };
3809 
3810 // Test function for a=0.50000000000000000, b=2.0000000000000000, c=10.000000000000000.
3811 template <typename Tp>
test055()3812 void test055()
3813 {
3814   const Tp eps = std::numeric_limits<Tp>::epsilon();
3815   Tp max_abs_diff = -Tp(1);
3816   Tp max_abs_frac = -Tp(1);
3817   unsigned int num_datum = sizeof(data055)
3818                          / sizeof(testcase_hyperg<double>);
3819   for (unsigned int i = 0; i < num_datum; ++i)
3820     {
3821       const Tp f = std::tr1::hyperg(Tp(data055[i].a), Tp(data055[i].b),
3822                    Tp(data055[i].c), Tp(data055[i].x));
3823       const Tp f0 = data055[i].f0;
3824       const Tp diff = f - f0;
3825       if (std::abs(diff) > max_abs_diff)
3826         max_abs_diff = std::abs(diff);
3827       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3828         {
3829           const Tp frac = diff / f0;
3830           if (std::abs(frac) > max_abs_frac)
3831             max_abs_frac = std::abs(frac);
3832         }
3833     }
3834   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3835 }
3836 
3837 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=2.0000000000000000.
3838 testcase_hyperg<double> data056[] = {
3839   { 0.52275983209457511, 0.50000000000000000, 5.0000000000000000,
3840           2.0000000000000000, -0.90000000000000002 },
3841   { 0.54700336898142965, 0.50000000000000000, 5.0000000000000000,
3842           2.0000000000000000, -0.80000000000000004 },
3843   { 0.57468955512601971, 0.50000000000000000, 5.0000000000000000,
3844           2.0000000000000000, -0.69999999999999996 },
3845   { 0.60665490543315015, 0.50000000000000000, 5.0000000000000000,
3846           2.0000000000000000, -0.59999999999999998 },
3847   { 0.64403057859056123, 0.50000000000000000, 5.0000000000000000,
3848           2.0000000000000000, -0.50000000000000000 },
3849   { 0.68838183648623719, 0.50000000000000000, 5.0000000000000000,
3850           2.0000000000000000, -0.40000000000000002 },
3851   { 0.74193265039311085, 0.50000000000000000, 5.0000000000000000,
3852           2.0000000000000000, -0.30000000000000004 },
3853   { 0.80794095908995300, 0.50000000000000000, 5.0000000000000000,
3854           2.0000000000000000, -0.19999999999999996 },
3855   { 0.89135275749639320, 0.50000000000000000, 5.0000000000000000,
3856           2.0000000000000000, -0.099999999999999978 },
3857   { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
3858           2.0000000000000000, 0.0000000000000000 },
3859   { 1.1469266219310688, 0.50000000000000000, 5.0000000000000000,
3860           2.0000000000000000, 0.10000000000000009 },
3861   { 1.3552340708357489, 0.50000000000000000, 5.0000000000000000,
3862           2.0000000000000000, 0.19999999999999996 },
3863   { 1.6690840478838305, 0.50000000000000000, 5.0000000000000000,
3864           2.0000000000000000, 0.30000000000000004 },
3865   { 2.1815415453174483, 0.50000000000000000, 5.0000000000000000,
3866           2.0000000000000000, 0.39999999999999991 },
3867   { 3.1156892546032235, 0.50000000000000000, 5.0000000000000000,
3868           2.0000000000000000, 0.50000000000000000 },
3869   { 5.1109077417760416, 0.50000000000000000, 5.0000000000000000,
3870           2.0000000000000000, 0.60000000000000009 },
3871   { 10.560352936466296, 0.50000000000000000, 5.0000000000000000,
3872           2.0000000000000000, 0.69999999999999996 },
3873   { 33.541019662496815, 0.50000000000000000, 5.0000000000000000,
3874           2.0000000000000000, 0.80000000000000004 },
3875   { 300.66343065819501, 0.50000000000000000, 5.0000000000000000,
3876           2.0000000000000000, 0.89999999999999991 },
3877 };
3878 
3879 // Test function for a=0.50000000000000000, b=5.0000000000000000, c=2.0000000000000000.
3880 template <typename Tp>
test056()3881 void test056()
3882 {
3883   const Tp eps = std::numeric_limits<Tp>::epsilon();
3884   Tp max_abs_diff = -Tp(1);
3885   Tp max_abs_frac = -Tp(1);
3886   unsigned int num_datum = sizeof(data056)
3887                          / sizeof(testcase_hyperg<double>);
3888   for (unsigned int i = 0; i < num_datum; ++i)
3889     {
3890       const Tp f = std::tr1::hyperg(Tp(data056[i].a), Tp(data056[i].b),
3891                    Tp(data056[i].c), Tp(data056[i].x));
3892       const Tp f0 = data056[i].f0;
3893       const Tp diff = f - f0;
3894       if (std::abs(diff) > max_abs_diff)
3895         max_abs_diff = std::abs(diff);
3896       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3897         {
3898           const Tp frac = diff / f0;
3899           if (std::abs(frac) > max_abs_frac)
3900             max_abs_frac = std::abs(frac);
3901         }
3902     }
3903   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3904 }
3905 
3906 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=4.0000000000000000.
3907 testcase_hyperg<double> data057[] = {
3908   { 0.68252041951139264, 0.50000000000000000, 5.0000000000000000,
3909           4.0000000000000000, -0.90000000000000002 },
3910   { 0.70394732624993395, 0.50000000000000000, 5.0000000000000000,
3911           4.0000000000000000, -0.80000000000000004 },
3912   { 0.72748884971552041, 0.50000000000000000, 5.0000000000000000,
3913           4.0000000000000000, -0.69999999999999996 },
3914   { 0.75351147371199689, 0.50000000000000000, 5.0000000000000000,
3915           4.0000000000000000, -0.59999999999999998 },
3916   { 0.78247589005573748, 0.50000000000000000, 5.0000000000000000,
3917           4.0000000000000000, -0.50000000000000000 },
3918   { 0.81497017420249818, 0.50000000000000000, 5.0000000000000000,
3919           4.0000000000000000, -0.40000000000000002 },
3920   { 0.85175826875009564, 0.50000000000000000, 5.0000000000000000,
3921           4.0000000000000000, -0.30000000000000004 },
3922   { 0.89385278481745867, 0.50000000000000000, 5.0000000000000000,
3923           4.0000000000000000, -0.19999999999999996 },
3924   { 0.94262778709507411, 0.50000000000000000, 5.0000000000000000,
3925           4.0000000000000000, -0.099999999999999978 },
3926   { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
3927           4.0000000000000000, 0.0000000000000000 },
3928   { 1.0687327277420910, 0.50000000000000000, 5.0000000000000000,
3929           4.0000000000000000, 0.10000000000000009 },
3930   { 1.1529725508983291, 0.50000000000000000, 5.0000000000000000,
3931           4.0000000000000000, 0.19999999999999996 },
3932   { 1.2592587134058799, 0.50000000000000000, 5.0000000000000000,
3933           4.0000000000000000, 0.30000000000000004 },
3934   { 1.3985773194637892, 0.50000000000000000, 5.0000000000000000,
3935           4.0000000000000000, 0.39999999999999991 },
3936   { 1.5909902576697317, 0.50000000000000000, 5.0000000000000000,
3937           4.0000000000000000, 0.50000000000000000 },
3938   { 1.8776023607249752, 0.50000000000000000, 5.0000000000000000,
3939           4.0000000000000000, 0.60000000000000009 },
3940   { 2.3582499003694646, 0.50000000000000000, 5.0000000000000000,
3941           4.0000000000000000, 0.69999999999999996 },
3942   { 3.3541019662496838, 0.50000000000000000, 5.0000000000000000,
3943           4.0000000000000000, 0.80000000000000004 },
3944   { 6.7198400278577859, 0.50000000000000000, 5.0000000000000000,
3945           4.0000000000000000, 0.89999999999999991 },
3946 };
3947 
3948 // Test function for a=0.50000000000000000, b=5.0000000000000000, c=4.0000000000000000.
3949 template <typename Tp>
test057()3950 void test057()
3951 {
3952   const Tp eps = std::numeric_limits<Tp>::epsilon();
3953   Tp max_abs_diff = -Tp(1);
3954   Tp max_abs_frac = -Tp(1);
3955   unsigned int num_datum = sizeof(data057)
3956                          / sizeof(testcase_hyperg<double>);
3957   for (unsigned int i = 0; i < num_datum; ++i)
3958     {
3959       const Tp f = std::tr1::hyperg(Tp(data057[i].a), Tp(data057[i].b),
3960                    Tp(data057[i].c), Tp(data057[i].x));
3961       const Tp f0 = data057[i].f0;
3962       const Tp diff = f - f0;
3963       if (std::abs(diff) > max_abs_diff)
3964         max_abs_diff = std::abs(diff);
3965       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3966         {
3967           const Tp frac = diff / f0;
3968           if (std::abs(frac) > max_abs_frac)
3969             max_abs_frac = std::abs(frac);
3970         }
3971     }
3972   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3973 }
3974 
3975 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=6.0000000000000000.
3976 testcase_hyperg<double> data058[] = {
3977   { 0.75755211927082589, 0.50000000000000000, 5.0000000000000000,
3978           6.0000000000000000, -0.90000000000000002 },
3979   { 0.77603550233010998, 0.50000000000000000, 5.0000000000000000,
3980           6.0000000000000000, -0.80000000000000004 },
3981   { 0.79596241913438492, 0.50000000000000000, 5.0000000000000000,
3982           6.0000000000000000, -0.69999999999999996 },
3983   { 0.81753360792105201, 0.50000000000000000, 5.0000000000000000,
3984           6.0000000000000000, -0.59999999999999998 },
3985   { 0.84099165409805521, 0.50000000000000000, 5.0000000000000000,
3986           6.0000000000000000, -0.50000000000000000 },
3987   { 0.86663303852180873, 0.50000000000000000, 5.0000000000000000,
3988           6.0000000000000000, -0.40000000000000002 },
3989   { 0.89482475828629970, 0.50000000000000000, 5.0000000000000000,
3990           6.0000000000000000, -0.30000000000000004 },
3991   { 0.92602774279590350, 0.50000000000000000, 5.0000000000000000,
3992           6.0000000000000000, -0.19999999999999996 },
3993   { 0.96083064727087386, 0.50000000000000000, 5.0000000000000000,
3994           6.0000000000000000, -0.099999999999999978 },
3995   { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
3996           6.0000000000000000, 0.0000000000000000 },
3997   { 1.0445570841313008, 0.50000000000000000, 5.0000000000000000,
3998           6.0000000000000000, 0.10000000000000009 },
3999   { 1.0959004638926031, 0.50000000000000000, 5.0000000000000000,
4000           6.0000000000000000, 0.19999999999999996 },
4001   { 1.1560106261370562, 0.50000000000000000, 5.0000000000000000,
4002           6.0000000000000000, 0.30000000000000004 },
4003   { 1.2278121770678145, 0.50000000000000000, 5.0000000000000000,
4004           6.0000000000000000, 0.39999999999999991 },
4005   { 1.3158640214709998, 0.50000000000000000, 5.0000000000000000,
4006           6.0000000000000000, 0.50000000000000000 },
4007   { 1.4278095344155000, 0.50000000000000000, 5.0000000000000000,
4008           6.0000000000000000, 0.60000000000000009 },
4009   { 1.5778700502946612, 0.50000000000000000, 5.0000000000000000,
4010           6.0000000000000000, 0.69999999999999996 },
4011   { 1.7972173289196469, 0.50000000000000000, 5.0000000000000000,
4012           6.0000000000000000, 0.80000000000000004 },
4013   { 2.1789970569269732, 0.50000000000000000, 5.0000000000000000,
4014           6.0000000000000000, 0.89999999999999991 },
4015 };
4016 
4017 // Test function for a=0.50000000000000000, b=5.0000000000000000, c=6.0000000000000000.
4018 template <typename Tp>
test058()4019 void test058()
4020 {
4021   const Tp eps = std::numeric_limits<Tp>::epsilon();
4022   Tp max_abs_diff = -Tp(1);
4023   Tp max_abs_frac = -Tp(1);
4024   unsigned int num_datum = sizeof(data058)
4025                          / sizeof(testcase_hyperg<double>);
4026   for (unsigned int i = 0; i < num_datum; ++i)
4027     {
4028       const Tp f = std::tr1::hyperg(Tp(data058[i].a), Tp(data058[i].b),
4029                    Tp(data058[i].c), Tp(data058[i].x));
4030       const Tp f0 = data058[i].f0;
4031       const Tp diff = f - f0;
4032       if (std::abs(diff) > max_abs_diff)
4033         max_abs_diff = std::abs(diff);
4034       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4035         {
4036           const Tp frac = diff / f0;
4037           if (std::abs(frac) > max_abs_frac)
4038             max_abs_frac = std::abs(frac);
4039         }
4040     }
4041   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4042 }
4043 
4044 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=8.0000000000000000.
4045 testcase_hyperg<double> data059[] = {
4046   { 0.80270093579329471, 0.50000000000000000, 5.0000000000000000,
4047           8.0000000000000000, -0.90000000000000002 },
4048   { 0.81884974572462788, 0.50000000000000000, 5.0000000000000000,
4049           8.0000000000000000, -0.80000000000000004 },
4050   { 0.83605266330015271, 0.50000000000000000, 5.0000000000000000,
4051           8.0000000000000000, -0.69999999999999996 },
4052   { 0.85443340762795972, 0.50000000000000000, 5.0000000000000000,
4053           8.0000000000000000, -0.59999999999999998 },
4054   { 0.87413762182790655, 0.50000000000000000, 5.0000000000000000,
4055           8.0000000000000000, -0.50000000000000000 },
4056   { 0.89533826626907331, 0.50000000000000000, 5.0000000000000000,
4057           8.0000000000000000, -0.40000000000000002 },
4058   { 0.91824276674115268, 0.50000000000000000, 5.0000000000000000,
4059           8.0000000000000000, -0.30000000000000004 },
4060   { 0.94310265050720576, 0.50000000000000000, 5.0000000000000000,
4061           8.0000000000000000, -0.19999999999999996 },
4062   { 0.97022678857609712, 0.50000000000000000, 5.0000000000000000,
4063           8.0000000000000000, -0.099999999999999978 },
4064   { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
4065           8.0000000000000000, 0.0000000000000000 },
4066   { 1.0329098673199812, 0.50000000000000000, 5.0000000000000000,
4067           8.0000000000000000, 0.10000000000000009 },
4068   { 1.0695865684573389, 0.50000000000000000, 5.0000000000000000,
4069           8.0000000000000000, 0.19999999999999996 },
4070   { 1.1108642103944570, 0.50000000000000000, 5.0000000000000000,
4071           8.0000000000000000, 0.30000000000000004 },
4072   { 1.1578795055970506, 0.50000000000000000, 5.0000000000000000,
4073           8.0000000000000000, 0.39999999999999991 },
4074   { 1.2122394794169442, 0.50000000000000000, 5.0000000000000000,
4075           8.0000000000000000, 0.50000000000000000 },
4076   { 1.2763274721556934, 0.50000000000000000, 5.0000000000000000,
4077           8.0000000000000000, 0.60000000000000009 },
4078   { 1.3539179650251021, 0.50000000000000000, 5.0000000000000000,
4079           8.0000000000000000, 0.69999999999999996 },
4080   { 1.4515986118197148, 0.50000000000000000, 5.0000000000000000,
4081           8.0000000000000000, 0.80000000000000004 },
4082   { 1.5829284571614219, 0.50000000000000000, 5.0000000000000000,
4083           8.0000000000000000, 0.89999999999999991 },
4084 };
4085 
4086 // Test function for a=0.50000000000000000, b=5.0000000000000000, c=8.0000000000000000.
4087 template <typename Tp>
test059()4088 void test059()
4089 {
4090   const Tp eps = std::numeric_limits<Tp>::epsilon();
4091   Tp max_abs_diff = -Tp(1);
4092   Tp max_abs_frac = -Tp(1);
4093   unsigned int num_datum = sizeof(data059)
4094                          / sizeof(testcase_hyperg<double>);
4095   for (unsigned int i = 0; i < num_datum; ++i)
4096     {
4097       const Tp f = std::tr1::hyperg(Tp(data059[i].a), Tp(data059[i].b),
4098                    Tp(data059[i].c), Tp(data059[i].x));
4099       const Tp f0 = data059[i].f0;
4100       const Tp diff = f - f0;
4101       if (std::abs(diff) > max_abs_diff)
4102         max_abs_diff = std::abs(diff);
4103       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4104         {
4105           const Tp frac = diff / f0;
4106           if (std::abs(frac) > max_abs_frac)
4107             max_abs_frac = std::abs(frac);
4108         }
4109     }
4110   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4111 }
4112 
4113 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=10.000000000000000.
4114 testcase_hyperg<double> data060[] = {
4115   { 0.83322694172301959, 0.50000000000000000, 5.0000000000000000,
4116           10.000000000000000, -0.90000000000000002 },
4117   { 0.84753931604765664, 0.50000000000000000, 5.0000000000000000,
4118           10.000000000000000, -0.80000000000000004 },
4119   { 0.86265784532195022, 0.50000000000000000, 5.0000000000000000,
4120           10.000000000000000, -0.69999999999999996 },
4121   { 0.87866479300707079, 0.50000000000000000, 5.0000000000000000,
4122           10.000000000000000, -0.59999999999999998 },
4123   { 0.89565516540263501, 0.50000000000000000, 5.0000000000000000,
4124           10.000000000000000, -0.50000000000000000 },
4125   { 0.91373946207610557, 0.50000000000000000, 5.0000000000000000,
4126           10.000000000000000, -0.40000000000000002 },
4127   { 0.93304721345881891, 0.50000000000000000, 5.0000000000000000,
4128           10.000000000000000, -0.30000000000000004 },
4129   { 0.95373159512905148, 0.50000000000000000, 5.0000000000000000,
4130           10.000000000000000, -0.19999999999999996 },
4131   { 0.97597554238828121, 0.50000000000000000, 5.0000000000000000,
4132           10.000000000000000, -0.099999999999999978 },
4133   { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
4134           10.000000000000000, 0.0000000000000000 },
4135   { 1.0260752851887982, 0.50000000000000000, 5.0000000000000000,
4136           10.000000000000000, 0.10000000000000009 },
4137   { 1.0545371197996178, 0.50000000000000000, 5.0000000000000000,
4138           10.000000000000000, 0.19999999999999996 },
4139   { 1.0858099017045830, 0.50000000000000000, 5.0000000000000000,
4140           10.000000000000000, 0.30000000000000004 },
4141   { 1.1204416568688709, 0.50000000000000000, 5.0000000000000000,
4142           10.000000000000000, 0.39999999999999991 },
4143   { 1.1591587835964847, 0.50000000000000000, 5.0000000000000000,
4144           10.000000000000000, 0.50000000000000000 },
4145   { 1.2029564720303347, 0.50000000000000000, 5.0000000000000000,
4146           10.000000000000000, 0.60000000000000009 },
4147   { 1.2532588722007874, 0.50000000000000000, 5.0000000000000000,
4148           10.000000000000000, 0.69999999999999996 },
4149   { 1.3122319926925459, 0.50000000000000000, 5.0000000000000000,
4150           10.000000000000000, 0.80000000000000004 },
4151   { 1.3834948587364100, 0.50000000000000000, 5.0000000000000000,
4152           10.000000000000000, 0.89999999999999991 },
4153 };
4154 
4155 // Test function for a=0.50000000000000000, b=5.0000000000000000, c=10.000000000000000.
4156 template <typename Tp>
test060()4157 void test060()
4158 {
4159   const Tp eps = std::numeric_limits<Tp>::epsilon();
4160   Tp max_abs_diff = -Tp(1);
4161   Tp max_abs_frac = -Tp(1);
4162   unsigned int num_datum = sizeof(data060)
4163                          / sizeof(testcase_hyperg<double>);
4164   for (unsigned int i = 0; i < num_datum; ++i)
4165     {
4166       const Tp f = std::tr1::hyperg(Tp(data060[i].a), Tp(data060[i].b),
4167                    Tp(data060[i].c), Tp(data060[i].x));
4168       const Tp f0 = data060[i].f0;
4169       const Tp diff = f - f0;
4170       if (std::abs(diff) > max_abs_diff)
4171         max_abs_diff = std::abs(diff);
4172       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4173         {
4174           const Tp frac = diff / f0;
4175           if (std::abs(frac) > max_abs_frac)
4176             max_abs_frac = std::abs(frac);
4177         }
4178     }
4179   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4180 }
4181 
4182 // Test data for a=0.50000000000000000, b=10.000000000000000, c=2.0000000000000000.
4183 testcase_hyperg<double> data061[] = {
4184   { 0.37727530159464628, 0.50000000000000000, 10.000000000000000,
4185           2.0000000000000000, -0.90000000000000002 },
4186   { 0.39816010922169010, 0.50000000000000000, 10.000000000000000,
4187           2.0000000000000000, -0.80000000000000004 },
4188   { 0.42283703041362453, 0.50000000000000000, 10.000000000000000,
4189           2.0000000000000000, -0.69999999999999996 },
4190   { 0.45255640448730505, 0.50000000000000000, 10.000000000000000,
4191           2.0000000000000000, -0.59999999999999998 },
4192   { 0.48919507154431141, 0.50000000000000000, 10.000000000000000,
4193           2.0000000000000000, -0.50000000000000000 },
4194   { 0.53569358917731880, 0.50000000000000000, 10.000000000000000,
4195           2.0000000000000000, -0.40000000000000002 },
4196   { 0.59689778897029566, 0.50000000000000000, 10.000000000000000,
4197           2.0000000000000000, -0.30000000000000004 },
4198   { 0.68128587569875731, 0.50000000000000000, 10.000000000000000,
4199           2.0000000000000000, -0.19999999999999996 },
4200   { 0.80478739308790359, 0.50000000000000000, 10.000000000000000,
4201           2.0000000000000000, -0.099999999999999978 },
4202   { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
4203           2.0000000000000000, 0.0000000000000000 },
4204   { 1.3408664196153621, 0.50000000000000000, 10.000000000000000,
4205           2.0000000000000000, 0.10000000000000009 },
4206   { 2.0175364359923860, 0.50000000000000000, 10.000000000000000,
4207           2.0000000000000000, 0.19999999999999996 },
4208   { 3.6011214553736646, 0.50000000000000000, 10.000000000000000,
4209           2.0000000000000000, 0.30000000000000004 },
4210   { 8.1799429939495312, 0.50000000000000000, 10.000000000000000,
4211           2.0000000000000000, 0.39999999999999991 },
4212   { 25.644834637536000, 0.50000000000000000, 10.000000000000000,
4213           2.0000000000000000, 0.50000000000000000 },
4214   { 123.13738891597615, 0.50000000000000000, 10.000000000000000,
4215           2.0000000000000000, 0.60000000000000009 },
4216   { 1088.7122410321333, 0.50000000000000000, 10.000000000000000,
4217           2.0000000000000000, 0.69999999999999996 },
4218   { 27358.291704709951, 0.50000000000000000, 10.000000000000000,
4219           2.0000000000000000, 0.80000000000000004 },
4220   { 8174369.0266731177, 0.50000000000000000, 10.000000000000000,
4221           2.0000000000000000, 0.89999999999999991 },
4222 };
4223 
4224 // Test function for a=0.50000000000000000, b=10.000000000000000, c=2.0000000000000000.
4225 template <typename Tp>
test061()4226 void test061()
4227 {
4228   const Tp eps = std::numeric_limits<Tp>::epsilon();
4229   Tp max_abs_diff = -Tp(1);
4230   Tp max_abs_frac = -Tp(1);
4231   unsigned int num_datum = sizeof(data061)
4232                          / sizeof(testcase_hyperg<double>);
4233   for (unsigned int i = 0; i < num_datum; ++i)
4234     {
4235       const Tp f = std::tr1::hyperg(Tp(data061[i].a), Tp(data061[i].b),
4236                    Tp(data061[i].c), Tp(data061[i].x));
4237       const Tp f0 = data061[i].f0;
4238       const Tp diff = f - f0;
4239       if (std::abs(diff) > max_abs_diff)
4240         max_abs_diff = std::abs(diff);
4241       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4242         {
4243           const Tp frac = diff / f0;
4244           if (std::abs(frac) > max_abs_frac)
4245             max_abs_frac = std::abs(frac);
4246         }
4247     }
4248   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4249 }
4250 
4251 // Test data for a=0.50000000000000000, b=10.000000000000000, c=4.0000000000000000.
4252 testcase_hyperg<double> data062[] = {
4253   { 0.53905528308450834, 0.50000000000000000, 10.000000000000000,
4254           4.0000000000000000, -0.90000000000000002 },
4255   { 0.56235533974376162, 0.50000000000000000, 10.000000000000000,
4256           4.0000000000000000, -0.80000000000000004 },
4257   { 0.58887657983263575, 0.50000000000000000, 10.000000000000000,
4258           4.0000000000000000, -0.69999999999999996 },
4259   { 0.61941227047262915, 0.50000000000000000, 10.000000000000000,
4260           4.0000000000000000, -0.59999999999999998 },
4261   { 0.65504896640793853, 0.50000000000000000, 10.000000000000000,
4262           4.0000000000000000, -0.50000000000000000 },
4263   { 0.69731666644529999, 0.50000000000000000, 10.000000000000000,
4264           4.0000000000000000, -0.40000000000000002 },
4265   { 0.74844073299399128, 0.50000000000000000, 10.000000000000000,
4266           4.0000000000000000, -0.30000000000000004 },
4267   { 0.81178446800105752, 0.50000000000000000, 10.000000000000000,
4268           4.0000000000000000, -0.19999999999999996 },
4269   { 0.89266981277598023, 0.50000000000000000, 10.000000000000000,
4270           4.0000000000000000, -0.099999999999999978 },
4271   { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
4272           4.0000000000000000, 0.0000000000000000 },
4273   { 1.1497248473106778, 0.50000000000000000, 10.000000000000000,
4274           4.0000000000000000, 0.10000000000000009 },
4275   { 1.3729717112654571, 0.50000000000000000, 10.000000000000000,
4276           4.0000000000000000, 0.19999999999999996 },
4277   { 1.7374982340374392, 0.50000000000000000, 10.000000000000000,
4278           4.0000000000000000, 0.30000000000000004 },
4279   { 2.4134479340960580, 0.50000000000000000, 10.000000000000000,
4280           4.0000000000000000, 0.39999999999999991 },
4281   { 3.9191255240471192, 0.50000000000000000, 10.000000000000000,
4282           4.0000000000000000, 0.50000000000000000 },
4283   { 8.3316373077761270, 0.50000000000000000, 10.000000000000000,
4284           4.0000000000000000, 0.60000000000000009 },
4285   { 28.323020339843335, 0.50000000000000000, 10.000000000000000,
4286           4.0000000000000000, 0.69999999999999996 },
4287   { 225.84286572747891, 0.50000000000000000, 10.000000000000000,
4288           4.0000000000000000, 0.80000000000000004 },
4289   { 12757.127591286655, 0.50000000000000000, 10.000000000000000,
4290           4.0000000000000000, 0.89999999999999991 },
4291 };
4292 
4293 // Test function for a=0.50000000000000000, b=10.000000000000000, c=4.0000000000000000.
4294 template <typename Tp>
test062()4295 void test062()
4296 {
4297   const Tp eps = std::numeric_limits<Tp>::epsilon();
4298   Tp max_abs_diff = -Tp(1);
4299   Tp max_abs_frac = -Tp(1);
4300   unsigned int num_datum = sizeof(data062)
4301                          / sizeof(testcase_hyperg<double>);
4302   for (unsigned int i = 0; i < num_datum; ++i)
4303     {
4304       const Tp f = std::tr1::hyperg(Tp(data062[i].a), Tp(data062[i].b),
4305                    Tp(data062[i].c), Tp(data062[i].x));
4306       const Tp f0 = data062[i].f0;
4307       const Tp diff = f - f0;
4308       if (std::abs(diff) > max_abs_diff)
4309         max_abs_diff = std::abs(diff);
4310       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4311         {
4312           const Tp frac = diff / f0;
4313           if (std::abs(frac) > max_abs_frac)
4314             max_abs_frac = std::abs(frac);
4315         }
4316     }
4317   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4318 }
4319 
4320 // Test data for a=0.50000000000000000, b=10.000000000000000, c=6.0000000000000000.
4321 testcase_hyperg<double> data063[] = {
4322   { 0.62672622092226071, 0.50000000000000000, 10.000000000000000,
4323           6.0000000000000000, -0.90000000000000002 },
4324   { 0.64931010269769829, 0.50000000000000000, 10.000000000000000,
4325           6.0000000000000000, -0.80000000000000004 },
4326   { 0.67448067519076316, 0.50000000000000000, 10.000000000000000,
4327           6.0000000000000000, -0.69999999999999996 },
4328   { 0.70276306239803676, 0.50000000000000000, 10.000000000000000,
4329           6.0000000000000000, -0.59999999999999998 },
4330   { 0.73484179773087555, 0.50000000000000000, 10.000000000000000,
4331           6.0000000000000000, -0.50000000000000000 },
4332   { 0.77162761412743897, 0.50000000000000000, 10.000000000000000,
4333           6.0000000000000000, -0.40000000000000002 },
4334   { 0.81436116844816531, 0.50000000000000000, 10.000000000000000,
4335           6.0000000000000000, -0.30000000000000004 },
4336   { 0.86477994787944557, 0.50000000000000000, 10.000000000000000,
4337           6.0000000000000000, -0.19999999999999996 },
4338   { 0.92539820516603888, 0.50000000000000000, 10.000000000000000,
4339           6.0000000000000000, -0.099999999999999978 },
4340   { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
4341           6.0000000000000000, 0.0000000000000000 },
4342   { 1.0945599448210315, 0.50000000000000000, 10.000000000000000,
4343           6.0000000000000000, 0.10000000000000009 },
4344   { 1.2190897395597264, 0.50000000000000000, 10.000000000000000,
4345           6.0000000000000000, 0.19999999999999996 },
4346   { 1.3916844336856475, 0.50000000000000000, 10.000000000000000,
4347           6.0000000000000000, 0.30000000000000004 },
4348   { 1.6484497630432013, 0.50000000000000000, 10.000000000000000,
4349           6.0000000000000000, 0.39999999999999991 },
4350   { 2.0717772717131155, 0.50000000000000000, 10.000000000000000,
4351           6.0000000000000000, 0.50000000000000000 },
4352   { 2.8893613630810924, 0.50000000000000000, 10.000000000000000,
4353           6.0000000000000000, 0.60000000000000009 },
4354   { 4.9459404075413529, 0.50000000000000000, 10.000000000000000,
4355           6.0000000000000000, 0.69999999999999996 },
4356   { 13.487394149998716, 0.50000000000000000, 10.000000000000000,
4357           6.0000000000000000, 0.80000000000000004 },
4358   { 136.57616044013972, 0.50000000000000000, 10.000000000000000,
4359           6.0000000000000000, 0.89999999999999991 },
4360 };
4361 
4362 // Test function for a=0.50000000000000000, b=10.000000000000000, c=6.0000000000000000.
4363 template <typename Tp>
test063()4364 void test063()
4365 {
4366   const Tp eps = std::numeric_limits<Tp>::epsilon();
4367   Tp max_abs_diff = -Tp(1);
4368   Tp max_abs_frac = -Tp(1);
4369   unsigned int num_datum = sizeof(data063)
4370                          / sizeof(testcase_hyperg<double>);
4371   for (unsigned int i = 0; i < num_datum; ++i)
4372     {
4373       const Tp f = std::tr1::hyperg(Tp(data063[i].a), Tp(data063[i].b),
4374                    Tp(data063[i].c), Tp(data063[i].x));
4375       const Tp f0 = data063[i].f0;
4376       const Tp diff = f - f0;
4377       if (std::abs(diff) > max_abs_diff)
4378         max_abs_diff = std::abs(diff);
4379       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4380         {
4381           const Tp frac = diff / f0;
4382           if (std::abs(frac) > max_abs_frac)
4383             max_abs_frac = std::abs(frac);
4384         }
4385     }
4386   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4387 }
4388 
4389 // Test data for a=0.50000000000000000, b=10.000000000000000, c=8.0000000000000000.
4390 testcase_hyperg<double> data064[] = {
4391   { 0.68421604440344341, 0.50000000000000000, 10.000000000000000,
4392           8.0000000000000000, -0.90000000000000002 },
4393   { 0.70548098055548891, 0.50000000000000000, 10.000000000000000,
4394           8.0000000000000000, -0.80000000000000004 },
4395   { 0.72884342311710348, 0.50000000000000000, 10.000000000000000,
4396           8.0000000000000000, -0.69999999999999996 },
4397   { 0.75466953437856243, 0.50000000000000000, 10.000000000000000,
4398           8.0000000000000000, -0.59999999999999998 },
4399   { 0.78342090924662600, 0.50000000000000000, 10.000000000000000,
4400           8.0000000000000000, -0.50000000000000000 },
4401   { 0.81568884278645049, 0.50000000000000000, 10.000000000000000,
4402           8.0000000000000000, -0.40000000000000002 },
4403   { 0.85224480241465206, 0.50000000000000000, 10.000000000000000,
4404           8.0000000000000000, -0.30000000000000004 },
4405   { 0.89411692571131696, 0.50000000000000000, 10.000000000000000,
4406           8.0000000000000000, -0.19999999999999996 },
4407   { 0.94270986892954756, 0.50000000000000000, 10.000000000000000,
4408           8.0000000000000000, -0.099999999999999978 },
4409   { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
4410           8.0000000000000000, 0.0000000000000000 },
4411   { 1.0688682849120232, 0.50000000000000000, 10.000000000000000,
4412           8.0000000000000000, 0.10000000000000009 },
4413   { 1.1537004376097553, 0.50000000000000000, 10.000000000000000,
4414           8.0000000000000000, 0.19999999999999996 },
4415   { 1.2615455028370031, 0.50000000000000000, 10.000000000000000,
4416           8.0000000000000000, 0.30000000000000004 },
4417   { 1.4045541456153436, 0.50000000000000000, 10.000000000000000,
4418           8.0000000000000000, 0.39999999999999991 },
4419   { 1.6057216489444517, 0.50000000000000000, 10.000000000000000,
4420           8.0000000000000000, 0.50000000000000000 },
4421   { 1.9146603020550739, 0.50000000000000000, 10.000000000000000,
4422           8.0000000000000000, 0.60000000000000009 },
4423   { 2.4617931307620298, 0.50000000000000000, 10.000000000000000,
4424           8.0000000000000000, 0.69999999999999996 },
4425   { 3.7267799624996498, 0.50000000000000000, 10.000000000000000,
4426           8.0000000000000000, 0.80000000000000004 },
4427   { 9.3880118036248401, 0.50000000000000000, 10.000000000000000,
4428           8.0000000000000000, 0.89999999999999991 },
4429 };
4430 
4431 // Test function for a=0.50000000000000000, b=10.000000000000000, c=8.0000000000000000.
4432 template <typename Tp>
test064()4433 void test064()
4434 {
4435   const Tp eps = std::numeric_limits<Tp>::epsilon();
4436   Tp max_abs_diff = -Tp(1);
4437   Tp max_abs_frac = -Tp(1);
4438   unsigned int num_datum = sizeof(data064)
4439                          / sizeof(testcase_hyperg<double>);
4440   for (unsigned int i = 0; i < num_datum; ++i)
4441     {
4442       const Tp f = std::tr1::hyperg(Tp(data064[i].a), Tp(data064[i].b),
4443                    Tp(data064[i].c), Tp(data064[i].x));
4444       const Tp f0 = data064[i].f0;
4445       const Tp diff = f - f0;
4446       if (std::abs(diff) > max_abs_diff)
4447         max_abs_diff = std::abs(diff);
4448       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4449         {
4450           const Tp frac = diff / f0;
4451           if (std::abs(frac) > max_abs_frac)
4452             max_abs_frac = std::abs(frac);
4453         }
4454     }
4455   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4456 }
4457 
4458 // Test data for a=0.50000000000000000, b=10.000000000000000, c=10.000000000000000.
4459 testcase_hyperg<double> data065[] = {
4460   { 0.72547625011001171, 0.50000000000000000, 10.000000000000000,
4461           10.000000000000000, -0.90000000000000002 },
4462   { 0.74535599249992990, 0.50000000000000000, 10.000000000000000,
4463           10.000000000000000, -0.80000000000000004 },
4464   { 0.76696498884737041, 0.50000000000000000, 10.000000000000000,
4465           10.000000000000000, -0.69999999999999996 },
4466   { 0.79056941504209477, 0.50000000000000000, 10.000000000000000,
4467           10.000000000000000, -0.59999999999999998 },
4468   { 0.81649658092772603, 0.50000000000000000, 10.000000000000000,
4469           10.000000000000000, -0.50000000000000000 },
4470   { 0.84515425472851657, 0.50000000000000000, 10.000000000000000,
4471           10.000000000000000, -0.40000000000000002 },
4472   { 0.87705801930702920, 0.50000000000000000, 10.000000000000000,
4473           10.000000000000000, -0.30000000000000004 },
4474   { 0.91287092917527690, 0.50000000000000000, 10.000000000000000,
4475           10.000000000000000, -0.19999999999999996 },
4476   { 0.95346258924559224, 0.50000000000000000, 10.000000000000000,
4477           10.000000000000000, -0.099999999999999978 },
4478   { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
4479           10.000000000000000, 0.0000000000000000 },
4480   { 1.0540925533894598, 0.50000000000000000, 10.000000000000000,
4481           10.000000000000000, 0.10000000000000009 },
4482   { 1.1180339887498949, 0.50000000000000000, 10.000000000000000,
4483           10.000000000000000, 0.19999999999999996 },
4484   { 1.1952286093343938, 0.50000000000000000, 10.000000000000000,
4485           10.000000000000000, 0.30000000000000004 },
4486   { 1.2909944487358056, 0.50000000000000000, 10.000000000000000,
4487           10.000000000000000, 0.39999999999999991 },
4488   { 1.4142135623730949, 0.50000000000000000, 10.000000000000000,
4489           10.000000000000000, 0.50000000000000000 },
4490   { 1.5811388300841900, 0.50000000000000000, 10.000000000000000,
4491           10.000000000000000, 0.60000000000000009 },
4492   { 1.8257418583505536, 0.50000000000000000, 10.000000000000000,
4493           10.000000000000000, 0.69999999999999996 },
4494   { 2.2360679774997898, 0.50000000000000000, 10.000000000000000,
4495           10.000000000000000, 0.80000000000000004 },
4496   { 3.1622776601683782, 0.50000000000000000, 10.000000000000000,
4497           10.000000000000000, 0.89999999999999991 },
4498 };
4499 
4500 // Test function for a=0.50000000000000000, b=10.000000000000000, c=10.000000000000000.
4501 template <typename Tp>
test065()4502 void test065()
4503 {
4504   const Tp eps = std::numeric_limits<Tp>::epsilon();
4505   Tp max_abs_diff = -Tp(1);
4506   Tp max_abs_frac = -Tp(1);
4507   unsigned int num_datum = sizeof(data065)
4508                          / sizeof(testcase_hyperg<double>);
4509   for (unsigned int i = 0; i < num_datum; ++i)
4510     {
4511       const Tp f = std::tr1::hyperg(Tp(data065[i].a), Tp(data065[i].b),
4512                    Tp(data065[i].c), Tp(data065[i].x));
4513       const Tp f0 = data065[i].f0;
4514       const Tp diff = f - f0;
4515       if (std::abs(diff) > max_abs_diff)
4516         max_abs_diff = std::abs(diff);
4517       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4518         {
4519           const Tp frac = diff / f0;
4520           if (std::abs(frac) > max_abs_frac)
4521             max_abs_frac = std::abs(frac);
4522         }
4523     }
4524   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4525 }
4526 
4527 // Test data for a=0.50000000000000000, b=20.000000000000000, c=2.0000000000000000.
4528 testcase_hyperg<double> data066[] = {
4529   { 0.26690449940521566, 0.50000000000000000, 20.000000000000000,
4530           2.0000000000000000, -0.90000000000000002 },
4531   { 0.28252302866181805, 0.50000000000000000, 20.000000000000000,
4532           2.0000000000000000, -0.80000000000000004 },
4533   { 0.30123616141153819, 0.50000000000000000, 20.000000000000000,
4534           2.0000000000000000, -0.69999999999999996 },
4535   { 0.32421384687602628, 0.50000000000000000, 20.000000000000000,
4536           2.0000000000000000, -0.59999999999999998 },
4537   { 0.35334630811776752, 0.50000000000000000, 20.000000000000000,
4538           2.0000000000000000, -0.50000000000000000 },
4539   { 0.39191793127467034, 0.50000000000000000, 20.000000000000000,
4540           2.0000000000000000, -0.40000000000000002 },
4541   { 0.44620488618129206, 0.50000000000000000, 20.000000000000000,
4542           2.0000000000000000, -0.30000000000000004 },
4543   { 0.52980896919265685, 0.50000000000000000, 20.000000000000000,
4544           2.0000000000000000, -0.19999999999999996 },
4545   { 0.67754711477562357, 0.50000000000000000, 20.000000000000000,
4546           2.0000000000000000, -0.099999999999999978 },
4547   { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
4548           2.0000000000000000, 0.0000000000000000 },
4549   { 1.9567557771780317, 0.50000000000000000, 20.000000000000000,
4550           2.0000000000000000, 0.10000000000000009 },
4551   { 6.1816042148333086, 0.50000000000000000, 20.000000000000000,
4552           2.0000000000000000, 0.19999999999999996 },
4553   { 35.653088618561227, 0.50000000000000000, 20.000000000000000,
4554           2.0000000000000000, 0.30000000000000004 },
4555   { 377.51482843179906, 0.50000000000000000, 20.000000000000000,
4556           2.0000000000000000, 0.39999999999999991 },
4557   { 7645.8816551195359, 0.50000000000000000, 20.000000000000000,
4558           2.0000000000000000, 0.50000000000000000 },
4559   { 354791.74537980522, 0.50000000000000000, 20.000000000000000,
4560           2.0000000000000000, 0.60000000000000009 },
4561   { 57009889.966638684, 0.50000000000000000, 20.000000000000000,
4562           2.0000000000000000, 0.69999999999999996 },
4563   { 83771357024.863937, 0.50000000000000000, 20.000000000000000,
4564           2.0000000000000000, 0.80000000000000004 },
4565   { 25866972896376408., 0.50000000000000000, 20.000000000000000,
4566           2.0000000000000000, 0.89999999999999991 },
4567 };
4568 
4569 // Test function for a=0.50000000000000000, b=20.000000000000000, c=2.0000000000000000.
4570 template <typename Tp>
test066()4571 void test066()
4572 {
4573   const Tp eps = std::numeric_limits<Tp>::epsilon();
4574   Tp max_abs_diff = -Tp(1);
4575   Tp max_abs_frac = -Tp(1);
4576   unsigned int num_datum = sizeof(data066)
4577                          / sizeof(testcase_hyperg<double>);
4578   for (unsigned int i = 0; i < num_datum; ++i)
4579     {
4580       const Tp f = std::tr1::hyperg(Tp(data066[i].a), Tp(data066[i].b),
4581                    Tp(data066[i].c), Tp(data066[i].x));
4582       const Tp f0 = data066[i].f0;
4583       const Tp diff = f - f0;
4584       if (std::abs(diff) > max_abs_diff)
4585         max_abs_diff = std::abs(diff);
4586       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4587         {
4588           const Tp frac = diff / f0;
4589           if (std::abs(frac) > max_abs_frac)
4590             max_abs_frac = std::abs(frac);
4591         }
4592     }
4593   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4594 }
4595 
4596 // Test data for a=0.50000000000000000, b=20.000000000000000, c=4.0000000000000000.
4597 testcase_hyperg<double> data067[] = {
4598   { 0.40342659436153405, 0.50000000000000000, 20.000000000000000,
4599           4.0000000000000000, -0.90000000000000002 },
4600   { 0.42420571192034318, 0.50000000000000000, 20.000000000000000,
4601           4.0000000000000000, -0.80000000000000004 },
4602   { 0.44852768286073008, 0.50000000000000000, 20.000000000000000,
4603           4.0000000000000000, -0.69999999999999996 },
4604   { 0.47751245808592863, 0.50000000000000000, 20.000000000000000,
4605           4.0000000000000000, -0.59999999999999998 },
4606   { 0.51283632632707754, 0.50000000000000000, 20.000000000000000,
4607           4.0000000000000000, -0.50000000000000000 },
4608   { 0.55713468814894307, 0.50000000000000000, 20.000000000000000,
4609           4.0000000000000000, -0.40000000000000002 },
4610   { 0.61481320817757312, 0.50000000000000000, 20.000000000000000,
4611           4.0000000000000000, -0.30000000000000004 },
4612   { 0.69383483410097202, 0.50000000000000000, 20.000000000000000,
4613           4.0000000000000000, -0.19999999999999996 },
4614   { 0.81012002526006033, 0.50000000000000000, 20.000000000000000,
4615           4.0000000000000000, -0.099999999999999978 },
4616   { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
4617           4.0000000000000000, 0.0000000000000000 },
4618   { 1.3622225506603911, 0.50000000000000000, 20.000000000000000,
4619           4.0000000000000000, 0.10000000000000009 },
4620   { 2.2349513086109001, 0.50000000000000000, 20.000000000000000,
4621           4.0000000000000000, 0.19999999999999996 },
4622   { 5.1864917536761723, 0.50000000000000000, 20.000000000000000,
4623           4.0000000000000000, 0.30000000000000004 },
4624   { 21.020560423779411, 0.50000000000000000, 20.000000000000000,
4625           4.0000000000000000, 0.39999999999999991 },
4626   { 175.19649997100612, 0.50000000000000000, 20.000000000000000,
4627           4.0000000000000000, 0.50000000000000000 },
4628   { 3467.1587803688708, 0.50000000000000000, 20.000000000000000,
4629           4.0000000000000000, 0.60000000000000009 },
4630   { 225003.88683445856, 0.50000000000000000, 20.000000000000000,
4631           4.0000000000000000, 0.69999999999999996 },
4632   { 110837674.65652709, 0.50000000000000000, 20.000000000000000,
4633           4.0000000000000000, 0.80000000000000004 },
4634   { 6688966964170.6807, 0.50000000000000000, 20.000000000000000,
4635           4.0000000000000000, 0.89999999999999991 },
4636 };
4637 
4638 // Test function for a=0.50000000000000000, b=20.000000000000000, c=4.0000000000000000.
4639 template <typename Tp>
test067()4640 void test067()
4641 {
4642   const Tp eps = std::numeric_limits<Tp>::epsilon();
4643   Tp max_abs_diff = -Tp(1);
4644   Tp max_abs_frac = -Tp(1);
4645   unsigned int num_datum = sizeof(data067)
4646                          / sizeof(testcase_hyperg<double>);
4647   for (unsigned int i = 0; i < num_datum; ++i)
4648     {
4649       const Tp f = std::tr1::hyperg(Tp(data067[i].a), Tp(data067[i].b),
4650                    Tp(data067[i].c), Tp(data067[i].x));
4651       const Tp f0 = data067[i].f0;
4652       const Tp diff = f - f0;
4653       if (std::abs(diff) > max_abs_diff)
4654         max_abs_diff = std::abs(diff);
4655       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4656         {
4657           const Tp frac = diff / f0;
4658           if (std::abs(frac) > max_abs_frac)
4659             max_abs_frac = std::abs(frac);
4660         }
4661     }
4662   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4663 }
4664 
4665 // Test data for a=0.50000000000000000, b=20.000000000000000, c=6.0000000000000000.
4666 testcase_hyperg<double> data068[] = {
4667   { 0.48716309885816761, 0.50000000000000000, 20.000000000000000,
4668           6.0000000000000000, -0.90000000000000002 },
4669   { 0.50965859152542281, 0.50000000000000000, 20.000000000000000,
4670           6.0000000000000000, -0.80000000000000004 },
4671   { 0.53554809210658971, 0.50000000000000000, 20.000000000000000,
4672           6.0000000000000000, -0.69999999999999996 },
4673   { 0.56576689207507136, 0.50000000000000000, 20.000000000000000,
4674           6.0000000000000000, -0.59999999999999998 },
4675   { 0.60164849637133688, 0.50000000000000000, 20.000000000000000,
4676           6.0000000000000000, -0.50000000000000000 },
4677   { 0.64516711595404375, 0.50000000000000000, 20.000000000000000,
4678           6.0000000000000000, -0.40000000000000002 },
4679   { 0.69938278735493542, 0.50000000000000000, 20.000000000000000,
4680           6.0000000000000000, -0.30000000000000004 },
4681   { 0.76931621518401860, 0.50000000000000000, 20.000000000000000,
4682           6.0000000000000000, -0.19999999999999996 },
4683   { 0.86381808725530695, 0.50000000000000000, 20.000000000000000,
4684           6.0000000000000000, -0.099999999999999978 },
4685   { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
4686           6.0000000000000000, 0.0000000000000000 },
4687   { 1.2152051956815531, 0.50000000000000000, 20.000000000000000,
4688           6.0000000000000000, 0.10000000000000009 },
4689   { 1.6052546785425543, 0.50000000000000000, 20.000000000000000,
4690           6.0000000000000000, 0.19999999999999996 },
4691   { 2.4765586046012635, 0.50000000000000000, 20.000000000000000,
4692           6.0000000000000000, 0.30000000000000004 },
4693   { 5.1564492216997486, 0.50000000000000000, 20.000000000000000,
4694           6.0000000000000000, 0.39999999999999991 },
4695   { 18.446158392136365, 0.50000000000000000, 20.000000000000000,
4696           6.0000000000000000, 0.50000000000000000 },
4697   { 150.44577670123971, 0.50000000000000000, 20.000000000000000,
4698           6.0000000000000000, 0.60000000000000009 },
4699   { 3862.6317400115768, 0.50000000000000000, 20.000000000000000,
4700           6.0000000000000000, 0.69999999999999996 },
4701   { 632428.34833625401, 0.50000000000000000, 20.000000000000000,
4702           6.0000000000000000, 0.80000000000000004 },
4703   { 7426927663.3808765, 0.50000000000000000, 20.000000000000000,
4704           6.0000000000000000, 0.89999999999999991 },
4705 };
4706 
4707 // Test function for a=0.50000000000000000, b=20.000000000000000, c=6.0000000000000000.
4708 template <typename Tp>
test068()4709 void test068()
4710 {
4711   const Tp eps = std::numeric_limits<Tp>::epsilon();
4712   Tp max_abs_diff = -Tp(1);
4713   Tp max_abs_frac = -Tp(1);
4714   unsigned int num_datum = sizeof(data068)
4715                          / sizeof(testcase_hyperg<double>);
4716   for (unsigned int i = 0; i < num_datum; ++i)
4717     {
4718       const Tp f = std::tr1::hyperg(Tp(data068[i].a), Tp(data068[i].b),
4719                    Tp(data068[i].c), Tp(data068[i].x));
4720       const Tp f0 = data068[i].f0;
4721       const Tp diff = f - f0;
4722       if (std::abs(diff) > max_abs_diff)
4723         max_abs_diff = std::abs(diff);
4724       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4725         {
4726           const Tp frac = diff / f0;
4727           if (std::abs(frac) > max_abs_frac)
4728             max_abs_frac = std::abs(frac);
4729         }
4730     }
4731   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4732 }
4733 
4734 // Test data for a=0.50000000000000000, b=20.000000000000000, c=8.0000000000000000.
4735 testcase_hyperg<double> data069[] = {
4736   { 0.54703266209548362, 0.50000000000000000, 20.000000000000000,
4737           8.0000000000000000, -0.90000000000000002 },
4738   { 0.56997321774144971, 0.50000000000000000, 20.000000000000000,
4739           8.0000000000000000, -0.80000000000000004 },
4740   { 0.59603026159654970, 0.50000000000000000, 20.000000000000000,
4741           8.0000000000000000, -0.69999999999999996 },
4742   { 0.62596978851120511, 0.50000000000000000, 20.000000000000000,
4743           8.0000000000000000, -0.59999999999999998 },
4744   { 0.66084565876898926, 0.50000000000000000, 20.000000000000000,
4745           8.0000000000000000, -0.50000000000000000 },
4746   { 0.70215256667232839, 0.50000000000000000, 20.000000000000000,
4747           8.0000000000000000, -0.40000000000000002 },
4748   { 0.75208916592008568, 0.50000000000000000, 20.000000000000000,
4749           8.0000000000000000, -0.30000000000000004 },
4750   { 0.81403631111658648, 0.50000000000000000, 20.000000000000000,
4751           8.0000000000000000, -0.19999999999999996 },
4752   { 0.89348608489854608, 0.50000000000000000, 20.000000000000000,
4753           8.0000000000000000, -0.099999999999999978 },
4754   { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
4755           8.0000000000000000, 0.0000000000000000 },
4756   { 1.1517793185139173, 0.50000000000000000, 20.000000000000000,
4757           8.0000000000000000, 0.10000000000000009 },
4758   { 1.3878110313656598, 0.50000000000000000, 20.000000000000000,
4759           8.0000000000000000, 0.19999999999999996 },
4760   { 1.8061071794572381, 0.50000000000000000, 20.000000000000000,
4761           8.0000000000000000, 0.30000000000000004 },
4762   { 2.7148594517859586, 0.50000000000000000, 20.000000000000000,
4763           8.0000000000000000, 0.39999999999999991 },
4764   { 5.4529435709049361, 0.50000000000000000, 20.000000000000000,
4765           8.0000000000000000, 0.50000000000000000 },
4766   { 19.487310275377109, 0.50000000000000000, 20.000000000000000,
4767           8.0000000000000000, 0.60000000000000009 },
4768   { 191.69079165937470, 0.50000000000000000, 20.000000000000000,
4769           8.0000000000000000, 0.69999999999999996 },
4770   { 10218.543981792311, 0.50000000000000000, 20.000000000000000,
4771           8.0000000000000000, 0.80000000000000004 },
4772   { 23160836.646583911, 0.50000000000000000, 20.000000000000000,
4773           8.0000000000000000, 0.89999999999999991 },
4774 };
4775 
4776 // Test function for a=0.50000000000000000, b=20.000000000000000, c=8.0000000000000000.
4777 template <typename Tp>
test069()4778 void test069()
4779 {
4780   const Tp eps = std::numeric_limits<Tp>::epsilon();
4781   Tp max_abs_diff = -Tp(1);
4782   Tp max_abs_frac = -Tp(1);
4783   unsigned int num_datum = sizeof(data069)
4784                          / sizeof(testcase_hyperg<double>);
4785   for (unsigned int i = 0; i < num_datum; ++i)
4786     {
4787       const Tp f = std::tr1::hyperg(Tp(data069[i].a), Tp(data069[i].b),
4788                    Tp(data069[i].c), Tp(data069[i].x));
4789       const Tp f0 = data069[i].f0;
4790       const Tp diff = f - f0;
4791       if (std::abs(diff) > max_abs_diff)
4792         max_abs_diff = std::abs(diff);
4793       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4794         {
4795           const Tp frac = diff / f0;
4796           if (std::abs(frac) > max_abs_frac)
4797             max_abs_frac = std::abs(frac);
4798         }
4799     }
4800   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4801 }
4802 
4803 // Test data for a=0.50000000000000000, b=20.000000000000000, c=10.000000000000000.
4804 testcase_hyperg<double> data070[] = {
4805   { 0.59292067298616002, 0.50000000000000000, 20.000000000000000,
4806           10.000000000000000, -0.90000000000000002 },
4807   { 0.61572496720679915, 0.50000000000000000, 20.000000000000000,
4808           10.000000000000000, -0.80000000000000004 },
4809   { 0.64135339122875623, 0.50000000000000000, 20.000000000000000,
4810           10.000000000000000, -0.69999999999999996 },
4811   { 0.67043457419280483, 0.50000000000000000, 20.000000000000000,
4812           10.000000000000000, -0.59999999999999998 },
4813   { 0.70380956268170980, 0.50000000000000000, 20.000000000000000,
4814           10.000000000000000, -0.50000000000000000 },
4815   { 0.74263251901495231, 0.50000000000000000, 20.000000000000000,
4816           10.000000000000000, -0.40000000000000002 },
4817   { 0.78853555445528278, 0.50000000000000000, 20.000000000000000,
4818           10.000000000000000, -0.30000000000000004 },
4819   { 0.84391122775673766, 0.50000000000000000, 20.000000000000000,
4820           10.000000000000000, -0.19999999999999996 },
4821   { 0.91242401018807406, 0.50000000000000000, 20.000000000000000,
4822           10.000000000000000, -0.099999999999999978 },
4823   { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
4824           10.000000000000000, 0.0000000000000000 },
4825   { 1.1169059681274873, 0.50000000000000000, 20.000000000000000,
4826           10.000000000000000, 0.10000000000000009 },
4827   { 1.2825928301302667, 0.50000000000000000, 20.000000000000000,
4828           10.000000000000000, 0.19999999999999996 },
4829   { 1.5385937789924939, 0.50000000000000000, 20.000000000000000,
4830           10.000000000000000, 0.30000000000000004 },
4831   { 1.9895771187893898, 0.50000000000000000, 20.000000000000000,
4832           10.000000000000000, 0.39999999999999991 },
4833   { 2.9707335806970168, 0.50000000000000000, 20.000000000000000,
4834           10.000000000000000, 0.50000000000000000 },
4835   { 6.0299506157180467, 0.50000000000000000, 20.000000000000000,
4836           10.000000000000000, 0.60000000000000009 },
4837   { 24.259090336955577, 0.50000000000000000, 20.000000000000000,
4838           10.000000000000000, 0.69999999999999996 },
4839   { 406.27267173257223, 0.50000000000000000, 20.000000000000000,
4840           10.000000000000000, 0.80000000000000004 },
4841   { 174330.03997220192, 0.50000000000000000, 20.000000000000000,
4842           10.000000000000000, 0.89999999999999991 },
4843 };
4844 
4845 // Test function for a=0.50000000000000000, b=20.000000000000000, c=10.000000000000000.
4846 template <typename Tp>
test070()4847 void test070()
4848 {
4849   const Tp eps = std::numeric_limits<Tp>::epsilon();
4850   Tp max_abs_diff = -Tp(1);
4851   Tp max_abs_frac = -Tp(1);
4852   unsigned int num_datum = sizeof(data070)
4853                          / sizeof(testcase_hyperg<double>);
4854   for (unsigned int i = 0; i < num_datum; ++i)
4855     {
4856       const Tp f = std::tr1::hyperg(Tp(data070[i].a), Tp(data070[i].b),
4857                    Tp(data070[i].c), Tp(data070[i].x));
4858       const Tp f0 = data070[i].f0;
4859       const Tp diff = f - f0;
4860       if (std::abs(diff) > max_abs_diff)
4861         max_abs_diff = std::abs(diff);
4862       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4863         {
4864           const Tp frac = diff / f0;
4865           if (std::abs(frac) > max_abs_frac)
4866             max_abs_frac = std::abs(frac);
4867         }
4868     }
4869   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4870 }
4871 
4872 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
4873 testcase_hyperg<double> data071[] = {
4874   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4875           2.0000000000000000, -0.90000000000000002 },
4876   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4877           2.0000000000000000, -0.80000000000000004 },
4878   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4879           2.0000000000000000, -0.69999999999999996 },
4880   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4881           2.0000000000000000, -0.59999999999999998 },
4882   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4883           2.0000000000000000, -0.50000000000000000 },
4884   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4885           2.0000000000000000, -0.40000000000000002 },
4886   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4887           2.0000000000000000, -0.30000000000000004 },
4888   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4889           2.0000000000000000, -0.19999999999999996 },
4890   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4891           2.0000000000000000, -0.099999999999999978 },
4892   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4893           2.0000000000000000, 0.0000000000000000 },
4894   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4895           2.0000000000000000, 0.10000000000000009 },
4896   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4897           2.0000000000000000, 0.19999999999999996 },
4898   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4899           2.0000000000000000, 0.30000000000000004 },
4900   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4901           2.0000000000000000, 0.39999999999999991 },
4902   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4903           2.0000000000000000, 0.50000000000000000 },
4904   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4905           2.0000000000000000, 0.60000000000000009 },
4906   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4907           2.0000000000000000, 0.69999999999999996 },
4908   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4909           2.0000000000000000, 0.80000000000000004 },
4910   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4911           2.0000000000000000, 0.89999999999999991 },
4912 };
4913 
4914 // Test function for a=1.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
4915 template <typename Tp>
test071()4916 void test071()
4917 {
4918   const Tp eps = std::numeric_limits<Tp>::epsilon();
4919   Tp max_abs_diff = -Tp(1);
4920   Tp max_abs_frac = -Tp(1);
4921   unsigned int num_datum = sizeof(data071)
4922                          / sizeof(testcase_hyperg<double>);
4923   for (unsigned int i = 0; i < num_datum; ++i)
4924     {
4925       const Tp f = std::tr1::hyperg(Tp(data071[i].a), Tp(data071[i].b),
4926                    Tp(data071[i].c), Tp(data071[i].x));
4927       const Tp f0 = data071[i].f0;
4928       const Tp diff = f - f0;
4929       if (std::abs(diff) > max_abs_diff)
4930         max_abs_diff = std::abs(diff);
4931       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4932         {
4933           const Tp frac = diff / f0;
4934           if (std::abs(frac) > max_abs_frac)
4935             max_abs_frac = std::abs(frac);
4936         }
4937     }
4938   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4939 }
4940 
4941 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
4942 testcase_hyperg<double> data072[] = {
4943   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4944           4.0000000000000000, -0.90000000000000002 },
4945   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4946           4.0000000000000000, -0.80000000000000004 },
4947   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4948           4.0000000000000000, -0.69999999999999996 },
4949   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4950           4.0000000000000000, -0.59999999999999998 },
4951   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4952           4.0000000000000000, -0.50000000000000000 },
4953   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4954           4.0000000000000000, -0.40000000000000002 },
4955   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4956           4.0000000000000000, -0.30000000000000004 },
4957   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4958           4.0000000000000000, -0.19999999999999996 },
4959   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4960           4.0000000000000000, -0.099999999999999978 },
4961   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4962           4.0000000000000000, 0.0000000000000000 },
4963   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4964           4.0000000000000000, 0.10000000000000009 },
4965   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4966           4.0000000000000000, 0.19999999999999996 },
4967   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4968           4.0000000000000000, 0.30000000000000004 },
4969   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4970           4.0000000000000000, 0.39999999999999991 },
4971   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4972           4.0000000000000000, 0.50000000000000000 },
4973   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4974           4.0000000000000000, 0.60000000000000009 },
4975   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4976           4.0000000000000000, 0.69999999999999996 },
4977   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4978           4.0000000000000000, 0.80000000000000004 },
4979   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4980           4.0000000000000000, 0.89999999999999991 },
4981 };
4982 
4983 // Test function for a=1.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
4984 template <typename Tp>
test072()4985 void test072()
4986 {
4987   const Tp eps = std::numeric_limits<Tp>::epsilon();
4988   Tp max_abs_diff = -Tp(1);
4989   Tp max_abs_frac = -Tp(1);
4990   unsigned int num_datum = sizeof(data072)
4991                          / sizeof(testcase_hyperg<double>);
4992   for (unsigned int i = 0; i < num_datum; ++i)
4993     {
4994       const Tp f = std::tr1::hyperg(Tp(data072[i].a), Tp(data072[i].b),
4995                    Tp(data072[i].c), Tp(data072[i].x));
4996       const Tp f0 = data072[i].f0;
4997       const Tp diff = f - f0;
4998       if (std::abs(diff) > max_abs_diff)
4999         max_abs_diff = std::abs(diff);
5000       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5001         {
5002           const Tp frac = diff / f0;
5003           if (std::abs(frac) > max_abs_frac)
5004             max_abs_frac = std::abs(frac);
5005         }
5006     }
5007   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5008 }
5009 
5010 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
5011 testcase_hyperg<double> data073[] = {
5012   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5013           6.0000000000000000, -0.90000000000000002 },
5014   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5015           6.0000000000000000, -0.80000000000000004 },
5016   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5017           6.0000000000000000, -0.69999999999999996 },
5018   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5019           6.0000000000000000, -0.59999999999999998 },
5020   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5021           6.0000000000000000, -0.50000000000000000 },
5022   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5023           6.0000000000000000, -0.40000000000000002 },
5024   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5025           6.0000000000000000, -0.30000000000000004 },
5026   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5027           6.0000000000000000, -0.19999999999999996 },
5028   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5029           6.0000000000000000, -0.099999999999999978 },
5030   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5031           6.0000000000000000, 0.0000000000000000 },
5032   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5033           6.0000000000000000, 0.10000000000000009 },
5034   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5035           6.0000000000000000, 0.19999999999999996 },
5036   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5037           6.0000000000000000, 0.30000000000000004 },
5038   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5039           6.0000000000000000, 0.39999999999999991 },
5040   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5041           6.0000000000000000, 0.50000000000000000 },
5042   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5043           6.0000000000000000, 0.60000000000000009 },
5044   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5045           6.0000000000000000, 0.69999999999999996 },
5046   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5047           6.0000000000000000, 0.80000000000000004 },
5048   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5049           6.0000000000000000, 0.89999999999999991 },
5050 };
5051 
5052 // Test function for a=1.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
5053 template <typename Tp>
test073()5054 void test073()
5055 {
5056   const Tp eps = std::numeric_limits<Tp>::epsilon();
5057   Tp max_abs_diff = -Tp(1);
5058   Tp max_abs_frac = -Tp(1);
5059   unsigned int num_datum = sizeof(data073)
5060                          / sizeof(testcase_hyperg<double>);
5061   for (unsigned int i = 0; i < num_datum; ++i)
5062     {
5063       const Tp f = std::tr1::hyperg(Tp(data073[i].a), Tp(data073[i].b),
5064                    Tp(data073[i].c), Tp(data073[i].x));
5065       const Tp f0 = data073[i].f0;
5066       const Tp diff = f - f0;
5067       if (std::abs(diff) > max_abs_diff)
5068         max_abs_diff = std::abs(diff);
5069       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5070         {
5071           const Tp frac = diff / f0;
5072           if (std::abs(frac) > max_abs_frac)
5073             max_abs_frac = std::abs(frac);
5074         }
5075     }
5076   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5077 }
5078 
5079 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
5080 testcase_hyperg<double> data074[] = {
5081   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5082           8.0000000000000000, -0.90000000000000002 },
5083   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5084           8.0000000000000000, -0.80000000000000004 },
5085   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5086           8.0000000000000000, -0.69999999999999996 },
5087   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5088           8.0000000000000000, -0.59999999999999998 },
5089   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5090           8.0000000000000000, -0.50000000000000000 },
5091   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5092           8.0000000000000000, -0.40000000000000002 },
5093   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5094           8.0000000000000000, -0.30000000000000004 },
5095   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5096           8.0000000000000000, -0.19999999999999996 },
5097   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5098           8.0000000000000000, -0.099999999999999978 },
5099   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5100           8.0000000000000000, 0.0000000000000000 },
5101   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5102           8.0000000000000000, 0.10000000000000009 },
5103   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5104           8.0000000000000000, 0.19999999999999996 },
5105   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5106           8.0000000000000000, 0.30000000000000004 },
5107   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5108           8.0000000000000000, 0.39999999999999991 },
5109   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5110           8.0000000000000000, 0.50000000000000000 },
5111   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5112           8.0000000000000000, 0.60000000000000009 },
5113   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5114           8.0000000000000000, 0.69999999999999996 },
5115   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5116           8.0000000000000000, 0.80000000000000004 },
5117   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5118           8.0000000000000000, 0.89999999999999991 },
5119 };
5120 
5121 // Test function for a=1.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
5122 template <typename Tp>
test074()5123 void test074()
5124 {
5125   const Tp eps = std::numeric_limits<Tp>::epsilon();
5126   Tp max_abs_diff = -Tp(1);
5127   Tp max_abs_frac = -Tp(1);
5128   unsigned int num_datum = sizeof(data074)
5129                          / sizeof(testcase_hyperg<double>);
5130   for (unsigned int i = 0; i < num_datum; ++i)
5131     {
5132       const Tp f = std::tr1::hyperg(Tp(data074[i].a), Tp(data074[i].b),
5133                    Tp(data074[i].c), Tp(data074[i].x));
5134       const Tp f0 = data074[i].f0;
5135       const Tp diff = f - f0;
5136       if (std::abs(diff) > max_abs_diff)
5137         max_abs_diff = std::abs(diff);
5138       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5139         {
5140           const Tp frac = diff / f0;
5141           if (std::abs(frac) > max_abs_frac)
5142             max_abs_frac = std::abs(frac);
5143         }
5144     }
5145   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5146 }
5147 
5148 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
5149 testcase_hyperg<double> data075[] = {
5150   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5151           10.000000000000000, -0.90000000000000002 },
5152   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5153           10.000000000000000, -0.80000000000000004 },
5154   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5155           10.000000000000000, -0.69999999999999996 },
5156   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5157           10.000000000000000, -0.59999999999999998 },
5158   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5159           10.000000000000000, -0.50000000000000000 },
5160   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5161           10.000000000000000, -0.40000000000000002 },
5162   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5163           10.000000000000000, -0.30000000000000004 },
5164   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5165           10.000000000000000, -0.19999999999999996 },
5166   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5167           10.000000000000000, -0.099999999999999978 },
5168   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5169           10.000000000000000, 0.0000000000000000 },
5170   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5171           10.000000000000000, 0.10000000000000009 },
5172   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5173           10.000000000000000, 0.19999999999999996 },
5174   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5175           10.000000000000000, 0.30000000000000004 },
5176   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5177           10.000000000000000, 0.39999999999999991 },
5178   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5179           10.000000000000000, 0.50000000000000000 },
5180   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5181           10.000000000000000, 0.60000000000000009 },
5182   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5183           10.000000000000000, 0.69999999999999996 },
5184   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5185           10.000000000000000, 0.80000000000000004 },
5186   { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5187           10.000000000000000, 0.89999999999999991 },
5188 };
5189 
5190 // Test function for a=1.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
5191 template <typename Tp>
test075()5192 void test075()
5193 {
5194   const Tp eps = std::numeric_limits<Tp>::epsilon();
5195   Tp max_abs_diff = -Tp(1);
5196   Tp max_abs_frac = -Tp(1);
5197   unsigned int num_datum = sizeof(data075)
5198                          / sizeof(testcase_hyperg<double>);
5199   for (unsigned int i = 0; i < num_datum; ++i)
5200     {
5201       const Tp f = std::tr1::hyperg(Tp(data075[i].a), Tp(data075[i].b),
5202                    Tp(data075[i].c), Tp(data075[i].x));
5203       const Tp f0 = data075[i].f0;
5204       const Tp diff = f - f0;
5205       if (std::abs(diff) > max_abs_diff)
5206         max_abs_diff = std::abs(diff);
5207       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5208         {
5209           const Tp frac = diff / f0;
5210           if (std::abs(frac) > max_abs_frac)
5211             max_abs_frac = std::abs(frac);
5212         }
5213     }
5214   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5215 }
5216 
5217 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
5218 testcase_hyperg<double> data076[] = {
5219   { 0.84089972268671609, 1.0000000000000000, 0.50000000000000000,
5220           2.0000000000000000, -0.90000000000000002 },
5221   { 0.85410196624968437, 1.0000000000000000, 0.50000000000000000,
5222           2.0000000000000000, -0.80000000000000004 },
5223   { 0.86811566011579933, 1.0000000000000000, 0.50000000000000000,
5224           2.0000000000000000, -0.69999999999999996 },
5225   { 0.88303688022450544, 1.0000000000000000, 0.50000000000000000,
5226           2.0000000000000000, -0.59999999999999998 },
5227   { 0.89897948556635565, 1.0000000000000000, 0.50000000000000000,
5228           2.0000000000000000, -0.50000000000000000 },
5229   { 0.91607978309961580, 1.0000000000000000, 0.50000000000000000,
5230           2.0000000000000000, -0.40000000000000002 },
5231   { 0.93450283399425305, 1.0000000000000000, 0.50000000000000000,
5232           2.0000000000000000, -0.30000000000000004 },
5233   { 0.95445115010332193, 1.0000000000000000, 0.50000000000000000,
5234           2.0000000000000000, -0.19999999999999996 },
5235   { 0.97617696340303095, 1.0000000000000000, 0.50000000000000000,
5236           2.0000000000000000, -0.099999999999999978 },
5237   { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
5238           2.0000000000000000, 0.0000000000000000 },
5239   { 1.0263340389897240, 1.0000000000000000, 0.50000000000000000,
5240           2.0000000000000000, 0.10000000000000009 },
5241   { 1.0557280900008410, 1.0000000000000000, 0.50000000000000000,
5242           2.0000000000000000, 0.19999999999999996 },
5243   { 1.0889331564394962, 1.0000000000000000, 0.50000000000000000,
5244           2.0000000000000000, 0.30000000000000004 },
5245   { 1.1270166537925830, 1.0000000000000000, 0.50000000000000000,
5246           2.0000000000000000, 0.39999999999999991 },
5247   { 1.1715728752538095, 1.0000000000000000, 0.50000000000000000,
5248           2.0000000000000000, 0.50000000000000000 },
5249   { 1.2251482265544145, 1.0000000000000000, 0.50000000000000000,
5250           2.0000000000000000, 0.60000000000000009 },
5251   { 1.2922212642709541, 1.0000000000000000, 0.50000000000000000,
5252           2.0000000000000000, 0.69999999999999996 },
5253   { 1.3819660112501042, 1.0000000000000000, 0.50000000000000000,
5254           2.0000000000000000, 0.80000000000000004 },
5255   { 1.5194938532959119, 1.0000000000000000, 0.50000000000000000,
5256           2.0000000000000000, 0.89999999999999991 },
5257 };
5258 
5259 // Test function for a=1.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
5260 template <typename Tp>
test076()5261 void test076()
5262 {
5263   const Tp eps = std::numeric_limits<Tp>::epsilon();
5264   Tp max_abs_diff = -Tp(1);
5265   Tp max_abs_frac = -Tp(1);
5266   unsigned int num_datum = sizeof(data076)
5267                          / sizeof(testcase_hyperg<double>);
5268   for (unsigned int i = 0; i < num_datum; ++i)
5269     {
5270       const Tp f = std::tr1::hyperg(Tp(data076[i].a), Tp(data076[i].b),
5271                    Tp(data076[i].c), Tp(data076[i].x));
5272       const Tp f0 = data076[i].f0;
5273       const Tp diff = f - f0;
5274       if (std::abs(diff) > max_abs_diff)
5275         max_abs_diff = std::abs(diff);
5276       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5277         {
5278           const Tp frac = diff / f0;
5279           if (std::abs(frac) > max_abs_frac)
5280             max_abs_frac = std::abs(frac);
5281         }
5282     }
5283   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5284 }
5285 
5286 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
5287 testcase_hyperg<double> data077[] = {
5288   { 0.90992197313391499, 1.0000000000000000, 0.50000000000000000,
5289           4.0000000000000000, -0.90000000000000002 },
5290   { 0.91822592662244507, 1.0000000000000000, 0.50000000000000000,
5291           4.0000000000000000, -0.80000000000000004 },
5292   { 0.92687104566419531, 1.0000000000000000, 0.50000000000000000,
5293           4.0000000000000000, -0.69999999999999996 },
5294   { 0.93588628166548815, 1.0000000000000000, 0.50000000000000000,
5295           4.0000000000000000, -0.59999999999999998 },
5296   { 0.94530459215552909, 1.0000000000000000, 0.50000000000000000,
5297           4.0000000000000000, -0.50000000000000000 },
5298   { 0.95516374875247467, 1.0000000000000000, 0.50000000000000000,
5299           4.0000000000000000, -0.40000000000000002 },
5300   { 0.96550736800511827, 1.0000000000000000, 0.50000000000000000,
5301           4.0000000000000000, -0.30000000000000004 },
5302   { 0.97638624595136270, 1.0000000000000000, 0.50000000000000000,
5303           4.0000000000000000, -0.19999999999999996 },
5304   { 0.98786011482678993, 1.0000000000000000, 0.50000000000000000,
5305           4.0000000000000000, -0.099999999999999978 },
5306   { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
5307           4.0000000000000000, 0.0000000000000000 },
5308   { 1.0128914530682316, 1.0000000000000000, 0.50000000000000000,
5309           4.0000000000000000, 0.10000000000000009 },
5310   { 1.0266391040215350, 1.0000000000000000, 0.50000000000000000,
5311           4.0000000000000000, 0.19999999999999996 },
5312   { 1.0413732738729464, 1.0000000000000000, 0.50000000000000000,
5313           4.0000000000000000, 0.30000000000000004 },
5314   { 1.0572599536532992, 1.0000000000000000, 0.50000000000000000,
5315           4.0000000000000000, 0.39999999999999991 },
5316   { 1.0745166004060953, 1.0000000000000000, 0.50000000000000000,
5317           4.0000000000000000, 0.50000000000000000 },
5318   { 1.0934387388831386, 1.0000000000000000, 0.50000000000000000,
5319           4.0000000000000000, 0.60000000000000009 },
5320   { 1.1144486980714641, 1.0000000000000000, 0.50000000000000000,
5321           4.0000000000000000, 0.69999999999999996 },
5322   { 1.1381966011250106, 1.0000000000000000, 0.50000000000000000,
5323           4.0000000000000000, 0.80000000000000004 },
5324   { 1.1658171625342397, 1.0000000000000000, 0.50000000000000000,
5325           4.0000000000000000, 0.89999999999999991 },
5326 };
5327 
5328 // Test function for a=1.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
5329 template <typename Tp>
test077()5330 void test077()
5331 {
5332   const Tp eps = std::numeric_limits<Tp>::epsilon();
5333   Tp max_abs_diff = -Tp(1);
5334   Tp max_abs_frac = -Tp(1);
5335   unsigned int num_datum = sizeof(data077)
5336                          / sizeof(testcase_hyperg<double>);
5337   for (unsigned int i = 0; i < num_datum; ++i)
5338     {
5339       const Tp f = std::tr1::hyperg(Tp(data077[i].a), Tp(data077[i].b),
5340                    Tp(data077[i].c), Tp(data077[i].x));
5341       const Tp f0 = data077[i].f0;
5342       const Tp diff = f - f0;
5343       if (std::abs(diff) > max_abs_diff)
5344         max_abs_diff = std::abs(diff);
5345       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5346         {
5347           const Tp frac = diff / f0;
5348           if (std::abs(frac) > max_abs_frac)
5349             max_abs_frac = std::abs(frac);
5350         }
5351     }
5352   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5353 }
5354 
5355 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
5356 testcase_hyperg<double> data078[] = {
5357   { 0.93641908369732885, 1.0000000000000000, 0.50000000000000000,
5358           6.0000000000000000, -0.90000000000000002 },
5359   { 0.94256349654111315, 1.0000000000000000, 0.50000000000000000,
5360           6.0000000000000000, -0.80000000000000004 },
5361   { 0.94890138508461319, 1.0000000000000000, 0.50000000000000000,
5362           6.0000000000000000, -0.69999999999999996 },
5363   { 0.95544578858430007, 1.0000000000000000, 0.50000000000000000,
5364           6.0000000000000000, -0.59999999999999998 },
5365   { 0.96221121193620718, 1.0000000000000000, 0.50000000000000000,
5366           6.0000000000000000, -0.50000000000000000 },
5367   { 0.96921386948293542, 1.0000000000000000, 0.50000000000000000,
5368           6.0000000000000000, -0.40000000000000002 },
5369   { 0.97647198488394704, 1.0000000000000000, 0.50000000000000000,
5370           6.0000000000000000, -0.30000000000000004 },
5371   { 0.98400616412578656, 1.0000000000000000, 0.50000000000000000,
5372           6.0000000000000000, -0.19999999999999996 },
5373   { 0.99183986544963032, 1.0000000000000000, 0.50000000000000000,
5374           6.0000000000000000, -0.099999999999999978 },
5375   { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
5376           6.0000000000000000, 0.0000000000000000 },
5377   { 1.0085177124149158, 1.0000000000000000, 0.50000000000000000,
5378           6.0000000000000000, 0.10000000000000009 },
5379   { 1.0174294150407122, 1.0000000000000000, 0.50000000000000000,
5380           6.0000000000000000, 0.19999999999999996 },
5381   { 1.0267781897388850, 1.0000000000000000, 0.50000000000000000,
5382           6.0000000000000000, 0.30000000000000004 },
5383   { 1.0366157405967285, 1.0000000000000000, 0.50000000000000000,
5384           6.0000000000000000, 0.39999999999999991 },
5385   { 1.0470052068648839, 1.0000000000000000, 0.50000000000000000,
5386           6.0000000000000000, 0.50000000000000000 },
5387   { 1.0580253905513313, 1.0000000000000000, 0.50000000000000000,
5388           6.0000000000000000, 0.60000000000000009 },
5389   { 1.0697774741209765, 1.0000000000000000, 0.50000000000000000,
5390           6.0000000000000000, 0.69999999999999996 },
5391   { 1.0823965556448414, 1.0000000000000000, 0.50000000000000000,
5392           6.0000000000000000, 0.80000000000000004 },
5393   { 1.0960739512057103, 1.0000000000000000, 0.50000000000000000,
5394           6.0000000000000000, 0.89999999999999991 },
5395 };
5396 
5397 // Test function for a=1.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
5398 template <typename Tp>
test078()5399 void test078()
5400 {
5401   const Tp eps = std::numeric_limits<Tp>::epsilon();
5402   Tp max_abs_diff = -Tp(1);
5403   Tp max_abs_frac = -Tp(1);
5404   unsigned int num_datum = sizeof(data078)
5405                          / sizeof(testcase_hyperg<double>);
5406   for (unsigned int i = 0; i < num_datum; ++i)
5407     {
5408       const Tp f = std::tr1::hyperg(Tp(data078[i].a), Tp(data078[i].b),
5409                    Tp(data078[i].c), Tp(data078[i].x));
5410       const Tp f0 = data078[i].f0;
5411       const Tp diff = f - f0;
5412       if (std::abs(diff) > max_abs_diff)
5413         max_abs_diff = std::abs(diff);
5414       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5415         {
5416           const Tp frac = diff / f0;
5417           if (std::abs(frac) > max_abs_frac)
5418             max_abs_frac = std::abs(frac);
5419         }
5420     }
5421   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5422 }
5423 
5424 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
5425 testcase_hyperg<double> data079[] = {
5426   { 0.95069883346936235, 1.0000000000000000, 0.50000000000000000,
5427           8.0000000000000000, -0.90000000000000002 },
5428   { 0.95559618047704165, 1.0000000000000000, 0.50000000000000000,
5429           8.0000000000000000, -0.80000000000000004 },
5430   { 0.96061938755931653, 1.0000000000000000, 0.50000000000000000,
5431           8.0000000000000000, -0.69999999999999996 },
5432   { 0.96577553912851344, 1.0000000000000000, 0.50000000000000000,
5433           8.0000000000000000, -0.59999999999999998 },
5434   { 0.97107239473807716, 1.0000000000000000, 0.50000000000000000,
5435           8.0000000000000000, -0.50000000000000000 },
5436   { 0.97651848528588503, 1.0000000000000000, 0.50000000000000000,
5437           8.0000000000000000, -0.40000000000000002 },
5438   { 0.98212322830227139, 1.0000000000000000, 0.50000000000000000,
5439           8.0000000000000000, -0.30000000000000004 },
5440   { 0.98789706736195781, 1.0000000000000000, 0.50000000000000000,
5441           8.0000000000000000, -0.19999999999999996 },
5442   { 0.99385164237825074, 1.0000000000000000, 0.50000000000000000,
5443           8.0000000000000000, -0.099999999999999978 },
5444   { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
5445           8.0000000000000000, 0.0000000000000000 },
5446   { 1.0063568569383123, 1.0000000000000000, 0.50000000000000000,
5447           8.0000000000000000, 0.10000000000000009 },
5448   { 1.0129389344715818, 1.0000000000000000, 0.50000000000000000,
5449           8.0000000000000000, 0.19999999999999996 },
5450   { 1.0197653907773940, 1.0000000000000000, 0.50000000000000000,
5451           8.0000000000000000, 0.30000000000000004 },
5452   { 1.0268583912277143, 1.0000000000000000, 0.50000000000000000,
5453           8.0000000000000000, 0.39999999999999991 },
5454   { 1.0342438793937092, 1.0000000000000000, 0.50000000000000000,
5455           8.0000000000000000, 0.50000000000000000 },
5456   { 1.0419526514766855, 1.0000000000000000, 0.50000000000000000,
5457           8.0000000000000000, 0.60000000000000009 },
5458   { 1.0500219124976327, 1.0000000000000000, 0.50000000000000000,
5459           8.0000000000000000, 0.69999999999999996 },
5460   { 1.0584976491907043, 1.0000000000000000, 0.50000000000000000,
5461           8.0000000000000000, 0.80000000000000004 },
5462   { 1.0674385240268101, 1.0000000000000000, 0.50000000000000000,
5463           8.0000000000000000, 0.89999999999999991 },
5464 };
5465 
5466 // Test function for a=1.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
5467 template <typename Tp>
test079()5468 void test079()
5469 {
5470   const Tp eps = std::numeric_limits<Tp>::epsilon();
5471   Tp max_abs_diff = -Tp(1);
5472   Tp max_abs_frac = -Tp(1);
5473   unsigned int num_datum = sizeof(data079)
5474                          / sizeof(testcase_hyperg<double>);
5475   for (unsigned int i = 0; i < num_datum; ++i)
5476     {
5477       const Tp f = std::tr1::hyperg(Tp(data079[i].a), Tp(data079[i].b),
5478                    Tp(data079[i].c), Tp(data079[i].x));
5479       const Tp f0 = data079[i].f0;
5480       const Tp diff = f - f0;
5481       if (std::abs(diff) > max_abs_diff)
5482         max_abs_diff = std::abs(diff);
5483       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5484         {
5485           const Tp frac = diff / f0;
5486           if (std::abs(frac) > max_abs_frac)
5487             max_abs_frac = std::abs(frac);
5488         }
5489     }
5490   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5491 }
5492 
5493 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
5494 testcase_hyperg<double> data080[] = {
5495   { 0.95968319138913893, 1.0000000000000000, 0.50000000000000000,
5496           10.000000000000000, -0.90000000000000002 },
5497   { 0.96376169072755768, 1.0000000000000000, 0.50000000000000000,
5498           10.000000000000000, -0.80000000000000004 },
5499   { 0.96792900082729316, 1.0000000000000000, 0.50000000000000000,
5500           10.000000000000000, -0.69999999999999996 },
5501   { 0.97218942798115737, 1.0000000000000000, 0.50000000000000000,
5502           10.000000000000000, -0.59999999999999998 },
5503   { 0.97654763592586857, 1.0000000000000000, 0.50000000000000000,
5504           10.000000000000000, -0.50000000000000000 },
5505   { 0.98100869054353856, 1.0000000000000000, 0.50000000000000000,
5506           10.000000000000000, -0.40000000000000002 },
5507   { 0.98557811238699278, 1.0000000000000000, 0.50000000000000000,
5508           10.000000000000000, -0.30000000000000004 },
5509   { 0.99026193885795544, 1.0000000000000000, 0.50000000000000000,
5510           10.000000000000000, -0.19999999999999996 },
5511   { 0.99506679842072221, 1.0000000000000000, 0.50000000000000000,
5512           10.000000000000000, -0.099999999999999978 },
5513   { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
5514           10.000000000000000, 0.0000000000000000 },
5515   { 1.0050696417919618, 1.0000000000000000, 0.50000000000000000,
5516           10.000000000000000, 0.10000000000000009 },
5517   { 1.0102847452747090, 1.0000000000000000, 0.50000000000000000,
5518           10.000000000000000, 0.19999999999999996 },
5519   { 1.0156554225057022, 1.0000000000000000, 0.50000000000000000,
5520           10.000000000000000, 0.30000000000000004 },
5521   { 1.0211930882963096, 1.0000000000000000, 0.50000000000000000,
5522           10.000000000000000, 0.39999999999999991 },
5523   { 1.0269107343740711, 1.0000000000000000, 0.50000000000000000,
5524           10.000000000000000, 0.50000000000000000 },
5525   { 1.0328232917216298, 1.0000000000000000, 0.50000000000000000,
5526           10.000000000000000, 0.60000000000000009 },
5527   { 1.0389481230247195, 1.0000000000000000, 0.50000000000000000,
5528           10.000000000000000, 0.69999999999999996 },
5529   { 1.0453057164134614, 1.0000000000000000, 0.50000000000000000,
5530           10.000000000000000, 0.80000000000000004 },
5531   { 1.0519207114461246, 1.0000000000000000, 0.50000000000000000,
5532           10.000000000000000, 0.89999999999999991 },
5533 };
5534 
5535 // Test function for a=1.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
5536 template <typename Tp>
test080()5537 void test080()
5538 {
5539   const Tp eps = std::numeric_limits<Tp>::epsilon();
5540   Tp max_abs_diff = -Tp(1);
5541   Tp max_abs_frac = -Tp(1);
5542   unsigned int num_datum = sizeof(data080)
5543                          / sizeof(testcase_hyperg<double>);
5544   for (unsigned int i = 0; i < num_datum; ++i)
5545     {
5546       const Tp f = std::tr1::hyperg(Tp(data080[i].a), Tp(data080[i].b),
5547                    Tp(data080[i].c), Tp(data080[i].x));
5548       const Tp f0 = data080[i].f0;
5549       const Tp diff = f - f0;
5550       if (std::abs(diff) > max_abs_diff)
5551         max_abs_diff = std::abs(diff);
5552       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5553         {
5554           const Tp frac = diff / f0;
5555           if (std::abs(frac) > max_abs_frac)
5556             max_abs_frac = std::abs(frac);
5557         }
5558     }
5559   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5560 }
5561 
5562 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
5563 testcase_hyperg<double> data081[] = {
5564   { 0.71317098463599404, 1.0000000000000000, 1.0000000000000000,
5565           2.0000000000000000, -0.90000000000000002 },
5566   { 0.73473333112764871, 1.0000000000000000, 1.0000000000000000,
5567           2.0000000000000000, -0.80000000000000004 },
5568   { 0.75804035866024377, 1.0000000000000000, 1.0000000000000000,
5569           2.0000000000000000, -0.69999999999999996 },
5570   { 0.78333938207622600, 1.0000000000000000, 1.0000000000000000,
5571           2.0000000000000000, -0.59999999999999998 },
5572   { 0.81093021621632877, 1.0000000000000000, 1.0000000000000000,
5573           2.0000000000000000, -0.50000000000000000 },
5574   { 0.84118059155303226, 1.0000000000000000, 1.0000000000000000,
5575           2.0000000000000000, -0.40000000000000002 },
5576   { 0.87454754822497005, 1.0000000000000000, 1.0000000000000000,
5577           2.0000000000000000, -0.30000000000000004 },
5578   { 0.91160778396977304, 1.0000000000000000, 1.0000000000000000,
5579           2.0000000000000000, -0.19999999999999996 },
5580   { 0.95310179804324857, 1.0000000000000000, 1.0000000000000000,
5581           2.0000000000000000, -0.099999999999999978 },
5582   { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
5583           2.0000000000000000, 0.0000000000000000 },
5584   { 1.0536051565782629, 1.0000000000000000, 1.0000000000000000,
5585           2.0000000000000000, 0.10000000000000009 },
5586   { 1.1157177565710485, 1.0000000000000000, 1.0000000000000000,
5587           2.0000000000000000, 0.19999999999999996 },
5588   { 1.1889164797957747, 1.0000000000000000, 1.0000000000000000,
5589           2.0000000000000000, 0.30000000000000004 },
5590   { 1.2770640594149765, 1.0000000000000000, 1.0000000000000000,
5591           2.0000000000000000, 0.39999999999999991 },
5592   { 1.3862943611198899, 1.0000000000000000, 1.0000000000000000,
5593           2.0000000000000000, 0.50000000000000000 },
5594   { 1.5271512197902593, 1.0000000000000000, 1.0000000000000000,
5595           2.0000000000000000, 0.60000000000000009 },
5596   { 1.7199611490370503, 1.0000000000000000, 1.0000000000000000,
5597           2.0000000000000000, 0.69999999999999996 },
5598   { 2.0117973905426232, 1.0000000000000000, 1.0000000000000000,
5599           2.0000000000000000, 0.80000000000000004 },
5600   { 2.5584278811044912, 1.0000000000000000, 1.0000000000000000,
5601           2.0000000000000000, 0.89999999999999991 },
5602 };
5603 
5604 // Test function for a=1.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
5605 template <typename Tp>
test081()5606 void test081()
5607 {
5608   const Tp eps = std::numeric_limits<Tp>::epsilon();
5609   Tp max_abs_diff = -Tp(1);
5610   Tp max_abs_frac = -Tp(1);
5611   unsigned int num_datum = sizeof(data081)
5612                          / sizeof(testcase_hyperg<double>);
5613   for (unsigned int i = 0; i < num_datum; ++i)
5614     {
5615       const Tp f = std::tr1::hyperg(Tp(data081[i].a), Tp(data081[i].b),
5616                    Tp(data081[i].c), Tp(data081[i].x));
5617       const Tp f0 = data081[i].f0;
5618       const Tp diff = f - f0;
5619       if (std::abs(diff) > max_abs_diff)
5620         max_abs_diff = std::abs(diff);
5621       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5622         {
5623           const Tp frac = diff / f0;
5624           if (std::abs(frac) > max_abs_frac)
5625             max_abs_frac = std::abs(frac);
5626         }
5627     }
5628   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5629 }
5630 
5631 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
5632 testcase_hyperg<double> data082[] = {
5633   { 0.83165649828125576, 1.0000000000000000, 1.0000000000000000,
5634           4.0000000000000000, -0.90000000000000002 },
5635   { 0.84626246650116577, 1.0000000000000000, 1.0000000000000000,
5636           4.0000000000000000, -0.80000000000000004 },
5637   { 0.86165287670267410, 1.0000000000000000, 1.0000000000000000,
5638           4.0000000000000000, -0.69999999999999996 },
5639   { 0.87790681762615241, 1.0000000000000000, 1.0000000000000000,
5640           4.0000000000000000, -0.59999999999999998 },
5641   { 0.89511583784087689, 1.0000000000000000, 1.0000000000000000,
5642           4.0000000000000000, -0.50000000000000000 },
5643   { 0.91338673957393823, 1.0000000000000000, 1.0000000000000000,
5644           4.0000000000000000, -0.40000000000000002 },
5645   { 0.93284521667331954, 1.0000000000000000, 1.0000000000000000,
5646           4.0000000000000000, -0.30000000000000004 },
5647   { 0.95364066873549813, 1.0000000000000000, 1.0000000000000000,
5648           4.0000000000000000, -0.19999999999999996 },
5649   { 0.97595268969924187, 1.0000000000000000, 1.0000000000000000,
5650           4.0000000000000000, -0.099999999999999978 },
5651   { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
5652           4.0000000000000000, 0.0000000000000000 },
5653   { 1.0260530485179122, 1.0000000000000000, 1.0000000000000000,
5654           4.0000000000000000, 0.10000000000000009 },
5655   { 1.0544523154103413, 1.0000000000000000, 1.0000000000000000,
5656           4.0000000000000000, 0.19999999999999996 },
5657   { 1.0856358366643180, 1.0000000000000000, 1.0000000000000000,
5658           4.0000000000000000, 0.30000000000000004 },
5659   { 1.1201824010510930, 1.0000000000000000, 1.0000000000000000,
5660           4.0000000000000000, 0.39999999999999991 },
5661   { 1.1588830833596719, 1.0000000000000000, 1.0000000000000000,
5662           4.0000000000000000, 0.50000000000000000 },
5663   { 1.2028682930536780, 1.0000000000000000, 1.0000000000000000,
5664           4.0000000000000000, 0.60000000000000009 },
5665   { 1.2538561433469468, 1.0000000000000000, 1.0000000000000000,
5666           4.0000000000000000, 0.69999999999999996 },
5667   { 1.3147120107267418, 1.0000000000000000, 1.0000000000000000,
5668           4.0000000000000000, 0.80000000000000004 },
5669   { 1.3910528844853491, 1.0000000000000000, 1.0000000000000000,
5670           4.0000000000000000, 0.89999999999999991 },
5671 };
5672 
5673 // Test function for a=1.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
5674 template <typename Tp>
test082()5675 void test082()
5676 {
5677   const Tp eps = std::numeric_limits<Tp>::epsilon();
5678   Tp max_abs_diff = -Tp(1);
5679   Tp max_abs_frac = -Tp(1);
5680   unsigned int num_datum = sizeof(data082)
5681                          / sizeof(testcase_hyperg<double>);
5682   for (unsigned int i = 0; i < num_datum; ++i)
5683     {
5684       const Tp f = std::tr1::hyperg(Tp(data082[i].a), Tp(data082[i].b),
5685                    Tp(data082[i].c), Tp(data082[i].x));
5686       const Tp f0 = data082[i].f0;
5687       const Tp diff = f - f0;
5688       if (std::abs(diff) > max_abs_diff)
5689         max_abs_diff = std::abs(diff);
5690       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5691         {
5692           const Tp frac = diff / f0;
5693           if (std::abs(frac) > max_abs_frac)
5694             max_abs_frac = std::abs(frac);
5695         }
5696     }
5697   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5698 }
5699 
5700 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
5701 testcase_hyperg<double> data083[] = {
5702   { 0.87917686994924527, 1.0000000000000000, 1.0000000000000000,
5703           6.0000000000000000, -0.90000000000000002 },
5704   { 0.89033956110358414, 1.0000000000000000, 1.0000000000000000,
5705           6.0000000000000000, -0.80000000000000004 },
5706   { 0.90196195126098366, 1.0000000000000000, 1.0000000000000000,
5707           6.0000000000000000, -0.69999999999999996 },
5708   { 0.91408080149514692, 1.0000000000000000, 1.0000000000000000,
5709           6.0000000000000000, -0.59999999999999998 },
5710   { 0.92673756761314952, 1.0000000000000000, 1.0000000000000000,
5711           6.0000000000000000, -0.50000000000000000 },
5712   { 0.93997926630123407, 1.0000000000000000, 1.0000000000000000,
5713           6.0000000000000000, -0.40000000000000002 },
5714   { 0.95385955885019291, 1.0000000000000000, 1.0000000000000000,
5715           6.0000000000000000, -0.30000000000000004 },
5716   { 0.96844012412988900, 1.0000000000000000, 1.0000000000000000,
5717           6.0000000000000000, -0.19999999999999996 },
5718   { 0.98379242268046208, 1.0000000000000000, 1.0000000000000000,
5719           6.0000000000000000, -0.099999999999999978 },
5720   { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
5721           6.0000000000000000, 0.0000000000000000 },
5722   { 1.0171615499181177, 1.0000000000000000, 1.0000000000000000,
5723           6.0000000000000000, 0.10000000000000009 },
5724   { 1.0353950776091037, 1.0000000000000000, 1.0000000000000000,
5725           6.0000000000000000, 0.19999999999999996 },
5726   { 1.0548437030651112, 1.0000000000000000, 1.0000000000000000,
5727           6.0000000000000000, 0.30000000000000004 },
5728   { 1.0756840039415978, 1.0000000000000000, 1.0000000000000000,
5729           6.0000000000000000, 0.39999999999999991 },
5730   { 1.0981384722661196, 1.0000000000000000, 1.0000000000000000,
5731           6.0000000000000000, 0.50000000000000000 },
5732   { 1.1224950318916129, 1.0000000000000000, 1.0000000000000000,
5733           6.0000000000000000, 0.60000000000000009 },
5734   { 1.1491396357184527, 1.0000000000000000, 1.0000000000000000,
5735           6.0000000000000000, 0.69999999999999996 },
5736   { 1.1786158344507012, 1.0000000000000000, 1.0000000000000000,
5737           6.0000000000000000, 0.80000000000000004 },
5738   { 1.2117500593515478, 1.0000000000000000, 1.0000000000000000,
5739           6.0000000000000000, 0.89999999999999991 },
5740 };
5741 
5742 // Test function for a=1.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
5743 template <typename Tp>
test083()5744 void test083()
5745 {
5746   const Tp eps = std::numeric_limits<Tp>::epsilon();
5747   Tp max_abs_diff = -Tp(1);
5748   Tp max_abs_frac = -Tp(1);
5749   unsigned int num_datum = sizeof(data083)
5750                          / sizeof(testcase_hyperg<double>);
5751   for (unsigned int i = 0; i < num_datum; ++i)
5752     {
5753       const Tp f = std::tr1::hyperg(Tp(data083[i].a), Tp(data083[i].b),
5754                    Tp(data083[i].c), Tp(data083[i].x));
5755       const Tp f0 = data083[i].f0;
5756       const Tp diff = f - f0;
5757       if (std::abs(diff) > max_abs_diff)
5758         max_abs_diff = std::abs(diff);
5759       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5760         {
5761           const Tp frac = diff / f0;
5762           if (std::abs(frac) > max_abs_frac)
5763             max_abs_frac = std::abs(frac);
5764         }
5765     }
5766   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5767 }
5768 
5769 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
5770 testcase_hyperg<double> data084[] = {
5771   { 0.90538259348578409, 1.0000000000000000, 1.0000000000000000,
5772           8.0000000000000000, -0.90000000000000002 },
5773   { 0.91444830598832050, 1.0000000000000000, 1.0000000000000000,
5774           8.0000000000000000, -0.80000000000000004 },
5775   { 0.92381915945974002, 1.0000000000000000, 1.0000000000000000,
5776           8.0000000000000000, -0.69999999999999996 },
5777   { 0.93351553488501815, 1.0000000000000000, 1.0000000000000000,
5778           8.0000000000000000, -0.59999999999999998 },
5779   { 0.94356001859234884, 1.0000000000000000, 1.0000000000000000,
5780           8.0000000000000000, -0.50000000000000000 },
5781   { 0.95397775039949584, 1.0000000000000000, 1.0000000000000000,
5782           8.0000000000000000, -0.40000000000000002 },
5783   { 0.96479684710618019, 1.0000000000000000, 1.0000000000000000,
5784           8.0000000000000000, -0.30000000000000004 },
5785   { 0.97604892281308531, 1.0000000000000000, 1.0000000000000000,
5786           8.0000000000000000, -0.19999999999999996 },
5787   { 0.98776973540356938, 1.0000000000000000, 1.0000000000000000,
5788           8.0000000000000000, -0.099999999999999978 },
5789   { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
5790           8.0000000000000000, 0.0000000000000000 },
5791   { 1.0127864273812119, 1.0000000000000000, 1.0000000000000000,
5792           8.0000000000000000, 0.10000000000000009 },
5793   { 1.0261830717772533, 1.0000000000000000, 1.0000000000000000,
5794           8.0000000000000000, 0.19999999999999996 },
5795   { 1.0402531144740719, 1.0000000000000000, 1.0000000000000000,
5796           8.0000000000000000, 0.30000000000000004 },
5797   { 1.0550712790827002, 1.0000000000000000, 1.0000000000000000,
5798           8.0000000000000000, 0.39999999999999991 },
5799   { 1.0707271945059007, 1.0000000000000000, 1.0000000000000000,
5800           8.0000000000000000, 0.50000000000000000 },
5801   { 1.0873302420658923, 1.0000000000000000, 1.0000000000000000,
5802           8.0000000000000000, 0.60000000000000009 },
5803   { 1.1050168587085545, 1.0000000000000000, 1.0000000000000000,
5804           8.0000000000000000, 0.69999999999999996 },
5805   { 1.1239622188477687, 1.0000000000000000, 1.0000000000000000,
5806           8.0000000000000000, 0.80000000000000004 },
5807   { 1.1444006183097781, 1.0000000000000000, 1.0000000000000000,
5808           8.0000000000000000, 0.89999999999999991 },
5809 };
5810 
5811 // Test function for a=1.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
5812 template <typename Tp>
test084()5813 void test084()
5814 {
5815   const Tp eps = std::numeric_limits<Tp>::epsilon();
5816   Tp max_abs_diff = -Tp(1);
5817   Tp max_abs_frac = -Tp(1);
5818   unsigned int num_datum = sizeof(data084)
5819                          / sizeof(testcase_hyperg<double>);
5820   for (unsigned int i = 0; i < num_datum; ++i)
5821     {
5822       const Tp f = std::tr1::hyperg(Tp(data084[i].a), Tp(data084[i].b),
5823                    Tp(data084[i].c), Tp(data084[i].x));
5824       const Tp f0 = data084[i].f0;
5825       const Tp diff = f - f0;
5826       if (std::abs(diff) > max_abs_diff)
5827         max_abs_diff = std::abs(diff);
5828       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5829         {
5830           const Tp frac = diff / f0;
5831           if (std::abs(frac) > max_abs_frac)
5832             max_abs_frac = std::abs(frac);
5833         }
5834     }
5835   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5836 }
5837 
5838 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
5839 testcase_hyperg<double> data085[] = {
5840   { 0.92211295632330403, 1.0000000000000000, 1.0000000000000000,
5841           10.000000000000000, -0.90000000000000002 },
5842   { 0.92975727737040659, 1.0000000000000000, 1.0000000000000000,
5843           10.000000000000000, -0.80000000000000004 },
5844   { 0.93761992348333467, 1.0000000000000000, 1.0000000000000000,
5845           10.000000000000000, -0.69999999999999996 },
5846   { 0.94571346180587801, 1.0000000000000000, 1.0000000000000000,
5847           10.000000000000000, -0.59999999999999998 },
5848   { 0.95405164371146867, 1.0000000000000000, 1.0000000000000000,
5849           10.000000000000000, -0.50000000000000000 },
5850   { 0.96264956879205954, 1.0000000000000000, 1.0000000000000000,
5851           10.000000000000000, -0.40000000000000002 },
5852   { 0.97152388013493096, 1.0000000000000000, 1.0000000000000000,
5853           10.000000000000000, -0.30000000000000004 },
5854   { 0.98069299877709348, 1.0000000000000000, 1.0000000000000000,
5855           10.000000000000000, -0.19999999999999996 },
5856   { 0.99017740778385854, 1.0000000000000000, 1.0000000000000000,
5857           10.000000000000000, -0.099999999999999978 },
5858   { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
5859           10.000000000000000, 0.0000000000000000 },
5860   { 1.0101865087004833, 1.0000000000000000, 1.0000000000000000,
5861           10.000000000000000, 0.10000000000000009 },
5862   { 1.0207660479892111, 1.0000000000000000, 1.0000000000000000,
5863           10.000000000000000, 0.19999999999999996 },
5864   { 1.0317718013185031, 1.0000000000000000, 1.0000000000000000,
5865           10.000000000000000, 0.30000000000000004 },
5866   { 1.0432419144892398, 1.0000000000000000, 1.0000000000000000,
5867           10.000000000000000, 0.39999999999999991 },
5868   { 1.0552206786504446, 1.0000000000000000, 1.0000000000000000,
5869           10.000000000000000, 0.50000000000000000 },
5870   { 1.0677601383233675, 1.0000000000000000, 1.0000000000000000,
5871           10.000000000000000, 0.60000000000000009 },
5872   { 1.0809223485579968, 1.0000000000000000, 1.0000000000000000,
5873           10.000000000000000, 0.69999999999999996 },
5874   { 1.0947826783002668, 1.0000000000000000, 1.0000000000000000,
5875           10.000000000000000, 0.80000000000000004 },
5876   { 1.1094349304493603, 1.0000000000000000, 1.0000000000000000,
5877           10.000000000000000, 0.89999999999999991 },
5878 };
5879 
5880 // Test function for a=1.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
5881 template <typename Tp>
test085()5882 void test085()
5883 {
5884   const Tp eps = std::numeric_limits<Tp>::epsilon();
5885   Tp max_abs_diff = -Tp(1);
5886   Tp max_abs_frac = -Tp(1);
5887   unsigned int num_datum = sizeof(data085)
5888                          / sizeof(testcase_hyperg<double>);
5889   for (unsigned int i = 0; i < num_datum; ++i)
5890     {
5891       const Tp f = std::tr1::hyperg(Tp(data085[i].a), Tp(data085[i].b),
5892                    Tp(data085[i].c), Tp(data085[i].x));
5893       const Tp f0 = data085[i].f0;
5894       const Tp diff = f - f0;
5895       if (std::abs(diff) > max_abs_diff)
5896         max_abs_diff = std::abs(diff);
5897       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5898         {
5899           const Tp frac = diff / f0;
5900           if (std::abs(frac) > max_abs_frac)
5901             max_abs_frac = std::abs(frac);
5902         }
5903     }
5904   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5905 }
5906 
5907 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
5908 testcase_hyperg<double> data086[] = {
5909   { 0.52631578947368429, 1.0000000000000000, 2.0000000000000000,
5910           2.0000000000000000, -0.90000000000000002 },
5911   { 0.55555555555555558, 1.0000000000000000, 2.0000000000000000,
5912           2.0000000000000000, -0.80000000000000004 },
5913   { 0.58823529411764708, 1.0000000000000000, 2.0000000000000000,
5914           2.0000000000000000, -0.69999999999999996 },
5915   { 0.62500000000000000, 1.0000000000000000, 2.0000000000000000,
5916           2.0000000000000000, -0.59999999999999998 },
5917   { 0.66666666666666663, 1.0000000000000000, 2.0000000000000000,
5918           2.0000000000000000, -0.50000000000000000 },
5919   { 0.71428571428571430, 1.0000000000000000, 2.0000000000000000,
5920           2.0000000000000000, -0.40000000000000002 },
5921   { 0.76923076923076927, 1.0000000000000000, 2.0000000000000000,
5922           2.0000000000000000, -0.30000000000000004 },
5923   { 0.83333333333333337, 1.0000000000000000, 2.0000000000000000,
5924           2.0000000000000000, -0.19999999999999996 },
5925   { 0.90909090909090906, 1.0000000000000000, 2.0000000000000000,
5926           2.0000000000000000, -0.099999999999999978 },
5927   { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
5928           2.0000000000000000, 0.0000000000000000 },
5929   { 1.1111111111111112, 1.0000000000000000, 2.0000000000000000,
5930           2.0000000000000000, 0.10000000000000009 },
5931   { 1.2500000000000000, 1.0000000000000000, 2.0000000000000000,
5932           2.0000000000000000, 0.19999999999999996 },
5933   { 1.4285714285714286, 1.0000000000000000, 2.0000000000000000,
5934           2.0000000000000000, 0.30000000000000004 },
5935   { 1.6666666666666663, 1.0000000000000000, 2.0000000000000000,
5936           2.0000000000000000, 0.39999999999999991 },
5937   { 2.0000000000000000, 1.0000000000000000, 2.0000000000000000,
5938           2.0000000000000000, 0.50000000000000000 },
5939   { 2.5000000000000004, 1.0000000000000000, 2.0000000000000000,
5940           2.0000000000000000, 0.60000000000000009 },
5941   { 3.3333333333333330, 1.0000000000000000, 2.0000000000000000,
5942           2.0000000000000000, 0.69999999999999996 },
5943   { 5.0000000000000009, 1.0000000000000000, 2.0000000000000000,
5944           2.0000000000000000, 0.80000000000000004 },
5945   { 9.9999999999999929, 1.0000000000000000, 2.0000000000000000,
5946           2.0000000000000000, 0.89999999999999991 },
5947 };
5948 
5949 // Test function for a=1.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
5950 template <typename Tp>
test086()5951 void test086()
5952 {
5953   const Tp eps = std::numeric_limits<Tp>::epsilon();
5954   Tp max_abs_diff = -Tp(1);
5955   Tp max_abs_frac = -Tp(1);
5956   unsigned int num_datum = sizeof(data086)
5957                          / sizeof(testcase_hyperg<double>);
5958   for (unsigned int i = 0; i < num_datum; ++i)
5959     {
5960       const Tp f = std::tr1::hyperg(Tp(data086[i].a), Tp(data086[i].b),
5961                    Tp(data086[i].c), Tp(data086[i].x));
5962       const Tp f0 = data086[i].f0;
5963       const Tp diff = f - f0;
5964       if (std::abs(diff) > max_abs_diff)
5965         max_abs_diff = std::abs(diff);
5966       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5967         {
5968           const Tp frac = diff / f0;
5969           if (std::abs(frac) > max_abs_frac)
5970             max_abs_frac = std::abs(frac);
5971         }
5972     }
5973   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5974 }
5975 
5976 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
5977 testcase_hyperg<double> data087[] = {
5978   { 0.70351947549341520, 1.0000000000000000, 2.0000000000000000,
5979           4.0000000000000000, -0.90000000000000002 },
5980   { 0.72637503722092711, 1.0000000000000000, 2.0000000000000000,
5981           4.0000000000000000, -0.80000000000000004 },
5982   { 0.75099661564391251, 1.0000000000000000, 2.0000000000000000,
5983           4.0000000000000000, -0.69999999999999996 },
5984   { 0.77761647796730871, 1.0000000000000000, 2.0000000000000000,
5985           4.0000000000000000, -0.59999999999999998 },
5986   { 0.80651221621216451, 1.0000000000000000, 2.0000000000000000,
5987           4.0000000000000000, -0.50000000000000000 },
5988   { 0.83801894346580275, 1.0000000000000000, 2.0000000000000000,
5989           4.0000000000000000, -0.40000000000000002 },
5990   { 0.87254582050258467, 1.0000000000000000, 2.0000000000000000,
5991           4.0000000000000000, -0.30000000000000004 },
5992   { 0.91059888544083678, 1.0000000000000000, 2.0000000000000000,
5993           4.0000000000000000, -0.19999999999999996 },
5994   { 0.95281329145592386, 1.0000000000000000, 2.0000000000000000,
5995           4.0000000000000000, -0.099999999999999978 },
5996   { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
5997           4.0000000000000000, 0.0000000000000000 },
5998   { 1.0532154477379738, 1.0000000000000000, 2.0000000000000000,
5999           4.0000000000000000, 0.10000000000000009 },
6000   { 1.1138692114741471, 1.0000000000000000, 2.0000000000000000,
6001           4.0000000000000000, 0.19999999999999996 },
6002   { 1.1838976095305187, 1.0000000000000000, 2.0000000000000000,
6003           4.0000000000000000, 0.30000000000000004 },
6004   { 1.2660586631630237, 1.0000000000000000, 2.0000000000000000,
6005           4.0000000000000000, 0.39999999999999991 },
6006   { 1.3644676665613118, 1.0000000000000000, 2.0000000000000000,
6007           4.0000000000000000, 0.50000000000000000 },
6008   { 1.4856585347316102, 1.0000000000000000, 2.0000000000000000,
6009           4.0000000000000000, 0.60000000000000009 },
6010   { 1.6409590443536872, 1.0000000000000000, 2.0000000000000000,
6011           4.0000000000000000, 0.69999999999999996 },
6012   { 1.8528798927325769, 1.0000000000000000, 2.0000000000000000,
6013           4.0000000000000000, 0.80000000000000004 },
6014   { 2.1789423102929644, 1.0000000000000000, 2.0000000000000000,
6015           4.0000000000000000, 0.89999999999999991 },
6016 };
6017 
6018 // Test function for a=1.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
6019 template <typename Tp>
test087()6020 void test087()
6021 {
6022   const Tp eps = std::numeric_limits<Tp>::epsilon();
6023   Tp max_abs_diff = -Tp(1);
6024   Tp max_abs_frac = -Tp(1);
6025   unsigned int num_datum = sizeof(data087)
6026                          / sizeof(testcase_hyperg<double>);
6027   for (unsigned int i = 0; i < num_datum; ++i)
6028     {
6029       const Tp f = std::tr1::hyperg(Tp(data087[i].a), Tp(data087[i].b),
6030                    Tp(data087[i].c), Tp(data087[i].x));
6031       const Tp f0 = data087[i].f0;
6032       const Tp diff = f - f0;
6033       if (std::abs(diff) > max_abs_diff)
6034         max_abs_diff = std::abs(diff);
6035       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6036         {
6037           const Tp frac = diff / f0;
6038           if (std::abs(frac) > max_abs_frac)
6039             max_abs_frac = std::abs(frac);
6040         }
6041     }
6042   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6043 }
6044 
6045 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
6046 testcase_hyperg<double> data088[] = {
6047   { 0.78068027379106253, 1.0000000000000000, 2.0000000000000000,
6048           6.0000000000000000, -0.90000000000000002 },
6049   { 0.79924541976981278, 1.0000000000000000, 2.0000000000000000,
6050           6.0000000000000000, -0.80000000000000004 },
6051   { 0.81891305585650942, 1.0000000000000000, 2.0000000000000000,
6052           6.0000000000000000, -0.69999999999999996 },
6053   { 0.83979799626213270, 1.0000000000000000, 2.0000000000000000,
6054           6.0000000000000000, -0.59999999999999998 },
6055   { 0.86203315303160166, 1.0000000000000000, 2.0000000000000000,
6056           6.0000000000000000, -0.50000000000000000 },
6057   { 0.88577352485361693, 1.0000000000000000, 2.0000000000000000,
6058           6.0000000000000000, -0.40000000000000002 },
6059   { 0.91120135738402208, 1.0000000000000000, 2.0000000000000000,
6060           6.0000000000000000, -0.30000000000000004 },
6061   { 0.93853291956703588, 1.0000000000000000, 2.0000000000000000,
6062           6.0000000000000000, -0.19999999999999996 },
6063   { 0.96802755388922956, 1.0000000000000000, 2.0000000000000000,
6064           6.0000000000000000, -0.099999999999999978 },
6065   { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
6066           6.0000000000000000, 0.0000000000000000 },
6067   { 1.0348375559194773, 1.0000000000000000, 2.0000000000000000,
6068           6.0000000000000000, 0.10000000000000009 },
6069   { 1.0730246119544820, 1.0000000000000000, 2.0000000000000000,
6070           6.0000000000000000, 0.19999999999999996 },
6071   { 1.1151788396279341, 1.0000000000000000, 2.0000000000000000,
6072           6.0000000000000000, 0.30000000000000004 },
6073   { 1.1621066403893472, 1.0000000000000000, 2.0000000000000000,
6074           6.0000000000000000, 0.39999999999999991 },
6075   { 1.2148922218710421, 1.0000000000000000, 2.0000000000000000,
6076           6.0000000000000000, 0.50000000000000000 },
6077   { 1.2750496810838674, 1.0000000000000000, 2.0000000000000000,
6078           6.0000000000000000, 0.60000000000000009 },
6079   { 1.3448048570872917, 1.0000000000000000, 2.0000000000000000,
6080           6.0000000000000000, 0.69999999999999996 },
6081   { 1.4276833109859521, 1.0000000000000000, 2.0000000000000000,
6082           6.0000000000000000, 0.80000000000000004 },
6083   { 1.5299976259379788, 1.0000000000000000, 2.0000000000000000,
6084           6.0000000000000000, 0.89999999999999991 },
6085 };
6086 
6087 // Test function for a=1.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
6088 template <typename Tp>
test088()6089 void test088()
6090 {
6091   const Tp eps = std::numeric_limits<Tp>::epsilon();
6092   Tp max_abs_diff = -Tp(1);
6093   Tp max_abs_frac = -Tp(1);
6094   unsigned int num_datum = sizeof(data088)
6095                          / sizeof(testcase_hyperg<double>);
6096   for (unsigned int i = 0; i < num_datum; ++i)
6097     {
6098       const Tp f = std::tr1::hyperg(Tp(data088[i].a), Tp(data088[i].b),
6099                    Tp(data088[i].c), Tp(data088[i].x));
6100       const Tp f0 = data088[i].f0;
6101       const Tp diff = f - f0;
6102       if (std::abs(diff) > max_abs_diff)
6103         max_abs_diff = std::abs(diff);
6104       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6105         {
6106           const Tp frac = diff / f0;
6107           if (std::abs(frac) > max_abs_frac)
6108             max_abs_frac = std::abs(frac);
6109         }
6110     }
6111   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6112 }
6113 
6114 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
6115 testcase_hyperg<double> data089[] = {
6116   { 0.82510759951857582, 1.0000000000000000, 2.0000000000000000,
6117           8.0000000000000000, -0.90000000000000002 },
6118   { 0.84072786892782092, 1.0000000000000000, 2.0000000000000000,
6119           8.0000000000000000, -0.80000000000000004 },
6120   { 0.85710884896562356, 1.0000000000000000, 2.0000000000000000,
6121           8.0000000000000000, -0.69999999999999996 },
6122   { 0.87431674418118333, 1.0000000000000000, 2.0000000000000000,
6123           8.0000000000000000, -0.59999999999999998 },
6124   { 0.89242659229727017, 1.0000000000000000, 2.0000000000000000,
6125           8.0000000000000000, -0.50000000000000000 },
6126   { 0.91152392685930339, 1.0000000000000000, 2.0000000000000000,
6127           8.0000000000000000, -0.40000000000000002 },
6128   { 0.93170685950993570, 1.0000000000000000, 2.0000000000000000,
6129           8.0000000000000000, -0.30000000000000004 },
6130   { 0.95308871926790661, 1.0000000000000000, 2.0000000000000000,
6131           8.0000000000000000, -0.19999999999999996 },
6132   { 0.97580144325325802, 1.0000000000000000, 2.0000000000000000,
6133           8.0000000000000000, -0.099999999999999978 },
6134   { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
6135           8.0000000000000000, 0.0000000000000000 },
6136   { 1.0258682619030324, 1.0000000000000000, 2.0000000000000000,
6137           8.0000000000000000, 0.10000000000000009 },
6138   { 1.0536269616706000, 1.0000000000000000, 2.0000000000000000,
6139           8.0000000000000000, 0.19999999999999996 },
6140   { 1.0835447330793833, 1.0000000000000000, 2.0000000000000000,
6141           8.0000000000000000, 0.30000000000000004 },
6142   { 1.1159538758396654, 1.0000000000000000, 2.0000000000000000,
6143           8.0000000000000000, 0.39999999999999991 },
6144   { 1.1512736659291880, 1.0000000000000000, 2.0000000000000000,
6145           8.0000000000000000, 0.50000000000000000 },
6146   { 1.1900463690116090, 1.0000000000000000, 2.0000000000000000,
6147           8.0000000000000000, 0.60000000000000009 },
6148   { 1.2329961591622411, 1.0000000000000000, 2.0000000000000000,
6149           8.0000000000000000, 0.69999999999999996 },
6150   { 1.2811334345669059, 1.0000000000000000, 2.0000000000000000,
6151           8.0000000000000000, 0.80000000000000004 },
6152   { 1.3359629014132051, 1.0000000000000000, 2.0000000000000000,
6153           8.0000000000000000, 0.89999999999999991 },
6154 };
6155 
6156 // Test function for a=1.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
6157 template <typename Tp>
test089()6158 void test089()
6159 {
6160   const Tp eps = std::numeric_limits<Tp>::epsilon();
6161   Tp max_abs_diff = -Tp(1);
6162   Tp max_abs_frac = -Tp(1);
6163   unsigned int num_datum = sizeof(data089)
6164                          / sizeof(testcase_hyperg<double>);
6165   for (unsigned int i = 0; i < num_datum; ++i)
6166     {
6167       const Tp f = std::tr1::hyperg(Tp(data089[i].a), Tp(data089[i].b),
6168                    Tp(data089[i].c), Tp(data089[i].x));
6169       const Tp f0 = data089[i].f0;
6170       const Tp diff = f - f0;
6171       if (std::abs(diff) > max_abs_diff)
6172         max_abs_diff = std::abs(diff);
6173       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6174         {
6175           const Tp frac = diff / f0;
6176           if (std::abs(frac) > max_abs_frac)
6177             max_abs_frac = std::abs(frac);
6178         }
6179     }
6180   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6181 }
6182 
6183 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
6184 testcase_hyperg<double> data090[] = {
6185   { 0.85426123653345876, 1.0000000000000000, 2.0000000000000000,
6186           10.000000000000000, -0.90000000000000002 },
6187   { 0.86774543390930370, 1.0000000000000000, 2.0000000000000000,
6188           10.000000000000000, -0.80000000000000004 },
6189   { 0.88178859537254239, 1.0000000000000000, 2.0000000000000000,
6190           10.000000000000000, -0.69999999999999996 },
6191   { 0.89643269097060951, 1.0000000000000000, 2.0000000000000000,
6192           10.000000000000000, -0.59999999999999998 },
6193   { 0.91172456687216763, 1.0000000000000000, 2.0000000000000000,
6194           10.000000000000000, -0.50000000000000000 },
6195   { 0.92771674975966134, 1.0000000000000000, 2.0000000000000000,
6196           10.000000000000000, -0.40000000000000002 },
6197   { 0.94446842993888647, 1.0000000000000000, 2.0000000000000000,
6198           10.000000000000000, -0.30000000000000004 },
6199   { 0.96204667481937678, 1.0000000000000000, 2.0000000000000000,
6200           10.000000000000000, -0.19999999999999996 },
6201   { 0.98052794339012128, 1.0000000000000000, 2.0000000000000000,
6202           10.000000000000000, -0.099999999999999978 },
6203   { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
6204           10.000000000000000, 0.0000000000000000 },
6205   { 1.0205643671068179, 1.0000000000000000, 2.0000000000000000,
6206           10.000000000000000, 0.10000000000000009 },
6207   { 1.0423395201078882, 1.0000000000000000, 2.0000000000000000,
6208           10.000000000000000, 0.19999999999999996 },
6209   { 1.0654651277885334, 1.0000000000000000, 2.0000000000000000,
6210           10.000000000000000, 0.30000000000000004 },
6211   { 1.0901078068101382, 1.0000000000000000, 2.0000000000000000,
6212           10.000000000000000, 0.39999999999999991 },
6213   { 1.1164691415928940, 1.0000000000000000, 2.0000000000000000,
6214           10.000000000000000, 0.50000000000000000 },
6215   { 1.1447972335326551, 1.0000000000000000, 2.0000000000000000,
6216           10.000000000000000, 0.60000000000000009 },
6217   { 1.1754040384534161, 1.0000000000000000, 2.0000000000000000,
6218           10.000000000000000, 0.69999999999999996 },
6219   { 1.2086928679893112, 1.0000000000000000, 2.0000000000000000,
6220           10.000000000000000, 0.80000000000000004 },
6221   { 1.2452055640510711, 1.0000000000000000, 2.0000000000000000,
6222           10.000000000000000, 0.89999999999999991 },
6223 };
6224 
6225 // Test function for a=1.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
6226 template <typename Tp>
test090()6227 void test090()
6228 {
6229   const Tp eps = std::numeric_limits<Tp>::epsilon();
6230   Tp max_abs_diff = -Tp(1);
6231   Tp max_abs_frac = -Tp(1);
6232   unsigned int num_datum = sizeof(data090)
6233                          / sizeof(testcase_hyperg<double>);
6234   for (unsigned int i = 0; i < num_datum; ++i)
6235     {
6236       const Tp f = std::tr1::hyperg(Tp(data090[i].a), Tp(data090[i].b),
6237                    Tp(data090[i].c), Tp(data090[i].x));
6238       const Tp f0 = data090[i].f0;
6239       const Tp diff = f - f0;
6240       if (std::abs(diff) > max_abs_diff)
6241         max_abs_diff = std::abs(diff);
6242       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6243         {
6244           const Tp frac = diff / f0;
6245           if (std::abs(frac) > max_abs_frac)
6246             max_abs_frac = std::abs(frac);
6247         }
6248     }
6249   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6250 }
6251 
6252 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
6253 testcase_hyperg<double> data091[] = {
6254   { 0.25646288779245091, 1.0000000000000000, 5.0000000000000000,
6255           2.0000000000000000, -0.90000000000000002 },
6256   { 0.28273129096174382, 1.0000000000000000, 5.0000000000000000,
6257           2.0000000000000000, -0.80000000000000004 },
6258   { 0.31438201170962976, 1.0000000000000000, 5.0000000000000000,
6259           2.0000000000000000, -0.69999999999999996 },
6260   { 0.35308837890625017, 1.0000000000000000, 5.0000000000000000,
6261           2.0000000000000000, -0.59999999999999998 },
6262   { 0.40123456790123463, 1.0000000000000000, 5.0000000000000000,
6263           2.0000000000000000, -0.50000000000000000 },
6264   { 0.46230737192836319, 1.0000000000000000, 5.0000000000000000,
6265           2.0000000000000000, -0.40000000000000002 },
6266   { 0.54156016946185359, 1.0000000000000000, 5.0000000000000000,
6267           2.0000000000000000, -0.30000000000000004 },
6268   { 0.64718364197530875, 1.0000000000000000, 5.0000000000000000,
6269           2.0000000000000000, -0.19999999999999996 },
6270   { 0.79246636158732342, 1.0000000000000000, 5.0000000000000000,
6271           2.0000000000000000, -0.099999999999999978 },
6272   { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
6273           2.0000000000000000, 0.0000000000000000 },
6274   { 1.3103947568968148, 1.0000000000000000, 5.0000000000000000,
6275           2.0000000000000000, 0.10000000000000009 },
6276   { 1.8017578125000004, 1.0000000000000000, 5.0000000000000000,
6277           2.0000000000000000, 0.19999999999999996 },
6278   { 2.6374427321949185, 1.0000000000000000, 5.0000000000000000,
6279           2.0000000000000000, 0.30000000000000004 },
6280   { 4.1975308641975282, 1.0000000000000000, 5.0000000000000000,
6281           2.0000000000000000, 0.39999999999999991 },
6282   { 7.4999999999999964, 1.0000000000000000, 5.0000000000000000,
6283           2.0000000000000000, 0.50000000000000000 },
6284   { 15.859375000000012, 1.0000000000000000, 5.0000000000000000,
6285           2.0000000000000000, 0.60000000000000009 },
6286   { 43.734567901234513, 1.0000000000000000, 5.0000000000000000,
6287           2.0000000000000000, 0.69999999999999996 },
6288   { 194.99999999999994, 1.0000000000000000, 5.0000000000000000,
6289           2.0000000000000000, 0.80000000000000004 },
6290   { 2777.4999999999832, 1.0000000000000000, 5.0000000000000000,
6291           2.0000000000000000, 0.89999999999999991 },
6292 };
6293 
6294 // Test function for a=1.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
6295 template <typename Tp>
test091()6296 void test091()
6297 {
6298   const Tp eps = std::numeric_limits<Tp>::epsilon();
6299   Tp max_abs_diff = -Tp(1);
6300   Tp max_abs_frac = -Tp(1);
6301   unsigned int num_datum = sizeof(data091)
6302                          / sizeof(testcase_hyperg<double>);
6303   for (unsigned int i = 0; i < num_datum; ++i)
6304     {
6305       const Tp f = std::tr1::hyperg(Tp(data091[i].a), Tp(data091[i].b),
6306                    Tp(data091[i].c), Tp(data091[i].x));
6307       const Tp f0 = data091[i].f0;
6308       const Tp diff = f - f0;
6309       if (std::abs(diff) > max_abs_diff)
6310         max_abs_diff = std::abs(diff);
6311       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6312         {
6313           const Tp frac = diff / f0;
6314           if (std::abs(frac) > max_abs_frac)
6315             max_abs_frac = std::abs(frac);
6316         }
6317     }
6318   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6319 }
6320 
6321 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
6322 testcase_hyperg<double> data092[] = {
6323   { 0.46398891966759004, 1.0000000000000000, 5.0000000000000000,
6324           4.0000000000000000, -0.90000000000000002 },
6325   { 0.49382716049382713, 1.0000000000000000, 5.0000000000000000,
6326           4.0000000000000000, -0.80000000000000004 },
6327   { 0.52768166089965396, 1.0000000000000000, 5.0000000000000000,
6328           4.0000000000000000, -0.69999999999999996 },
6329   { 0.56640624999999978, 1.0000000000000000, 5.0000000000000000,
6330           4.0000000000000000, -0.59999999999999998 },
6331   { 0.61111111111111116, 1.0000000000000000, 5.0000000000000000,
6332           4.0000000000000000, -0.50000000000000000 },
6333   { 0.66326530612244894, 1.0000000000000000, 5.0000000000000000,
6334           4.0000000000000000, -0.40000000000000002 },
6335   { 0.72485207100591698, 1.0000000000000000, 5.0000000000000000,
6336           4.0000000000000000, -0.30000000000000004 },
6337   { 0.79861111111111094, 1.0000000000000000, 5.0000000000000000,
6338           4.0000000000000000, -0.19999999999999996 },
6339   { 0.88842975206611552, 1.0000000000000000, 5.0000000000000000,
6340           4.0000000000000000, -0.099999999999999978 },
6341   { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
6342           4.0000000000000000, 0.0000000000000000 },
6343   { 1.1419753086419753, 1.0000000000000000, 5.0000000000000000,
6344           4.0000000000000000, 0.10000000000000009 },
6345   { 1.3281249999999998, 1.0000000000000000, 5.0000000000000000,
6346           4.0000000000000000, 0.19999999999999996 },
6347   { 1.5816326530612239, 1.0000000000000000, 5.0000000000000000,
6348           4.0000000000000000, 0.30000000000000004 },
6349   { 1.9444444444444444, 1.0000000000000000, 5.0000000000000000,
6350           4.0000000000000000, 0.39999999999999991 },
6351   { 2.5000000000000000, 1.0000000000000000, 5.0000000000000000,
6352           4.0000000000000000, 0.50000000000000000 },
6353   { 3.4374999999999996, 1.0000000000000000, 5.0000000000000000,
6354           4.0000000000000000, 0.60000000000000009 },
6355   { 5.2777777777777715, 1.0000000000000000, 5.0000000000000000,
6356           4.0000000000000000, 0.69999999999999996 },
6357   { 9.9999999999999947, 1.0000000000000000, 5.0000000000000000,
6358           4.0000000000000000, 0.80000000000000004 },
6359   { 32.499999999999837, 1.0000000000000000, 5.0000000000000000,
6360           4.0000000000000000, 0.89999999999999991 },
6361 };
6362 
6363 // Test function for a=1.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
6364 template <typename Tp>
test092()6365 void test092()
6366 {
6367   const Tp eps = std::numeric_limits<Tp>::epsilon();
6368   Tp max_abs_diff = -Tp(1);
6369   Tp max_abs_frac = -Tp(1);
6370   unsigned int num_datum = sizeof(data092)
6371                          / sizeof(testcase_hyperg<double>);
6372   for (unsigned int i = 0; i < num_datum; ++i)
6373     {
6374       const Tp f = std::tr1::hyperg(Tp(data092[i].a), Tp(data092[i].b),
6375                    Tp(data092[i].c), Tp(data092[i].x));
6376       const Tp f0 = data092[i].f0;
6377       const Tp diff = f - f0;
6378       if (std::abs(diff) > max_abs_diff)
6379         max_abs_diff = std::abs(diff);
6380       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6381         {
6382           const Tp frac = diff / f0;
6383           if (std::abs(frac) > max_abs_frac)
6384             max_abs_frac = std::abs(frac);
6385         }
6386     }
6387   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6388 }
6389 
6390 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
6391 testcase_hyperg<double> data093[] = {
6392   { 0.57476744883397501, 1.0000000000000000, 5.0000000000000000,
6393           6.0000000000000000, -0.90000000000000002 },
6394   { 0.60302731682513933, 1.0000000000000000, 5.0000000000000000,
6395           6.0000000000000000, -0.80000000000000004 },
6396   { 0.63425708719096396, 1.0000000000000000, 5.0000000000000000,
6397           6.0000000000000000, -0.69999999999999996 },
6398   { 0.66895764182970419, 1.0000000000000000, 5.0000000000000000,
6399           6.0000000000000000, -0.59999999999999998 },
6400   { 0.70775063063963428, 1.0000000000000000, 5.0000000000000000,
6401           6.0000000000000000, -0.50000000000000000 },
6402   { 0.75141762103495924, 1.0000000000000000, 5.0000000000000000,
6403           6.0000000000000000, -0.40000000000000002 },
6404   { 0.80095569442603298, 1.0000000000000000, 5.0000000000000000,
6405           6.0000000000000000, -0.30000000000000004 },
6406   { 0.85765823887436754, 1.0000000000000000, 5.0000000000000000,
6407           6.0000000000000000, -0.19999999999999996 },
6408   { 0.92323549576335540, 1.0000000000000000, 5.0000000000000000,
6409           6.0000000000000000, -0.099999999999999978 },
6410   { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
6411           6.0000000000000000, 0.0000000000000000 },
6412   { 1.0911622464839472, 1.0000000000000000, 5.0000000000000000,
6413           6.0000000000000000, 0.10000000000000009 },
6414   { 1.2013226178607666, 1.0000000000000000, 5.0000000000000000,
6415           6.0000000000000000, 0.19999999999999996 },
6416   { 1.3373332072682687, 1.0000000000000000, 5.0000000000000000,
6417           6.0000000000000000, 0.30000000000000004 },
6418   { 1.5099074378209716, 1.0000000000000000, 5.0000000000000000,
6419           6.0000000000000000, 0.39999999999999991 },
6420   { 1.7368822229245819, 1.0000000000000000, 5.0000000000000000,
6421           6.0000000000000000, 0.50000000000000000 },
6422   { 2.0505871832661429, 1.0000000000000000, 5.0000000000000000,
6423           6.0000000000000000, 0.60000000000000009 },
6424   { 2.5172389775867967, 1.0000000000000000, 5.0000000000000000,
6425           6.0000000000000000, 0.69999999999999996 },
6426   { 3.3015631983556144, 1.0000000000000000, 5.0000000000000000,
6427           6.0000000000000000, 0.80000000000000004 },
6428   { 5.0005935155044519, 1.0000000000000000, 5.0000000000000000,
6429           6.0000000000000000, 0.89999999999999991 },
6430 };
6431 
6432 // Test function for a=1.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
6433 template <typename Tp>
test093()6434 void test093()
6435 {
6436   const Tp eps = std::numeric_limits<Tp>::epsilon();
6437   Tp max_abs_diff = -Tp(1);
6438   Tp max_abs_frac = -Tp(1);
6439   unsigned int num_datum = sizeof(data093)
6440                          / sizeof(testcase_hyperg<double>);
6441   for (unsigned int i = 0; i < num_datum; ++i)
6442     {
6443       const Tp f = std::tr1::hyperg(Tp(data093[i].a), Tp(data093[i].b),
6444                    Tp(data093[i].c), Tp(data093[i].x));
6445       const Tp f0 = data093[i].f0;
6446       const Tp diff = f - f0;
6447       if (std::abs(diff) > max_abs_diff)
6448         max_abs_diff = std::abs(diff);
6449       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6450         {
6451           const Tp frac = diff / f0;
6452           if (std::abs(frac) > max_abs_frac)
6453             max_abs_frac = std::abs(frac);
6454         }
6455     }
6456   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6457 }
6458 
6459 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
6460 testcase_hyperg<double> data094[] = {
6461   { 0.64582752605387961, 1.0000000000000000, 5.0000000000000000,
6462           8.0000000000000000, -0.90000000000000002 },
6463   { 0.67184161997264169, 1.0000000000000000, 5.0000000000000000,
6464           8.0000000000000000, -0.80000000000000004 },
6465   { 0.70012779922368040, 1.0000000000000000, 5.0000000000000000,
6466           8.0000000000000000, -0.69999999999999996 },
6467   { 0.73100784656910256, 1.0000000000000000, 5.0000000000000000,
6468           8.0000000000000000, -0.59999999999999998 },
6469   { 0.76486919089091077, 1.0000000000000000, 5.0000000000000000,
6470           8.0000000000000000, -0.50000000000000000 },
6471   { 0.80218301124334579, 1.0000000000000000, 5.0000000000000000,
6472           8.0000000000000000, -0.40000000000000002 },
6473   { 0.84352883533234446, 1.0000000000000000, 5.0000000000000000,
6474           8.0000000000000000, -0.30000000000000004 },
6475   { 0.88962858902212572, 1.0000000000000000, 5.0000000000000000,
6476           8.0000000000000000, -0.19999999999999996 },
6477   { 0.94139473468584123, 1.0000000000000000, 5.0000000000000000,
6478           8.0000000000000000, -0.099999999999999978 },
6479   { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
6480           8.0000000000000000, 0.0000000000000000 },
6481   { 1.0669812691939897, 1.0000000000000000, 5.0000000000000000,
6482           8.0000000000000000, 0.10000000000000009 },
6483   { 1.1443996012177726, 1.0000000000000000, 5.0000000000000000,
6484           8.0000000000000000, 0.19999999999999996 },
6485   { 1.2350966976721314, 1.0000000000000000, 5.0000000000000000,
6486           8.0000000000000000, 0.30000000000000004 },
6487   { 1.3431264370409088, 1.0000000000000000, 5.0000000000000000,
6488           8.0000000000000000, 0.39999999999999991 },
6489   { 1.4745266814162399, 1.0000000000000000, 5.0000000000000000,
6490           8.0000000000000000, 0.50000000000000000 },
6491   { 1.6388137104840066, 1.0000000000000000, 5.0000000000000000,
6492           8.0000000000000000, 0.60000000000000009 },
6493   { 1.8522074849776518, 1.0000000000000000, 5.0000000000000000,
6494           8.0000000000000000, 0.69999999999999996 },
6495   { 2.1458016978417458, 1.0000000000000000, 5.0000000000000000,
6496           8.0000000000000000, 0.80000000000000004 },
6497   { 2.5927464669826339, 1.0000000000000000, 5.0000000000000000,
6498           8.0000000000000000, 0.89999999999999991 },
6499 };
6500 
6501 // Test function for a=1.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
6502 template <typename Tp>
test094()6503 void test094()
6504 {
6505   const Tp eps = std::numeric_limits<Tp>::epsilon();
6506   Tp max_abs_diff = -Tp(1);
6507   Tp max_abs_frac = -Tp(1);
6508   unsigned int num_datum = sizeof(data094)
6509                          / sizeof(testcase_hyperg<double>);
6510   for (unsigned int i = 0; i < num_datum; ++i)
6511     {
6512       const Tp f = std::tr1::hyperg(Tp(data094[i].a), Tp(data094[i].b),
6513                    Tp(data094[i].c), Tp(data094[i].x));
6514       const Tp f0 = data094[i].f0;
6515       const Tp diff = f - f0;
6516       if (std::abs(diff) > max_abs_diff)
6517         max_abs_diff = std::abs(diff);
6518       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6519         {
6520           const Tp frac = diff / f0;
6521           if (std::abs(frac) > max_abs_frac)
6522             max_abs_frac = std::abs(frac);
6523         }
6524     }
6525   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6526 }
6527 
6528 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
6529 testcase_hyperg<double> data095[] = {
6530   { 0.69583236336670629, 1.0000000000000000, 5.0000000000000000,
6531           10.000000000000000, -0.90000000000000002 },
6532   { 0.71968920666899694, 1.0000000000000000, 5.0000000000000000,
6533           10.000000000000000, -0.80000000000000004 },
6534   { 0.74533885416044232, 1.0000000000000000, 5.0000000000000000,
6535           10.000000000000000, -0.69999999999999996 },
6536   { 0.77300145361503014, 1.0000000000000000, 5.0000000000000000,
6537           10.000000000000000, -0.59999999999999998 },
6538   { 0.80293630810919514, 1.0000000000000000, 5.0000000000000000,
6539           10.000000000000000, -0.50000000000000000 },
6540   { 0.83545132638592035, 1.0000000000000000, 5.0000000000000000,
6541           10.000000000000000, -0.40000000000000002 },
6542   { 0.87091544744412508, 1.0000000000000000, 5.0000000000000000,
6543           10.000000000000000, -0.30000000000000004 },
6544   { 0.90977522877919847, 1.0000000000000000, 5.0000000000000000,
6545           10.000000000000000, -0.19999999999999996 },
6546   { 0.95257738192069130, 1.0000000000000000, 5.0000000000000000,
6547           10.000000000000000, -0.099999999999999978 },
6548   { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
6549           10.000000000000000, 0.0000000000000000 },
6550   { 1.0528968282789379, 1.0000000000000000, 5.0000000000000000,
6551           10.000000000000000, 0.10000000000000009 },
6552   { 1.1123617169062123, 1.0000000000000000, 5.0000000000000000,
6553           10.000000000000000, 0.19999999999999996 },
6554   { 1.1798254572896132, 1.0000000000000000, 5.0000000000000000,
6555           10.000000000000000, 0.30000000000000004 },
6556   { 1.2572069000522696, 1.0000000000000000, 5.0000000000000000,
6557           10.000000000000000, 0.39999999999999991 },
6558   { 1.3471600884974377, 1.0000000000000000, 5.0000000000000000,
6559           10.000000000000000, 0.50000000000000000 },
6560   { 1.4535032279573519, 1.0000000000000000, 5.0000000000000000,
6561           10.000000000000000, 0.60000000000000009 },
6562   { 1.5820245752814948, 1.0000000000000000, 5.0000000000000000,
6563           10.000000000000000, 0.69999999999999996 },
6564   { 1.7421756366906538, 1.0000000000000000, 5.0000000000000000,
6565           10.000000000000000, 0.80000000000000004 },
6566   { 1.9513145531098233, 1.0000000000000000, 5.0000000000000000,
6567           10.000000000000000, 0.89999999999999991 },
6568 };
6569 
6570 // Test function for a=1.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
6571 template <typename Tp>
test095()6572 void test095()
6573 {
6574   const Tp eps = std::numeric_limits<Tp>::epsilon();
6575   Tp max_abs_diff = -Tp(1);
6576   Tp max_abs_frac = -Tp(1);
6577   unsigned int num_datum = sizeof(data095)
6578                          / sizeof(testcase_hyperg<double>);
6579   for (unsigned int i = 0; i < num_datum; ++i)
6580     {
6581       const Tp f = std::tr1::hyperg(Tp(data095[i].a), Tp(data095[i].b),
6582                    Tp(data095[i].c), Tp(data095[i].x));
6583       const Tp f0 = data095[i].f0;
6584       const Tp diff = f - f0;
6585       if (std::abs(diff) > max_abs_diff)
6586         max_abs_diff = std::abs(diff);
6587       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6588         {
6589           const Tp frac = diff / f0;
6590           if (std::abs(frac) > max_abs_frac)
6591             max_abs_frac = std::abs(frac);
6592         }
6593     }
6594   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6595 }
6596 
6597 // Test data for a=1.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
6598 testcase_hyperg<double> data096[] = {
6599   { 0.12307420104127871, 1.0000000000000000, 10.000000000000000,
6600           2.0000000000000000, -0.90000000000000002 },
6601   { 0.13818870041457423, 1.0000000000000000, 10.000000000000000,
6602           2.0000000000000000, -0.80000000000000004 },
6603   { 0.15739165631811691, 1.0000000000000000, 10.000000000000000,
6604           2.0000000000000000, -0.69999999999999996 },
6605   { 0.18249038606882068, 1.0000000000000000, 10.000000000000000,
6606           2.0000000000000000, -0.59999999999999998 },
6607   { 0.21644171225027786, 1.0000000000000000, 10.000000000000000,
6608           2.0000000000000000, -0.50000000000000000 },
6609   { 0.26433326159804160, 1.0000000000000000, 10.000000000000000,
6610           2.0000000000000000, -0.40000000000000002 },
6611   { 0.33544459430654533, 1.0000000000000000, 10.000000000000000,
6612           2.0000000000000000, -0.30000000000000004 },
6613   { 0.44788516696232517, 1.0000000000000000, 10.000000000000000,
6614           2.0000000000000000, -0.19999999999999996 },
6615   { 0.63989153514168362, 1.0000000000000000, 10.000000000000000,
6616           2.0000000000000000, -0.099999999999999978 },
6617   { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
6618           2.0000000000000000, 0.0000000000000000 },
6619   { 1.7568608796813312, 1.0000000000000000, 10.000000000000000,
6620           2.0000000000000000, 0.10000000000000009 },
6621   { 3.5836558871799027, 1.0000000000000000, 10.000000000000000,
6622           2.0000000000000000, 0.19999999999999996 },
6623   { 8.8077526749963226, 1.0000000000000000, 10.000000000000000,
6624           2.0000000000000000, 0.30000000000000004 },
6625   { 27.285841702089190, 1.0000000000000000, 10.000000000000000,
6626           2.0000000000000000, 0.39999999999999991 },
6627   { 113.55555555555557, 1.0000000000000000, 10.000000000000000,
6628           2.0000000000000000, 0.50000000000000000 },
6629   { 706.24023437500091, 1.0000000000000000, 10.000000000000000,
6630           2.0000000000000000, 0.60000000000000009 },
6631   { 8064.1687976651992, 1.0000000000000000, 10.000000000000000,
6632           2.0000000000000000, 0.69999999999999996 },
6633   { 271267.22222222196, 1.0000000000000000, 10.000000000000000,
6634           2.0000000000000000, 0.80000000000000004 },
6635   { 123456789.99999890, 1.0000000000000000, 10.000000000000000,
6636           2.0000000000000000, 0.89999999999999991 },
6637 };
6638 
6639 // Test function for a=1.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
6640 template <typename Tp>
test096()6641 void test096()
6642 {
6643   const Tp eps = std::numeric_limits<Tp>::epsilon();
6644   Tp max_abs_diff = -Tp(1);
6645   Tp max_abs_frac = -Tp(1);
6646   unsigned int num_datum = sizeof(data096)
6647                          / sizeof(testcase_hyperg<double>);
6648   for (unsigned int i = 0; i < num_datum; ++i)
6649     {
6650       const Tp f = std::tr1::hyperg(Tp(data096[i].a), Tp(data096[i].b),
6651                    Tp(data096[i].c), Tp(data096[i].x));
6652       const Tp f0 = data096[i].f0;
6653       const Tp diff = f - f0;
6654       if (std::abs(diff) > max_abs_diff)
6655         max_abs_diff = std::abs(diff);
6656       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6657         {
6658           const Tp frac = diff / f0;
6659           if (std::abs(frac) > max_abs_frac)
6660             max_abs_frac = std::abs(frac);
6661         }
6662     }
6663   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6664 }
6665 
6666 // Test data for a=1.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
6667 testcase_hyperg<double> data097[] = {
6668   { 0.28363728383055758, 1.0000000000000000, 10.000000000000000,
6669           4.0000000000000000, -0.90000000000000002 },
6670   { 0.30933003169808387, 1.0000000000000000, 10.000000000000000,
6671           4.0000000000000000, -0.80000000000000004 },
6672   { 0.33998437757128797, 1.0000000000000000, 10.000000000000000,
6673           4.0000000000000000, -0.69999999999999996 },
6674   { 0.37713553224291119, 1.0000000000000000, 10.000000000000000,
6675           4.0000000000000000, -0.59999999999999998 },
6676   { 0.42299736538419658, 1.0000000000000000, 10.000000000000000,
6677           4.0000000000000000, -0.50000000000000000 },
6678   { 0.48086597727600106, 1.0000000000000000, 10.000000000000000,
6679           4.0000000000000000, -0.40000000000000002 },
6680   { 0.55583495759293045, 1.0000000000000000, 10.000000000000000,
6681           4.0000000000000000, -0.30000000000000004 },
6682   { 0.65612850114039667, 1.0000000000000000, 10.000000000000000,
6683           4.0000000000000000, -0.19999999999999996 },
6684   { 0.79573668772968120, 1.0000000000000000, 10.000000000000000,
6685           4.0000000000000000, -0.099999999999999978 },
6686   { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
6687           4.0000000000000000, 0.0000000000000000 },
6688   { 1.3184712058058303, 1.0000000000000000, 10.000000000000000,
6689           4.0000000000000000, 0.10000000000000009 },
6690   { 1.8576958065941214, 1.0000000000000000, 10.000000000000000,
6691           4.0000000000000000, 0.19999999999999996 },
6692   { 2.8759509651764228, 1.0000000000000000, 10.000000000000000,
6693           4.0000000000000000, 0.30000000000000004 },
6694   { 5.1046225531822182, 1.0000000000000000, 10.000000000000000,
6695           4.0000000000000000, 0.39999999999999991 },
6696   { 11.095238095238095, 1.0000000000000000, 10.000000000000000,
6697           4.0000000000000000, 0.50000000000000000 },
6698   { 32.797154017857174, 1.0000000000000000, 10.000000000000000,
6699           4.0000000000000000, 0.60000000000000009 },
6700   { 158.01935680536477, 1.0000000000000000, 10.000000000000000,
6701           4.0000000000000000, 0.69999999999999996 },
6702   { 1815.9523809523814, 1.0000000000000000, 10.000000000000000,
6703           4.0000000000000000, 0.80000000000000004 },
6704   { 163302.14285714156, 1.0000000000000000, 10.000000000000000,
6705           4.0000000000000000, 0.89999999999999991 },
6706 };
6707 
6708 // Test function for a=1.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
6709 template <typename Tp>
test097()6710 void test097()
6711 {
6712   const Tp eps = std::numeric_limits<Tp>::epsilon();
6713   Tp max_abs_diff = -Tp(1);
6714   Tp max_abs_frac = -Tp(1);
6715   unsigned int num_datum = sizeof(data097)
6716                          / sizeof(testcase_hyperg<double>);
6717   for (unsigned int i = 0; i < num_datum; ++i)
6718     {
6719       const Tp f = std::tr1::hyperg(Tp(data097[i].a), Tp(data097[i].b),
6720                    Tp(data097[i].c), Tp(data097[i].x));
6721       const Tp f0 = data097[i].f0;
6722       const Tp diff = f - f0;
6723       if (std::abs(diff) > max_abs_diff)
6724         max_abs_diff = std::abs(diff);
6725       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6726         {
6727           const Tp frac = diff / f0;
6728           if (std::abs(frac) > max_abs_frac)
6729             max_abs_frac = std::abs(frac);
6730         }
6731     }
6732   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6733 }
6734 
6735 // Test data for a=1.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
6736 testcase_hyperg<double> data098[] = {
6737   { 0.39006633302741794, 1.0000000000000000, 10.000000000000000,
6738           6.0000000000000000, -0.90000000000000002 },
6739   { 0.41898885698103294, 1.0000000000000000, 10.000000000000000,
6740           6.0000000000000000, -0.80000000000000004 },
6741   { 0.45245557983812590, 1.0000000000000000, 10.000000000000000,
6742           6.0000000000000000, -0.69999999999999996 },
6743   { 0.49160548618861633, 1.0000000000000000, 10.000000000000000,
6744           6.0000000000000000, -0.59999999999999998 },
6745   { 0.53798419230517980, 1.0000000000000000, 10.000000000000000,
6746           6.0000000000000000, -0.50000000000000000 },
6747   { 0.59373881442067344, 1.0000000000000000, 10.000000000000000,
6748           6.0000000000000000, -0.40000000000000002 },
6749   { 0.66193391357076115, 1.0000000000000000, 10.000000000000000,
6750           6.0000000000000000, -0.30000000000000004 },
6751   { 0.74708402736952129, 1.0000000000000000, 10.000000000000000,
6752           6.0000000000000000, -0.19999999999999996 },
6753   { 0.85609281019430605, 1.0000000000000000, 10.000000000000000,
6754           6.0000000000000000, -0.099999999999999978 },
6755   { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
6756           6.0000000000000000, 0.0000000000000000 },
6757   { 1.1974451135148187, 1.0000000000000000, 10.000000000000000,
6758           6.0000000000000000, 0.10000000000000009 },
6759   { 1.4820886036706347, 1.0000000000000000, 10.000000000000000,
6760           6.0000000000000000, 0.19999999999999996 },
6761   { 1.9201183180477521, 1.0000000000000000, 10.000000000000000,
6762           6.0000000000000000, 0.30000000000000004 },
6763   { 2.6569338297733336, 1.0000000000000000, 10.000000000000000,
6764           6.0000000000000000, 0.39999999999999991 },
6765   { 4.0634920634920650, 1.0000000000000000, 10.000000000000000,
6766           6.0000000000000000, 0.50000000000000000 },
6767   { 7.3102678571428568, 1.0000000000000000, 10.000000000000000,
6768           6.0000000000000000, 0.60000000000000009 },
6769   { 17.512574302697733, 1.0000000000000000, 10.000000000000000,
6770           6.0000000000000000, 0.69999999999999996 },
6771   { 74.206349206349131, 1.0000000000000000, 10.000000000000000,
6772           6.0000000000000000, 0.80000000000000004 },
6773   { 1342.8571428571363, 1.0000000000000000, 10.000000000000000,
6774           6.0000000000000000, 0.89999999999999991 },
6775 };
6776 
6777 // Test function for a=1.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
6778 template <typename Tp>
test098()6779 void test098()
6780 {
6781   const Tp eps = std::numeric_limits<Tp>::epsilon();
6782   Tp max_abs_diff = -Tp(1);
6783   Tp max_abs_frac = -Tp(1);
6784   unsigned int num_datum = sizeof(data098)
6785                          / sizeof(testcase_hyperg<double>);
6786   for (unsigned int i = 0; i < num_datum; ++i)
6787     {
6788       const Tp f = std::tr1::hyperg(Tp(data098[i].a), Tp(data098[i].b),
6789                    Tp(data098[i].c), Tp(data098[i].x));
6790       const Tp f0 = data098[i].f0;
6791       const Tp diff = f - f0;
6792       if (std::abs(diff) > max_abs_diff)
6793         max_abs_diff = std::abs(diff);
6794       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6795         {
6796           const Tp frac = diff / f0;
6797           if (std::abs(frac) > max_abs_frac)
6798             max_abs_frac = std::abs(frac);
6799         }
6800     }
6801   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6802 }
6803 
6804 // Test data for a=1.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
6805 testcase_hyperg<double> data099[] = {
6806   { 0.46726928123633193, 1.0000000000000000, 10.000000000000000,
6807           8.0000000000000000, -0.90000000000000002 },
6808   { 0.49687547629934464, 1.0000000000000000, 10.000000000000000,
6809           8.0000000000000000, -0.80000000000000004 },
6810   { 0.53045208856322235, 1.0000000000000000, 10.000000000000000,
6811           8.0000000000000000, -0.69999999999999996 },
6812   { 0.56884765624999978, 1.0000000000000000, 10.000000000000000,
6813           8.0000000000000000, -0.59999999999999998 },
6814   { 0.61316872427983526, 1.0000000000000000, 10.000000000000000,
6815           8.0000000000000000, -0.50000000000000000 },
6816   { 0.66488500161969544, 1.0000000000000000, 10.000000000000000,
6817           8.0000000000000000, -0.40000000000000002 },
6818   { 0.72598998634501577, 1.0000000000000000, 10.000000000000000,
6819           8.0000000000000000, -0.30000000000000004 },
6820   { 0.79925411522633782, 1.0000000000000000, 10.000000000000000,
6821           8.0000000000000000, -0.19999999999999996 },
6822   { 0.88863845062192193, 1.0000000000000000, 10.000000000000000,
6823           8.0000000000000000, -0.099999999999999978 },
6824   { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
6825           8.0000000000000000, 0.0000000000000000 },
6826   { 1.1423563481176653, 1.0000000000000000, 10.000000000000000,
6827           8.0000000000000000, 0.10000000000000009 },
6828   { 1.3302951388888888, 1.0000000000000000, 10.000000000000000,
6829           8.0000000000000000, 0.19999999999999996 },
6830   { 1.5889212827988335, 1.0000000000000000, 10.000000000000000,
6831           8.0000000000000000, 0.30000000000000004 },
6832   { 1.9650205761316870, 1.0000000000000000, 10.000000000000000,
6833           8.0000000000000000, 0.39999999999999991 },
6834   { 2.5555555555555549, 1.0000000000000000, 10.000000000000000,
6835           8.0000000000000000, 0.50000000000000000 },
6836   { 3.5937500000000013, 1.0000000000000000, 10.000000000000000,
6837           8.0000000000000000, 0.60000000000000009 },
6838   { 5.7818930041152203, 1.0000000000000000, 10.000000000000000,
6839           8.0000000000000000, 0.69999999999999996 },
6840   { 12.222222222222220, 1.0000000000000000, 10.000000000000000,
6841           8.0000000000000000, 0.80000000000000004 },
6842   { 54.999999999999780, 1.0000000000000000, 10.000000000000000,
6843           8.0000000000000000, 0.89999999999999991 },
6844 };
6845 
6846 // Test function for a=1.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
6847 template <typename Tp>
test099()6848 void test099()
6849 {
6850   const Tp eps = std::numeric_limits<Tp>::epsilon();
6851   Tp max_abs_diff = -Tp(1);
6852   Tp max_abs_frac = -Tp(1);
6853   unsigned int num_datum = sizeof(data099)
6854                          / sizeof(testcase_hyperg<double>);
6855   for (unsigned int i = 0; i < num_datum; ++i)
6856     {
6857       const Tp f = std::tr1::hyperg(Tp(data099[i].a), Tp(data099[i].b),
6858                    Tp(data099[i].c), Tp(data099[i].x));
6859       const Tp f0 = data099[i].f0;
6860       const Tp diff = f - f0;
6861       if (std::abs(diff) > max_abs_diff)
6862         max_abs_diff = std::abs(diff);
6863       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6864         {
6865           const Tp frac = diff / f0;
6866           if (std::abs(frac) > max_abs_frac)
6867             max_abs_frac = std::abs(frac);
6868         }
6869     }
6870   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6871 }
6872 
6873 // Test data for a=1.0000000000000000, b=10.000000000000000, c=10.000000000000000.
6874 testcase_hyperg<double> data100[] = {
6875   { 0.52631578947368429, 1.0000000000000000, 10.000000000000000,
6876           10.000000000000000, -0.90000000000000002 },
6877   { 0.55555555555555558, 1.0000000000000000, 10.000000000000000,
6878           10.000000000000000, -0.80000000000000004 },
6879   { 0.58823529411764708, 1.0000000000000000, 10.000000000000000,
6880           10.000000000000000, -0.69999999999999996 },
6881   { 0.62500000000000000, 1.0000000000000000, 10.000000000000000,
6882           10.000000000000000, -0.59999999999999998 },
6883   { 0.66666666666666663, 1.0000000000000000, 10.000000000000000,
6884           10.000000000000000, -0.50000000000000000 },
6885   { 0.71428571428571430, 1.0000000000000000, 10.000000000000000,
6886           10.000000000000000, -0.40000000000000002 },
6887   { 0.76923076923076927, 1.0000000000000000, 10.000000000000000,
6888           10.000000000000000, -0.30000000000000004 },
6889   { 0.83333333333333337, 1.0000000000000000, 10.000000000000000,
6890           10.000000000000000, -0.19999999999999996 },
6891   { 0.90909090909090906, 1.0000000000000000, 10.000000000000000,
6892           10.000000000000000, -0.099999999999999978 },
6893   { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
6894           10.000000000000000, 0.0000000000000000 },
6895   { 1.1111111111111112, 1.0000000000000000, 10.000000000000000,
6896           10.000000000000000, 0.10000000000000009 },
6897   { 1.2500000000000000, 1.0000000000000000, 10.000000000000000,
6898           10.000000000000000, 0.19999999999999996 },
6899   { 1.4285714285714286, 1.0000000000000000, 10.000000000000000,
6900           10.000000000000000, 0.30000000000000004 },
6901   { 1.6666666666666663, 1.0000000000000000, 10.000000000000000,
6902           10.000000000000000, 0.39999999999999991 },
6903   { 2.0000000000000000, 1.0000000000000000, 10.000000000000000,
6904           10.000000000000000, 0.50000000000000000 },
6905   { 2.5000000000000004, 1.0000000000000000, 10.000000000000000,
6906           10.000000000000000, 0.60000000000000009 },
6907   { 3.3333333333333330, 1.0000000000000000, 10.000000000000000,
6908           10.000000000000000, 0.69999999999999996 },
6909   { 5.0000000000000009, 1.0000000000000000, 10.000000000000000,
6910           10.000000000000000, 0.80000000000000004 },
6911   { 9.9999999999999929, 1.0000000000000000, 10.000000000000000,
6912           10.000000000000000, 0.89999999999999991 },
6913 };
6914 
6915 // Test function for a=1.0000000000000000, b=10.000000000000000, c=10.000000000000000.
6916 template <typename Tp>
test100()6917 void test100()
6918 {
6919   const Tp eps = std::numeric_limits<Tp>::epsilon();
6920   Tp max_abs_diff = -Tp(1);
6921   Tp max_abs_frac = -Tp(1);
6922   unsigned int num_datum = sizeof(data100)
6923                          / sizeof(testcase_hyperg<double>);
6924   for (unsigned int i = 0; i < num_datum; ++i)
6925     {
6926       const Tp f = std::tr1::hyperg(Tp(data100[i].a), Tp(data100[i].b),
6927                    Tp(data100[i].c), Tp(data100[i].x));
6928       const Tp f0 = data100[i].f0;
6929       const Tp diff = f - f0;
6930       if (std::abs(diff) > max_abs_diff)
6931         max_abs_diff = std::abs(diff);
6932       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6933         {
6934           const Tp frac = diff / f0;
6935           if (std::abs(frac) > max_abs_frac)
6936             max_abs_frac = std::abs(frac);
6937         }
6938     }
6939   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6940 }
6941 
6942 // Test data for a=1.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
6943 testcase_hyperg<double> data101[] = {
6944   { 0.058479236576646373, 1.0000000000000000, 20.000000000000000,
6945           2.0000000000000000, -0.90000000000000002 },
6946   { 0.065788544763137669, 1.0000000000000000, 20.000000000000000,
6947           2.0000000000000000, -0.80000000000000004 },
6948   { 0.075184824937824662, 1.0000000000000000, 20.000000000000000,
6949           2.0000000000000000, -0.69999999999999996 },
6950   { 0.087707688693157260, 1.0000000000000000, 20.000000000000000,
6951           2.0000000000000000, -0.59999999999999998 },
6952   { 0.10521567442213345, 1.0000000000000000, 20.000000000000000,
6953           2.0000000000000000, -0.50000000000000000 },
6954   { 0.13135877960541525, 1.0000000000000000, 20.000000000000000,
6955           2.0000000000000000, -0.40000000000000002 },
6956   { 0.17423854066297104, 1.0000000000000000, 20.000000000000000,
6957           2.0000000000000000, -0.30000000000000004 },
6958   { 0.25492082527223525, 1.0000000000000000, 20.000000000000000,
6959           2.0000000000000000, -0.19999999999999996 },
6960   { 0.44025895219654843, 1.0000000000000000, 20.000000000000000,
6961           2.0000000000000000, -0.099999999999999978 },
6962   { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
6963           2.0000000000000000, 0.0000000000000000 },
6964   { 3.3698615820910360, 1.0000000000000000, 20.000000000000000,
6965           2.0000000000000000, 0.10000000000000009 },
6966   { 17.997089220808483, 1.0000000000000000, 20.000000000000000,
6967           2.0000000000000000, 0.19999999999999996 },
6968   { 153.73298291118951, 1.0000000000000000, 20.000000000000000,
6969           2.0000000000000000, 0.30000000000000004 },
6970   { 2159.1667587825627, 1.0000000000000000, 20.000000000000000,
6971           2.0000000000000000, 0.39999999999999991 },
6972   { 55188.105263157879, 1.0000000000000000, 20.000000000000000,
6973           2.0000000000000000, 0.50000000000000000 },
6974   { 3191209.3921857267, 1.0000000000000000, 20.000000000000000,
6975           2.0000000000000000, 0.60000000000000009 },
6976   { 646910975.29152656, 1.0000000000000000, 20.000000000000000,
6977           2.0000000000000000, 0.69999999999999996 },
6978   { 1254834626850.2659, 1.0000000000000000, 20.000000000000000,
6979           2.0000000000000000, 0.80000000000000004 },
6980   { 5.8479532163741414e+17, 1.0000000000000000, 20.000000000000000,
6981           2.0000000000000000, 0.89999999999999991 },
6982 };
6983 
6984 // Test function for a=1.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
6985 template <typename Tp>
test101()6986 void test101()
6987 {
6988   const Tp eps = std::numeric_limits<Tp>::epsilon();
6989   Tp max_abs_diff = -Tp(1);
6990   Tp max_abs_frac = -Tp(1);
6991   unsigned int num_datum = sizeof(data101)
6992                          / sizeof(testcase_hyperg<double>);
6993   for (unsigned int i = 0; i < num_datum; ++i)
6994     {
6995       const Tp f = std::tr1::hyperg(Tp(data101[i].a), Tp(data101[i].b),
6996                    Tp(data101[i].c), Tp(data101[i].x));
6997       const Tp f0 = data101[i].f0;
6998       const Tp diff = f - f0;
6999       if (std::abs(diff) > max_abs_diff)
7000         max_abs_diff = std::abs(diff);
7001       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7002         {
7003           const Tp frac = diff / f0;
7004           if (std::abs(frac) > max_abs_frac)
7005             max_abs_frac = std::abs(frac);
7006         }
7007     }
7008   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7009 }
7010 
7011 // Test data for a=1.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
7012 testcase_hyperg<double> data102[] = {
7013   { 0.15519511120894947, 1.0000000000000000, 20.000000000000000,
7014           4.0000000000000000, -0.90000000000000002 },
7015   { 0.17197165701692899, 1.0000000000000000, 20.000000000000000,
7016           4.0000000000000000, -0.80000000000000004 },
7017   { 0.19276847315207363, 1.0000000000000000, 20.000000000000000,
7018           4.0000000000000000, -0.69999999999999996 },
7019   { 0.21920107206179093, 1.0000000000000000, 20.000000000000000,
7020           4.0000000000000000, -0.59999999999999998 },
7021   { 0.25386158960390581, 1.0000000000000000, 20.000000000000000,
7022           4.0000000000000000, -0.50000000000000000 },
7023   { 0.30115970686600657, 1.0000000000000000, 20.000000000000000,
7024           4.0000000000000000, -0.40000000000000002 },
7025   { 0.36916408142057117, 1.0000000000000000, 20.000000000000000,
7026           4.0000000000000000, -0.30000000000000004 },
7027   { 0.47406175901569558, 1.0000000000000000, 20.000000000000000,
7028           4.0000000000000000, -0.19999999999999996 },
7029   { 0.65237908266239919, 1.0000000000000000, 20.000000000000000,
7030           4.0000000000000000, -0.099999999999999978 },
7031   { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
7032           4.0000000000000000, 0.0000000000000000 },
7033   { 1.8227213362622299, 1.0000000000000000, 20.000000000000000,
7034           4.0000000000000000, 0.10000000000000009 },
7035   { 4.3716358339791332, 1.0000000000000000, 20.000000000000000,
7036           4.0000000000000000, 0.19999999999999996 },
7037   { 15.670841312959222, 1.0000000000000000, 20.000000000000000,
7038           4.0000000000000000, 0.30000000000000004 },
7039   { 94.742651122760179, 1.0000000000000000, 20.000000000000000,
7040           4.0000000000000000, 0.39999999999999991 },
7041   { 1081.7275541795671, 1.0000000000000000, 20.000000000000000,
7042           4.0000000000000000, 0.50000000000000000 },
7043   { 27809.787731465960, 1.0000000000000000, 20.000000000000000,
7044           4.0000000000000000, 0.60000000000000009 },
7045   { 2329811.1715181042, 1.0000000000000000, 20.000000000000000,
7046           4.0000000000000000, 0.69999999999999996 },
7047   { 1537787532.6780224, 1.0000000000000000, 20.000000000000000,
7048           4.0000000000000000, 0.80000000000000004 },
7049   { 141562653506999.88, 1.0000000000000000, 20.000000000000000,
7050           4.0000000000000000, 0.89999999999999991 },
7051 };
7052 
7053 // Test function for a=1.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
7054 template <typename Tp>
test102()7055 void test102()
7056 {
7057   const Tp eps = std::numeric_limits<Tp>::epsilon();
7058   Tp max_abs_diff = -Tp(1);
7059   Tp max_abs_frac = -Tp(1);
7060   unsigned int num_datum = sizeof(data102)
7061                          / sizeof(testcase_hyperg<double>);
7062   for (unsigned int i = 0; i < num_datum; ++i)
7063     {
7064       const Tp f = std::tr1::hyperg(Tp(data102[i].a), Tp(data102[i].b),
7065                    Tp(data102[i].c), Tp(data102[i].x));
7066       const Tp f0 = data102[i].f0;
7067       const Tp diff = f - f0;
7068       if (std::abs(diff) > max_abs_diff)
7069         max_abs_diff = std::abs(diff);
7070       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7071         {
7072           const Tp frac = diff / f0;
7073           if (std::abs(frac) > max_abs_frac)
7074             max_abs_frac = std::abs(frac);
7075         }
7076     }
7077   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7078 }
7079 
7080 // Test data for a=1.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
7081 testcase_hyperg<double> data103[] = {
7082   { 0.23253645591196570, 1.0000000000000000, 20.000000000000000,
7083           6.0000000000000000, -0.90000000000000002 },
7084   { 0.25484220947068353, 1.0000000000000000, 20.000000000000000,
7085           6.0000000000000000, -0.80000000000000004 },
7086   { 0.28181987881113829, 1.0000000000000000, 20.000000000000000,
7087           6.0000000000000000, -0.69999999999999996 },
7088   { 0.31508211677735765, 1.0000000000000000, 20.000000000000000,
7089           6.0000000000000000, -0.59999999999999998 },
7090   { 0.35706285886959599, 1.0000000000000000, 20.000000000000000,
7091           6.0000000000000000, -0.50000000000000000 },
7092   { 0.41160053409238195, 1.0000000000000000, 20.000000000000000,
7093           6.0000000000000000, -0.40000000000000002 },
7094   { 0.48508083111181949, 1.0000000000000000, 20.000000000000000,
7095           6.0000000000000000, -0.30000000000000004 },
7096   { 0.58885194371375260, 1.0000000000000000, 20.000000000000000,
7097           6.0000000000000000, -0.19999999999999996 },
7098   { 0.74482241684585748, 1.0000000000000000, 20.000000000000000,
7099           6.0000000000000000, -0.099999999999999978 },
7100   { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
7101           6.0000000000000000, 0.0000000000000000 },
7102   { 1.4700356864367146, 1.0000000000000000, 20.000000000000000,
7103           6.0000000000000000, 0.10000000000000009 },
7104   { 2.4955144453055143, 1.0000000000000000, 20.000000000000000,
7105           6.0000000000000000, 0.19999999999999996 },
7106   { 5.3506594845833471, 1.0000000000000000, 20.000000000000000,
7107           6.0000000000000000, 0.30000000000000004 },
7108   { 16.618413752184221, 1.0000000000000000, 20.000000000000000,
7109           6.0000000000000000, 0.39999999999999991 },
7110   { 89.310629514963878, 1.0000000000000000, 20.000000000000000,
7111           6.0000000000000000, 0.50000000000000000 },
7112   { 1029.3439900542960, 1.0000000000000000, 20.000000000000000,
7113           6.0000000000000000, 0.60000000000000009 },
7114   { 35659.847863372350, 1.0000000000000000, 20.000000000000000,
7115           6.0000000000000000, 0.69999999999999996 },
7116   { 8009309.6233230168, 1.0000000000000000, 20.000000000000000,
7117           6.0000000000000000, 0.80000000000000004 },
7118   { 145640590027.39731, 1.0000000000000000, 20.000000000000000,
7119           6.0000000000000000, 0.89999999999999991 },
7120 };
7121 
7122 // Test function for a=1.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
7123 template <typename Tp>
test103()7124 void test103()
7125 {
7126   const Tp eps = std::numeric_limits<Tp>::epsilon();
7127   Tp max_abs_diff = -Tp(1);
7128   Tp max_abs_frac = -Tp(1);
7129   unsigned int num_datum = sizeof(data103)
7130                          / sizeof(testcase_hyperg<double>);
7131   for (unsigned int i = 0; i < num_datum; ++i)
7132     {
7133       const Tp f = std::tr1::hyperg(Tp(data103[i].a), Tp(data103[i].b),
7134                    Tp(data103[i].c), Tp(data103[i].x));
7135       const Tp f0 = data103[i].f0;
7136       const Tp diff = f - f0;
7137       if (std::abs(diff) > max_abs_diff)
7138         max_abs_diff = std::abs(diff);
7139       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7140         {
7141           const Tp frac = diff / f0;
7142           if (std::abs(frac) > max_abs_frac)
7143             max_abs_frac = std::abs(frac);
7144         }
7145     }
7146   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7147 }
7148 
7149 // Test data for a=1.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
7150 testcase_hyperg<double> data104[] = {
7151   { 0.29614148314592498, 1.0000000000000000, 20.000000000000000,
7152           8.0000000000000000, -0.90000000000000002 },
7153   { 0.32176277356430810, 1.0000000000000000, 20.000000000000000,
7154           8.0000000000000000, -0.80000000000000004 },
7155   { 0.35217870475550522, 1.0000000000000000, 20.000000000000000,
7156           8.0000000000000000, -0.69999999999999996 },
7157   { 0.38885270445515091, 1.0000000000000000, 20.000000000000000,
7158           8.0000000000000000, -0.59999999999999998 },
7159   { 0.43389978380608424, 1.0000000000000000, 20.000000000000000,
7160           8.0000000000000000, -0.50000000000000000 },
7161   { 0.49048612522269436, 1.0000000000000000, 20.000000000000000,
7162           8.0000000000000000, -0.40000000000000002 },
7163   { 0.56355539635634611, 1.0000000000000000, 20.000000000000000,
7164           8.0000000000000000, -0.30000000000000004 },
7165   { 0.66123153239117682, 1.0000000000000000, 20.000000000000000,
7166           8.0000000000000000, -0.19999999999999996 },
7167   { 0.79773363961895427, 1.0000000000000000, 20.000000000000000,
7168           8.0000000000000000, -0.099999999999999978 },
7169   { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
7170           8.0000000000000000, 0.0000000000000000 },
7171   { 1.3245132157016595, 1.0000000000000000, 20.000000000000000,
7172           8.0000000000000000, 0.10000000000000009 },
7173   { 1.9065148749742076, 1.0000000000000000, 20.000000000000000,
7174           8.0000000000000000, 0.19999999999999996 },
7175   { 3.1328798652457452, 1.0000000000000000, 20.000000000000000,
7176           8.0000000000000000, 0.30000000000000004 },
7177   { 6.4172532944033476, 1.0000000000000000, 20.000000000000000,
7178           8.0000000000000000, 0.39999999999999991 },
7179   { 19.071683734222436, 1.0000000000000000, 20.000000000000000,
7180           8.0000000000000000, 0.50000000000000000 },
7181   { 104.41989641582512, 1.0000000000000000, 20.000000000000000,
7182           8.0000000000000000, 0.60000000000000009 },
7183   { 1510.5743992324240, 1.0000000000000000, 20.000000000000000,
7184           8.0000000000000000, 0.69999999999999996 },
7185   { 115518.14360562043, 1.0000000000000000, 20.000000000000000,
7186           8.0000000000000000, 0.80000000000000004 },
7187   { 414930455.29173034, 1.0000000000000000, 20.000000000000000,
7188           8.0000000000000000, 0.89999999999999991 },
7189 };
7190 
7191 // Test function for a=1.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
7192 template <typename Tp>
test104()7193 void test104()
7194 {
7195   const Tp eps = std::numeric_limits<Tp>::epsilon();
7196   Tp max_abs_diff = -Tp(1);
7197   Tp max_abs_frac = -Tp(1);
7198   unsigned int num_datum = sizeof(data104)
7199                          / sizeof(testcase_hyperg<double>);
7200   for (unsigned int i = 0; i < num_datum; ++i)
7201     {
7202       const Tp f = std::tr1::hyperg(Tp(data104[i].a), Tp(data104[i].b),
7203                    Tp(data104[i].c), Tp(data104[i].x));
7204       const Tp f0 = data104[i].f0;
7205       const Tp diff = f - f0;
7206       if (std::abs(diff) > max_abs_diff)
7207         max_abs_diff = std::abs(diff);
7208       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7209         {
7210           const Tp frac = diff / f0;
7211           if (std::abs(frac) > max_abs_frac)
7212             max_abs_frac = std::abs(frac);
7213         }
7214     }
7215   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7216 }
7217 
7218 // Test data for a=1.0000000000000000, b=20.000000000000000, c=10.000000000000000.
7219 testcase_hyperg<double> data105[] = {
7220   { 0.34954259539177696, 1.0000000000000000, 20.000000000000000,
7221           10.000000000000000, -0.90000000000000002 },
7222   { 0.37714038609235123, 1.0000000000000000, 20.000000000000000,
7223           10.000000000000000, -0.80000000000000004 },
7224   { 0.40942091659748725, 1.0000000000000000, 20.000000000000000,
7225           10.000000000000000, -0.69999999999999996 },
7226   { 0.44767109606846428, 1.0000000000000000, 20.000000000000000,
7227           10.000000000000000, -0.59999999999999998 },
7228   { 0.49368984777532254, 1.0000000000000000, 20.000000000000000,
7229           10.000000000000000, -0.50000000000000000 },
7230   { 0.55006638216982318, 1.0000000000000000, 20.000000000000000,
7231           10.000000000000000, -0.40000000000000002 },
7232   { 0.62065830207408912, 1.0000000000000000, 20.000000000000000,
7233           10.000000000000000, -0.30000000000000004 },
7234   { 0.71145554513583786, 1.0000000000000000, 20.000000000000000,
7235           10.000000000000000, -0.19999999999999996 },
7236   { 0.83223839666914623, 1.0000000000000000, 20.000000000000000,
7237           10.000000000000000, -0.099999999999999978 },
7238   { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
7239           10.000000000000000, 0.0000000000000000 },
7240   { 1.2466748028187731, 1.0000000000000000, 20.000000000000000,
7241           10.000000000000000, 0.10000000000000009 },
7242   { 1.6386752725021749, 1.0000000000000000, 20.000000000000000,
7243           10.000000000000000, 0.19999999999999996 },
7244   { 2.3340068725479681, 1.0000000000000000, 20.000000000000000,
7245           10.000000000000000, 0.30000000000000004 },
7246   { 3.7848108613132054, 1.0000000000000000, 20.000000000000000,
7247           10.000000000000000, 0.39999999999999991 },
7248   { 7.6754638550304133, 1.0000000000000000, 20.000000000000000,
7249           10.000000000000000, 0.50000000000000000 },
7250   { 23.344217312927277, 1.0000000000000000, 20.000000000000000,
7251           10.000000000000000, 0.60000000000000009 },
7252   { 149.83491198246921, 1.0000000000000000, 20.000000000000000,
7253           10.000000000000000, 0.69999999999999996 },
7254   { 3936.9253501916060, 1.0000000000000000, 20.000000000000000,
7255           10.000000000000000, 0.80000000000000004 },
7256   { 2794143.5036480185, 1.0000000000000000, 20.000000000000000,
7257           10.000000000000000, 0.89999999999999991 },
7258 };
7259 
7260 // Test function for a=1.0000000000000000, b=20.000000000000000, c=10.000000000000000.
7261 template <typename Tp>
test105()7262 void test105()
7263 {
7264   const Tp eps = std::numeric_limits<Tp>::epsilon();
7265   Tp max_abs_diff = -Tp(1);
7266   Tp max_abs_frac = -Tp(1);
7267   unsigned int num_datum = sizeof(data105)
7268                          / sizeof(testcase_hyperg<double>);
7269   for (unsigned int i = 0; i < num_datum; ++i)
7270     {
7271       const Tp f = std::tr1::hyperg(Tp(data105[i].a), Tp(data105[i].b),
7272                    Tp(data105[i].c), Tp(data105[i].x));
7273       const Tp f0 = data105[i].f0;
7274       const Tp diff = f - f0;
7275       if (std::abs(diff) > max_abs_diff)
7276         max_abs_diff = std::abs(diff);
7277       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7278         {
7279           const Tp frac = diff / f0;
7280           if (std::abs(frac) > max_abs_frac)
7281             max_abs_frac = std::abs(frac);
7282         }
7283     }
7284   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7285 }
7286 
7287 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
7288 testcase_hyperg<double> data106[] = {
7289   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7290           2.0000000000000000, -0.90000000000000002 },
7291   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7292           2.0000000000000000, -0.80000000000000004 },
7293   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7294           2.0000000000000000, -0.69999999999999996 },
7295   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7296           2.0000000000000000, -0.59999999999999998 },
7297   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7298           2.0000000000000000, -0.50000000000000000 },
7299   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7300           2.0000000000000000, -0.40000000000000002 },
7301   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7302           2.0000000000000000, -0.30000000000000004 },
7303   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7304           2.0000000000000000, -0.19999999999999996 },
7305   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7306           2.0000000000000000, -0.099999999999999978 },
7307   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7308           2.0000000000000000, 0.0000000000000000 },
7309   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7310           2.0000000000000000, 0.10000000000000009 },
7311   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7312           2.0000000000000000, 0.19999999999999996 },
7313   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7314           2.0000000000000000, 0.30000000000000004 },
7315   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7316           2.0000000000000000, 0.39999999999999991 },
7317   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7318           2.0000000000000000, 0.50000000000000000 },
7319   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7320           2.0000000000000000, 0.60000000000000009 },
7321   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7322           2.0000000000000000, 0.69999999999999996 },
7323   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7324           2.0000000000000000, 0.80000000000000004 },
7325   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7326           2.0000000000000000, 0.89999999999999991 },
7327 };
7328 
7329 // Test function for a=2.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
7330 template <typename Tp>
test106()7331 void test106()
7332 {
7333   const Tp eps = std::numeric_limits<Tp>::epsilon();
7334   Tp max_abs_diff = -Tp(1);
7335   Tp max_abs_frac = -Tp(1);
7336   unsigned int num_datum = sizeof(data106)
7337                          / sizeof(testcase_hyperg<double>);
7338   for (unsigned int i = 0; i < num_datum; ++i)
7339     {
7340       const Tp f = std::tr1::hyperg(Tp(data106[i].a), Tp(data106[i].b),
7341                    Tp(data106[i].c), Tp(data106[i].x));
7342       const Tp f0 = data106[i].f0;
7343       const Tp diff = f - f0;
7344       if (std::abs(diff) > max_abs_diff)
7345         max_abs_diff = std::abs(diff);
7346       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7347         {
7348           const Tp frac = diff / f0;
7349           if (std::abs(frac) > max_abs_frac)
7350             max_abs_frac = std::abs(frac);
7351         }
7352     }
7353   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7354 }
7355 
7356 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
7357 testcase_hyperg<double> data107[] = {
7358   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7359           4.0000000000000000, -0.90000000000000002 },
7360   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7361           4.0000000000000000, -0.80000000000000004 },
7362   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7363           4.0000000000000000, -0.69999999999999996 },
7364   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7365           4.0000000000000000, -0.59999999999999998 },
7366   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7367           4.0000000000000000, -0.50000000000000000 },
7368   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7369           4.0000000000000000, -0.40000000000000002 },
7370   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7371           4.0000000000000000, -0.30000000000000004 },
7372   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7373           4.0000000000000000, -0.19999999999999996 },
7374   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7375           4.0000000000000000, -0.099999999999999978 },
7376   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7377           4.0000000000000000, 0.0000000000000000 },
7378   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7379           4.0000000000000000, 0.10000000000000009 },
7380   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7381           4.0000000000000000, 0.19999999999999996 },
7382   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7383           4.0000000000000000, 0.30000000000000004 },
7384   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7385           4.0000000000000000, 0.39999999999999991 },
7386   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7387           4.0000000000000000, 0.50000000000000000 },
7388   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7389           4.0000000000000000, 0.60000000000000009 },
7390   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7391           4.0000000000000000, 0.69999999999999996 },
7392   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7393           4.0000000000000000, 0.80000000000000004 },
7394   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7395           4.0000000000000000, 0.89999999999999991 },
7396 };
7397 
7398 // Test function for a=2.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
7399 template <typename Tp>
test107()7400 void test107()
7401 {
7402   const Tp eps = std::numeric_limits<Tp>::epsilon();
7403   Tp max_abs_diff = -Tp(1);
7404   Tp max_abs_frac = -Tp(1);
7405   unsigned int num_datum = sizeof(data107)
7406                          / sizeof(testcase_hyperg<double>);
7407   for (unsigned int i = 0; i < num_datum; ++i)
7408     {
7409       const Tp f = std::tr1::hyperg(Tp(data107[i].a), Tp(data107[i].b),
7410                    Tp(data107[i].c), Tp(data107[i].x));
7411       const Tp f0 = data107[i].f0;
7412       const Tp diff = f - f0;
7413       if (std::abs(diff) > max_abs_diff)
7414         max_abs_diff = std::abs(diff);
7415       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7416         {
7417           const Tp frac = diff / f0;
7418           if (std::abs(frac) > max_abs_frac)
7419             max_abs_frac = std::abs(frac);
7420         }
7421     }
7422   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7423 }
7424 
7425 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
7426 testcase_hyperg<double> data108[] = {
7427   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7428           6.0000000000000000, -0.90000000000000002 },
7429   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7430           6.0000000000000000, -0.80000000000000004 },
7431   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7432           6.0000000000000000, -0.69999999999999996 },
7433   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7434           6.0000000000000000, -0.59999999999999998 },
7435   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7436           6.0000000000000000, -0.50000000000000000 },
7437   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7438           6.0000000000000000, -0.40000000000000002 },
7439   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7440           6.0000000000000000, -0.30000000000000004 },
7441   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7442           6.0000000000000000, -0.19999999999999996 },
7443   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7444           6.0000000000000000, -0.099999999999999978 },
7445   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7446           6.0000000000000000, 0.0000000000000000 },
7447   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7448           6.0000000000000000, 0.10000000000000009 },
7449   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7450           6.0000000000000000, 0.19999999999999996 },
7451   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7452           6.0000000000000000, 0.30000000000000004 },
7453   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7454           6.0000000000000000, 0.39999999999999991 },
7455   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7456           6.0000000000000000, 0.50000000000000000 },
7457   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7458           6.0000000000000000, 0.60000000000000009 },
7459   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7460           6.0000000000000000, 0.69999999999999996 },
7461   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7462           6.0000000000000000, 0.80000000000000004 },
7463   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7464           6.0000000000000000, 0.89999999999999991 },
7465 };
7466 
7467 // Test function for a=2.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
7468 template <typename Tp>
test108()7469 void test108()
7470 {
7471   const Tp eps = std::numeric_limits<Tp>::epsilon();
7472   Tp max_abs_diff = -Tp(1);
7473   Tp max_abs_frac = -Tp(1);
7474   unsigned int num_datum = sizeof(data108)
7475                          / sizeof(testcase_hyperg<double>);
7476   for (unsigned int i = 0; i < num_datum; ++i)
7477     {
7478       const Tp f = std::tr1::hyperg(Tp(data108[i].a), Tp(data108[i].b),
7479                    Tp(data108[i].c), Tp(data108[i].x));
7480       const Tp f0 = data108[i].f0;
7481       const Tp diff = f - f0;
7482       if (std::abs(diff) > max_abs_diff)
7483         max_abs_diff = std::abs(diff);
7484       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7485         {
7486           const Tp frac = diff / f0;
7487           if (std::abs(frac) > max_abs_frac)
7488             max_abs_frac = std::abs(frac);
7489         }
7490     }
7491   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7492 }
7493 
7494 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
7495 testcase_hyperg<double> data109[] = {
7496   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7497           8.0000000000000000, -0.90000000000000002 },
7498   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7499           8.0000000000000000, -0.80000000000000004 },
7500   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7501           8.0000000000000000, -0.69999999999999996 },
7502   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7503           8.0000000000000000, -0.59999999999999998 },
7504   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7505           8.0000000000000000, -0.50000000000000000 },
7506   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7507           8.0000000000000000, -0.40000000000000002 },
7508   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7509           8.0000000000000000, -0.30000000000000004 },
7510   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7511           8.0000000000000000, -0.19999999999999996 },
7512   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7513           8.0000000000000000, -0.099999999999999978 },
7514   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7515           8.0000000000000000, 0.0000000000000000 },
7516   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7517           8.0000000000000000, 0.10000000000000009 },
7518   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7519           8.0000000000000000, 0.19999999999999996 },
7520   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7521           8.0000000000000000, 0.30000000000000004 },
7522   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7523           8.0000000000000000, 0.39999999999999991 },
7524   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7525           8.0000000000000000, 0.50000000000000000 },
7526   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7527           8.0000000000000000, 0.60000000000000009 },
7528   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7529           8.0000000000000000, 0.69999999999999996 },
7530   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7531           8.0000000000000000, 0.80000000000000004 },
7532   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7533           8.0000000000000000, 0.89999999999999991 },
7534 };
7535 
7536 // Test function for a=2.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
7537 template <typename Tp>
test109()7538 void test109()
7539 {
7540   const Tp eps = std::numeric_limits<Tp>::epsilon();
7541   Tp max_abs_diff = -Tp(1);
7542   Tp max_abs_frac = -Tp(1);
7543   unsigned int num_datum = sizeof(data109)
7544                          / sizeof(testcase_hyperg<double>);
7545   for (unsigned int i = 0; i < num_datum; ++i)
7546     {
7547       const Tp f = std::tr1::hyperg(Tp(data109[i].a), Tp(data109[i].b),
7548                    Tp(data109[i].c), Tp(data109[i].x));
7549       const Tp f0 = data109[i].f0;
7550       const Tp diff = f - f0;
7551       if (std::abs(diff) > max_abs_diff)
7552         max_abs_diff = std::abs(diff);
7553       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7554         {
7555           const Tp frac = diff / f0;
7556           if (std::abs(frac) > max_abs_frac)
7557             max_abs_frac = std::abs(frac);
7558         }
7559     }
7560   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7561 }
7562 
7563 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
7564 testcase_hyperg<double> data110[] = {
7565   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7566           10.000000000000000, -0.90000000000000002 },
7567   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7568           10.000000000000000, -0.80000000000000004 },
7569   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7570           10.000000000000000, -0.69999999999999996 },
7571   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7572           10.000000000000000, -0.59999999999999998 },
7573   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7574           10.000000000000000, -0.50000000000000000 },
7575   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7576           10.000000000000000, -0.40000000000000002 },
7577   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7578           10.000000000000000, -0.30000000000000004 },
7579   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7580           10.000000000000000, -0.19999999999999996 },
7581   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7582           10.000000000000000, -0.099999999999999978 },
7583   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7584           10.000000000000000, 0.0000000000000000 },
7585   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7586           10.000000000000000, 0.10000000000000009 },
7587   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7588           10.000000000000000, 0.19999999999999996 },
7589   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7590           10.000000000000000, 0.30000000000000004 },
7591   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7592           10.000000000000000, 0.39999999999999991 },
7593   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7594           10.000000000000000, 0.50000000000000000 },
7595   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7596           10.000000000000000, 0.60000000000000009 },
7597   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7598           10.000000000000000, 0.69999999999999996 },
7599   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7600           10.000000000000000, 0.80000000000000004 },
7601   { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7602           10.000000000000000, 0.89999999999999991 },
7603 };
7604 
7605 // Test function for a=2.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
7606 template <typename Tp>
test110()7607 void test110()
7608 {
7609   const Tp eps = std::numeric_limits<Tp>::epsilon();
7610   Tp max_abs_diff = -Tp(1);
7611   Tp max_abs_frac = -Tp(1);
7612   unsigned int num_datum = sizeof(data110)
7613                          / sizeof(testcase_hyperg<double>);
7614   for (unsigned int i = 0; i < num_datum; ++i)
7615     {
7616       const Tp f = std::tr1::hyperg(Tp(data110[i].a), Tp(data110[i].b),
7617                    Tp(data110[i].c), Tp(data110[i].x));
7618       const Tp f0 = data110[i].f0;
7619       const Tp diff = f - f0;
7620       if (std::abs(diff) > max_abs_diff)
7621         max_abs_diff = std::abs(diff);
7622       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7623         {
7624           const Tp frac = diff / f0;
7625           if (std::abs(frac) > max_abs_frac)
7626             max_abs_frac = std::abs(frac);
7627         }
7628     }
7629   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7630 }
7631 
7632 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
7633 testcase_hyperg<double> data111[] = {
7634   { 0.72547625011001171, 2.0000000000000000, 0.50000000000000000,
7635           2.0000000000000000, -0.90000000000000002 },
7636   { 0.74535599249992990, 2.0000000000000000, 0.50000000000000000,
7637           2.0000000000000000, -0.80000000000000004 },
7638   { 0.76696498884737041, 2.0000000000000000, 0.50000000000000000,
7639           2.0000000000000000, -0.69999999999999996 },
7640   { 0.79056941504209477, 2.0000000000000000, 0.50000000000000000,
7641           2.0000000000000000, -0.59999999999999998 },
7642   { 0.81649658092772603, 2.0000000000000000, 0.50000000000000000,
7643           2.0000000000000000, -0.50000000000000000 },
7644   { 0.84515425472851657, 2.0000000000000000, 0.50000000000000000,
7645           2.0000000000000000, -0.40000000000000002 },
7646   { 0.87705801930702920, 2.0000000000000000, 0.50000000000000000,
7647           2.0000000000000000, -0.30000000000000004 },
7648   { 0.91287092917527690, 2.0000000000000000, 0.50000000000000000,
7649           2.0000000000000000, -0.19999999999999996 },
7650   { 0.95346258924559224, 2.0000000000000000, 0.50000000000000000,
7651           2.0000000000000000, -0.099999999999999978 },
7652   { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
7653           2.0000000000000000, 0.0000000000000000 },
7654   { 1.0540925533894598, 2.0000000000000000, 0.50000000000000000,
7655           2.0000000000000000, 0.10000000000000009 },
7656   { 1.1180339887498949, 2.0000000000000000, 0.50000000000000000,
7657           2.0000000000000000, 0.19999999999999996 },
7658   { 1.1952286093343938, 2.0000000000000000, 0.50000000000000000,
7659           2.0000000000000000, 0.30000000000000004 },
7660   { 1.2909944487358056, 2.0000000000000000, 0.50000000000000000,
7661           2.0000000000000000, 0.39999999999999991 },
7662   { 1.4142135623730949, 2.0000000000000000, 0.50000000000000000,
7663           2.0000000000000000, 0.50000000000000000 },
7664   { 1.5811388300841900, 2.0000000000000000, 0.50000000000000000,
7665           2.0000000000000000, 0.60000000000000009 },
7666   { 1.8257418583505536, 2.0000000000000000, 0.50000000000000000,
7667           2.0000000000000000, 0.69999999999999996 },
7668   { 2.2360679774997898, 2.0000000000000000, 0.50000000000000000,
7669           2.0000000000000000, 0.80000000000000004 },
7670   { 3.1622776601683782, 2.0000000000000000, 0.50000000000000000,
7671           2.0000000000000000, 0.89999999999999991 },
7672 };
7673 
7674 // Test function for a=2.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
7675 template <typename Tp>
test111()7676 void test111()
7677 {
7678   const Tp eps = std::numeric_limits<Tp>::epsilon();
7679   Tp max_abs_diff = -Tp(1);
7680   Tp max_abs_frac = -Tp(1);
7681   unsigned int num_datum = sizeof(data111)
7682                          / sizeof(testcase_hyperg<double>);
7683   for (unsigned int i = 0; i < num_datum; ++i)
7684     {
7685       const Tp f = std::tr1::hyperg(Tp(data111[i].a), Tp(data111[i].b),
7686                    Tp(data111[i].c), Tp(data111[i].x));
7687       const Tp f0 = data111[i].f0;
7688       const Tp diff = f - f0;
7689       if (std::abs(diff) > max_abs_diff)
7690         max_abs_diff = std::abs(diff);
7691       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7692         {
7693           const Tp frac = diff / f0;
7694           if (std::abs(frac) > max_abs_frac)
7695             max_abs_frac = std::abs(frac);
7696         }
7697     }
7698   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7699 }
7700 
7701 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
7702 testcase_hyperg<double> data112[] = {
7703   { 0.83664260086443798, 2.0000000000000000, 0.50000000000000000,
7704           4.0000000000000000, -0.90000000000000002 },
7705   { 0.85046584300227146, 2.0000000000000000, 0.50000000000000000,
7706           4.0000000000000000, -0.80000000000000004 },
7707   { 0.86509574979651593, 2.0000000000000000, 0.50000000000000000,
7708           4.0000000000000000, -0.69999999999999996 },
7709   { 0.88062082573041867, 2.0000000000000000, 0.50000000000000000,
7710           4.0000000000000000, -0.59999999999999998 },
7711   { 0.89714464248521586, 2.0000000000000000, 0.50000000000000000,
7712           4.0000000000000000, -0.50000000000000000 },
7713   { 0.91478946588967558, 2.0000000000000000, 0.50000000000000000,
7714           4.0000000000000000, -0.40000000000000002 },
7715   { 0.93370105322348573, 2.0000000000000000, 0.50000000000000000,
7716           4.0000000000000000, -0.30000000000000004 },
7717   { 0.95405511057700887, 2.0000000000000000, 0.50000000000000000,
7718           4.0000000000000000, -0.19999999999999996 },
7719   { 0.97606616007978142, 2.0000000000000000, 0.50000000000000000,
7720           4.0000000000000000, -0.099999999999999978 },
7721   { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
7722           4.0000000000000000, 0.0000000000000000 },
7723   { 1.0261916902334731, 2.0000000000000000, 0.50000000000000000,
7724           4.0000000000000000, 0.10000000000000009 },
7725   { 1.0550723519434702, 2.0000000000000000, 0.50000000000000000,
7726           4.0000000000000000, 0.19999999999999996 },
7727   { 1.0872106588188091, 2.0000000000000000, 0.50000000000000000,
7728           4.0000000000000000, 0.30000000000000004 },
7729   { 1.1233801699379020, 2.0000000000000000, 0.50000000000000000,
7730           4.0000000000000000, 0.39999999999999991 },
7731   { 1.1646752981725688, 2.0000000000000000, 0.50000000000000000,
7732           4.0000000000000000, 0.50000000000000000 },
7733   { 1.2127272514219511, 2.0000000000000000, 0.50000000000000000,
7734           4.0000000000000000, 0.60000000000000009 },
7735   { 1.2701518651068637, 2.0000000000000000, 0.50000000000000000,
7736           4.0000000000000000, 0.69999999999999996 },
7737   { 1.3416407864998725, 2.0000000000000000, 0.50000000000000000,
7738           4.0000000000000000, 0.80000000000000004 },
7739   { 1.4374795179111102, 2.0000000000000000, 0.50000000000000000,
7740           4.0000000000000000, 0.89999999999999991 },
7741 };
7742 
7743 // Test function for a=2.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
7744 template <typename Tp>
test112()7745 void test112()
7746 {
7747   const Tp eps = std::numeric_limits<Tp>::epsilon();
7748   Tp max_abs_diff = -Tp(1);
7749   Tp max_abs_frac = -Tp(1);
7750   unsigned int num_datum = sizeof(data112)
7751                          / sizeof(testcase_hyperg<double>);
7752   for (unsigned int i = 0; i < num_datum; ++i)
7753     {
7754       const Tp f = std::tr1::hyperg(Tp(data112[i].a), Tp(data112[i].b),
7755                    Tp(data112[i].c), Tp(data112[i].x));
7756       const Tp f0 = data112[i].f0;
7757       const Tp diff = f - f0;
7758       if (std::abs(diff) > max_abs_diff)
7759         max_abs_diff = std::abs(diff);
7760       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7761         {
7762           const Tp frac = diff / f0;
7763           if (std::abs(frac) > max_abs_frac)
7764             max_abs_frac = std::abs(frac);
7765         }
7766     }
7767   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7768 }
7769 
7770 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
7771 testcase_hyperg<double> data113[] = {
7772   { 0.88195381730235833, 2.0000000000000000, 0.50000000000000000,
7773           6.0000000000000000, -0.90000000000000002 },
7774   { 0.89265078469555093, 2.0000000000000000, 0.50000000000000000,
7775           6.0000000000000000, -0.80000000000000004 },
7776   { 0.90382937908303707, 2.0000000000000000, 0.50000000000000000,
7777           6.0000000000000000, -0.69999999999999996 },
7778   { 0.91553161389880577, 2.0000000000000000, 0.50000000000000000,
7779           6.0000000000000000, -0.59999999999999998 },
7780   { 0.92780530349281576, 2.0000000000000000, 0.50000000000000000,
7781           6.0000000000000000, -0.50000000000000000 },
7782   { 0.94070521140346042, 2.0000000000000000, 0.50000000000000000,
7783           6.0000000000000000, -0.40000000000000002 },
7784   { 0.95429450630523349, 2.0000000000000000, 0.50000000000000000,
7785           6.0000000000000000, -0.30000000000000004 },
7786   { 0.96864663325785849, 2.0000000000000000, 0.50000000000000000,
7787           6.0000000000000000, -0.19999999999999996 },
7788   { 0.98384775588541795, 2.0000000000000000, 0.50000000000000000,
7789           6.0000000000000000, -0.099999999999999978 },
7790   { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
7791           6.0000000000000000, 0.0000000000000000 },
7792   { 1.0172258496884334, 2.0000000000000000, 0.50000000000000000,
7793           6.0000000000000000, 0.10000000000000009 },
7794   { 1.0356742479163459, 2.0000000000000000, 0.50000000000000000,
7795           6.0000000000000000, 0.19999999999999996 },
7796   { 1.0555293036908924, 2.0000000000000000, 0.50000000000000000,
7797           6.0000000000000000, 0.30000000000000004 },
7798   { 1.0770231491562379, 2.0000000000000000, 0.50000000000000000,
7799           6.0000000000000000, 0.39999999999999991 },
7800   { 1.1004557416484888, 2.0000000000000000, 0.50000000000000000,
7801           6.0000000000000000, 0.50000000000000000 },
7802   { 1.1262270515731978, 2.0000000000000000, 0.50000000000000000,
7803           6.0000000000000000, 0.60000000000000009 },
7804   { 1.1548932919125086, 2.0000000000000000, 0.50000000000000000,
7805           6.0000000000000000, 0.69999999999999996 },
7806   { 1.1872757758134724, 2.0000000000000000, 0.50000000000000000,
7807           6.0000000000000000, 0.80000000000000004 },
7808   { 1.2247091713458949, 2.0000000000000000, 0.50000000000000000,
7809           6.0000000000000000, 0.89999999999999991 },
7810 };
7811 
7812 // Test function for a=2.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
7813 template <typename Tp>
test113()7814 void test113()
7815 {
7816   const Tp eps = std::numeric_limits<Tp>::epsilon();
7817   Tp max_abs_diff = -Tp(1);
7818   Tp max_abs_frac = -Tp(1);
7819   unsigned int num_datum = sizeof(data113)
7820                          / sizeof(testcase_hyperg<double>);
7821   for (unsigned int i = 0; i < num_datum; ++i)
7822     {
7823       const Tp f = std::tr1::hyperg(Tp(data113[i].a), Tp(data113[i].b),
7824                    Tp(data113[i].c), Tp(data113[i].x));
7825       const Tp f0 = data113[i].f0;
7826       const Tp diff = f - f0;
7827       if (std::abs(diff) > max_abs_diff)
7828         max_abs_diff = std::abs(diff);
7829       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7830         {
7831           const Tp frac = diff / f0;
7832           if (std::abs(frac) > max_abs_frac)
7833             max_abs_frac = std::abs(frac);
7834         }
7835     }
7836   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7837 }
7838 
7839 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
7840 testcase_hyperg<double> data114[] = {
7841   { 0.90716919697107301, 2.0000000000000000, 0.50000000000000000,
7842           8.0000000000000000, -0.90000000000000002 },
7843   { 0.91592299407142519, 2.0000000000000000, 0.50000000000000000,
7844           8.0000000000000000, -0.80000000000000004 },
7845   { 0.92500027075874236, 2.0000000000000000, 0.50000000000000000,
7846           8.0000000000000000, -0.69999999999999996 },
7847   { 0.93442464185467167, 2.0000000000000000, 0.50000000000000000,
7848           8.0000000000000000, -0.59999999999999998 },
7849   { 0.94422248683737009, 2.0000000000000000, 0.50000000000000000,
7850           8.0000000000000000, -0.50000000000000000 },
7851   { 0.95442341810133347, 2.0000000000000000, 0.50000000000000000,
7852           8.0000000000000000, -0.40000000000000002 },
7853   { 0.96506085725516400, 2.0000000000000000, 0.50000000000000000,
7854           8.0000000000000000, -0.30000000000000004 },
7855   { 0.97617275213704069, 2.0000000000000000, 0.50000000000000000,
7856           8.0000000000000000, -0.19999999999999996 },
7857   { 0.98780247986309799, 2.0000000000000000, 0.50000000000000000,
7858           8.0000000000000000, -0.099999999999999978 },
7859   { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
7860           8.0000000000000000, 0.0000000000000000 },
7861   { 1.0128233505813447, 2.0000000000000000, 0.50000000000000000,
7862           8.0000000000000000, 0.10000000000000009 },
7863   { 1.0263406246541855, 2.0000000000000000, 0.50000000000000000,
7864           8.0000000000000000, 0.19999999999999996 },
7865   { 1.0406326381700366, 2.0000000000000000, 0.50000000000000000,
7866           8.0000000000000000, 0.30000000000000004 },
7867   { 1.0557966239802845, 2.0000000000000000, 0.50000000000000000,
7868           8.0000000000000000, 0.39999999999999991 },
7869   { 1.0719515075786321, 2.0000000000000000, 0.50000000000000000,
7870           8.0000000000000000, 0.50000000000000000 },
7871   { 1.0892457392422055, 2.0000000000000000, 0.50000000000000000,
7872           8.0000000000000000, 0.60000000000000009 },
7873   { 1.1078695188000958, 2.0000000000000000, 0.50000000000000000,
7874           8.0000000000000000, 0.69999999999999996 },
7875   { 1.1280752258974340, 2.0000000000000000, 0.50000000000000000,
7876           8.0000000000000000, 0.80000000000000004 },
7877   { 1.1502152002706476, 2.0000000000000000, 0.50000000000000000,
7878           8.0000000000000000, 0.89999999999999991 },
7879 };
7880 
7881 // Test function for a=2.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
7882 template <typename Tp>
test114()7883 void test114()
7884 {
7885   const Tp eps = std::numeric_limits<Tp>::epsilon();
7886   Tp max_abs_diff = -Tp(1);
7887   Tp max_abs_frac = -Tp(1);
7888   unsigned int num_datum = sizeof(data114)
7889                          / sizeof(testcase_hyperg<double>);
7890   for (unsigned int i = 0; i < num_datum; ++i)
7891     {
7892       const Tp f = std::tr1::hyperg(Tp(data114[i].a), Tp(data114[i].b),
7893                    Tp(data114[i].c), Tp(data114[i].x));
7894       const Tp f0 = data114[i].f0;
7895       const Tp diff = f - f0;
7896       if (std::abs(diff) > max_abs_diff)
7897         max_abs_diff = std::abs(diff);
7898       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7899         {
7900           const Tp frac = diff / f0;
7901           if (std::abs(frac) > max_abs_frac)
7902             max_abs_frac = std::abs(frac);
7903         }
7904     }
7905   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7906 }
7907 
7908 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
7909 testcase_hyperg<double> data115[] = {
7910   { 0.92336416053263093, 2.0000000000000000, 0.50000000000000000,
7911           10.000000000000000, -0.90000000000000002 },
7912   { 0.93078397248364519, 2.0000000000000000, 0.50000000000000000,
7913           10.000000000000000, -0.80000000000000004 },
7914   { 0.93843714333600226, 2.0000000000000000, 0.50000000000000000,
7915           10.000000000000000, -0.69999999999999996 },
7916   { 0.94633837784068076, 2.0000000000000000, 0.50000000000000000,
7917           10.000000000000000, -0.59999999999999998 },
7918   { 0.95450388104967909, 2.0000000000000000, 0.50000000000000000,
7919           10.000000000000000, -0.50000000000000000 },
7920   { 0.96295158125742764, 2.0000000000000000, 0.50000000000000000,
7921           10.000000000000000, -0.40000000000000002 },
7922   { 0.97170139827854296, 2.0000000000000000, 0.50000000000000000,
7923           10.000000000000000, -0.30000000000000004 },
7924   { 0.98077556918512687, 2.0000000000000000, 0.50000000000000000,
7925           10.000000000000000, -0.19999999999999996 },
7926   { 0.99019904777750845, 2.0000000000000000, 0.50000000000000000,
7927           10.000000000000000, -0.099999999999999978 },
7928   { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
7929           10.000000000000000, 0.0000000000000000 },
7930   { 1.0102104261941198, 2.0000000000000000, 0.50000000000000000,
7931           10.000000000000000, 0.10000000000000009 },
7932   { 1.0208669540935695, 2.0000000000000000, 0.50000000000000000,
7933           10.000000000000000, 0.19999999999999996 },
7934   { 1.0320118665407505, 2.0000000000000000, 0.50000000000000000,
7935           10.000000000000000, 0.30000000000000004 },
7936   { 1.0436944599504387, 2.0000000000000000, 0.50000000000000000,
7937           10.000000000000000, 0.39999999999999991 },
7938   { 1.0559728828278145, 2.0000000000000000, 0.50000000000000000,
7939           10.000000000000000, 0.50000000000000000 },
7940   { 1.0689166967761712, 2.0000000000000000, 0.50000000000000000,
7941           10.000000000000000, 0.60000000000000009 },
7942   { 1.0826105758119842, 2.0000000000000000, 0.50000000000000000,
7943           10.000000000000000, 0.69999999999999996 },
7944   { 1.0971599106346146, 2.0000000000000000, 0.50000000000000000,
7945           10.000000000000000, 0.80000000000000004 },
7946   { 1.1126998828023964, 2.0000000000000000, 0.50000000000000000,
7947           10.000000000000000, 0.89999999999999991 },
7948 };
7949 
7950 // Test function for a=2.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
7951 template <typename Tp>
test115()7952 void test115()
7953 {
7954   const Tp eps = std::numeric_limits<Tp>::epsilon();
7955   Tp max_abs_diff = -Tp(1);
7956   Tp max_abs_frac = -Tp(1);
7957   unsigned int num_datum = sizeof(data115)
7958                          / sizeof(testcase_hyperg<double>);
7959   for (unsigned int i = 0; i < num_datum; ++i)
7960     {
7961       const Tp f = std::tr1::hyperg(Tp(data115[i].a), Tp(data115[i].b),
7962                    Tp(data115[i].c), Tp(data115[i].x));
7963       const Tp f0 = data115[i].f0;
7964       const Tp diff = f - f0;
7965       if (std::abs(diff) > max_abs_diff)
7966         max_abs_diff = std::abs(diff);
7967       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7968         {
7969           const Tp frac = diff / f0;
7970           if (std::abs(frac) > max_abs_frac)
7971             max_abs_frac = std::abs(frac);
7972         }
7973     }
7974   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7975 }
7976 
7977 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
7978 testcase_hyperg<double> data116[] = {
7979   { 0.52631578947368429, 2.0000000000000000, 1.0000000000000000,
7980           2.0000000000000000, -0.90000000000000002 },
7981   { 0.55555555555555558, 2.0000000000000000, 1.0000000000000000,
7982           2.0000000000000000, -0.80000000000000004 },
7983   { 0.58823529411764708, 2.0000000000000000, 1.0000000000000000,
7984           2.0000000000000000, -0.69999999999999996 },
7985   { 0.62500000000000000, 2.0000000000000000, 1.0000000000000000,
7986           2.0000000000000000, -0.59999999999999998 },
7987   { 0.66666666666666663, 2.0000000000000000, 1.0000000000000000,
7988           2.0000000000000000, -0.50000000000000000 },
7989   { 0.71428571428571430, 2.0000000000000000, 1.0000000000000000,
7990           2.0000000000000000, -0.40000000000000002 },
7991   { 0.76923076923076927, 2.0000000000000000, 1.0000000000000000,
7992           2.0000000000000000, -0.30000000000000004 },
7993   { 0.83333333333333337, 2.0000000000000000, 1.0000000000000000,
7994           2.0000000000000000, -0.19999999999999996 },
7995   { 0.90909090909090906, 2.0000000000000000, 1.0000000000000000,
7996           2.0000000000000000, -0.099999999999999978 },
7997   { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
7998           2.0000000000000000, 0.0000000000000000 },
7999   { 1.1111111111111112, 2.0000000000000000, 1.0000000000000000,
8000           2.0000000000000000, 0.10000000000000009 },
8001   { 1.2500000000000000, 2.0000000000000000, 1.0000000000000000,
8002           2.0000000000000000, 0.19999999999999996 },
8003   { 1.4285714285714286, 2.0000000000000000, 1.0000000000000000,
8004           2.0000000000000000, 0.30000000000000004 },
8005   { 1.6666666666666663, 2.0000000000000000, 1.0000000000000000,
8006           2.0000000000000000, 0.39999999999999991 },
8007   { 2.0000000000000000, 2.0000000000000000, 1.0000000000000000,
8008           2.0000000000000000, 0.50000000000000000 },
8009   { 2.5000000000000004, 2.0000000000000000, 1.0000000000000000,
8010           2.0000000000000000, 0.60000000000000009 },
8011   { 3.3333333333333330, 2.0000000000000000, 1.0000000000000000,
8012           2.0000000000000000, 0.69999999999999996 },
8013   { 5.0000000000000009, 2.0000000000000000, 1.0000000000000000,
8014           2.0000000000000000, 0.80000000000000004 },
8015   { 9.9999999999999929, 2.0000000000000000, 1.0000000000000000,
8016           2.0000000000000000, 0.89999999999999991 },
8017 };
8018 
8019 // Test function for a=2.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
8020 template <typename Tp>
test116()8021 void test116()
8022 {
8023   const Tp eps = std::numeric_limits<Tp>::epsilon();
8024   Tp max_abs_diff = -Tp(1);
8025   Tp max_abs_frac = -Tp(1);
8026   unsigned int num_datum = sizeof(data116)
8027                          / sizeof(testcase_hyperg<double>);
8028   for (unsigned int i = 0; i < num_datum; ++i)
8029     {
8030       const Tp f = std::tr1::hyperg(Tp(data116[i].a), Tp(data116[i].b),
8031                    Tp(data116[i].c), Tp(data116[i].x));
8032       const Tp f0 = data116[i].f0;
8033       const Tp diff = f - f0;
8034       if (std::abs(diff) > max_abs_diff)
8035         max_abs_diff = std::abs(diff);
8036       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8037         {
8038           const Tp frac = diff / f0;
8039           if (std::abs(frac) > max_abs_frac)
8040             max_abs_frac = std::abs(frac);
8041         }
8042     }
8043   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8044 }
8045 
8046 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
8047 testcase_hyperg<double> data117[] = {
8048   { 0.70351947549341520, 2.0000000000000000, 1.0000000000000000,
8049           4.0000000000000000, -0.90000000000000002 },
8050   { 0.72637503722092711, 2.0000000000000000, 1.0000000000000000,
8051           4.0000000000000000, -0.80000000000000004 },
8052   { 0.75099661564391251, 2.0000000000000000, 1.0000000000000000,
8053           4.0000000000000000, -0.69999999999999996 },
8054   { 0.77761647796730871, 2.0000000000000000, 1.0000000000000000,
8055           4.0000000000000000, -0.59999999999999998 },
8056   { 0.80651221621216451, 2.0000000000000000, 1.0000000000000000,
8057           4.0000000000000000, -0.50000000000000000 },
8058   { 0.83801894346580275, 2.0000000000000000, 1.0000000000000000,
8059           4.0000000000000000, -0.40000000000000002 },
8060   { 0.87254582050258467, 2.0000000000000000, 1.0000000000000000,
8061           4.0000000000000000, -0.30000000000000004 },
8062   { 0.91059888544083678, 2.0000000000000000, 1.0000000000000000,
8063           4.0000000000000000, -0.19999999999999996 },
8064   { 0.95281329145592386, 2.0000000000000000, 1.0000000000000000,
8065           4.0000000000000000, -0.099999999999999978 },
8066   { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
8067           4.0000000000000000, 0.0000000000000000 },
8068   { 1.0532154477379738, 2.0000000000000000, 1.0000000000000000,
8069           4.0000000000000000, 0.10000000000000009 },
8070   { 1.1138692114741471, 2.0000000000000000, 1.0000000000000000,
8071           4.0000000000000000, 0.19999999999999996 },
8072   { 1.1838976095305187, 2.0000000000000000, 1.0000000000000000,
8073           4.0000000000000000, 0.30000000000000004 },
8074   { 1.2660586631630237, 2.0000000000000000, 1.0000000000000000,
8075           4.0000000000000000, 0.39999999999999991 },
8076   { 1.3644676665613118, 2.0000000000000000, 1.0000000000000000,
8077           4.0000000000000000, 0.50000000000000000 },
8078   { 1.4856585347316102, 2.0000000000000000, 1.0000000000000000,
8079           4.0000000000000000, 0.60000000000000009 },
8080   { 1.6409590443536872, 2.0000000000000000, 1.0000000000000000,
8081           4.0000000000000000, 0.69999999999999996 },
8082   { 1.8528798927325769, 2.0000000000000000, 1.0000000000000000,
8083           4.0000000000000000, 0.80000000000000004 },
8084   { 2.1789423102929644, 2.0000000000000000, 1.0000000000000000,
8085           4.0000000000000000, 0.89999999999999991 },
8086 };
8087 
8088 // Test function for a=2.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
8089 template <typename Tp>
test117()8090 void test117()
8091 {
8092   const Tp eps = std::numeric_limits<Tp>::epsilon();
8093   Tp max_abs_diff = -Tp(1);
8094   Tp max_abs_frac = -Tp(1);
8095   unsigned int num_datum = sizeof(data117)
8096                          / sizeof(testcase_hyperg<double>);
8097   for (unsigned int i = 0; i < num_datum; ++i)
8098     {
8099       const Tp f = std::tr1::hyperg(Tp(data117[i].a), Tp(data117[i].b),
8100                    Tp(data117[i].c), Tp(data117[i].x));
8101       const Tp f0 = data117[i].f0;
8102       const Tp diff = f - f0;
8103       if (std::abs(diff) > max_abs_diff)
8104         max_abs_diff = std::abs(diff);
8105       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8106         {
8107           const Tp frac = diff / f0;
8108           if (std::abs(frac) > max_abs_frac)
8109             max_abs_frac = std::abs(frac);
8110         }
8111     }
8112   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8113 }
8114 
8115 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
8116 testcase_hyperg<double> data118[] = {
8117   { 0.78068027379106253, 2.0000000000000000, 1.0000000000000000,
8118           6.0000000000000000, -0.90000000000000002 },
8119   { 0.79924541976981278, 2.0000000000000000, 1.0000000000000000,
8120           6.0000000000000000, -0.80000000000000004 },
8121   { 0.81891305585650942, 2.0000000000000000, 1.0000000000000000,
8122           6.0000000000000000, -0.69999999999999996 },
8123   { 0.83979799626213270, 2.0000000000000000, 1.0000000000000000,
8124           6.0000000000000000, -0.59999999999999998 },
8125   { 0.86203315303160166, 2.0000000000000000, 1.0000000000000000,
8126           6.0000000000000000, -0.50000000000000000 },
8127   { 0.88577352485361693, 2.0000000000000000, 1.0000000000000000,
8128           6.0000000000000000, -0.40000000000000002 },
8129   { 0.91120135738402208, 2.0000000000000000, 1.0000000000000000,
8130           6.0000000000000000, -0.30000000000000004 },
8131   { 0.93853291956703588, 2.0000000000000000, 1.0000000000000000,
8132           6.0000000000000000, -0.19999999999999996 },
8133   { 0.96802755388922956, 2.0000000000000000, 1.0000000000000000,
8134           6.0000000000000000, -0.099999999999999978 },
8135   { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
8136           6.0000000000000000, 0.0000000000000000 },
8137   { 1.0348375559194773, 2.0000000000000000, 1.0000000000000000,
8138           6.0000000000000000, 0.10000000000000009 },
8139   { 1.0730246119544820, 2.0000000000000000, 1.0000000000000000,
8140           6.0000000000000000, 0.19999999999999996 },
8141   { 1.1151788396279341, 2.0000000000000000, 1.0000000000000000,
8142           6.0000000000000000, 0.30000000000000004 },
8143   { 1.1621066403893472, 2.0000000000000000, 1.0000000000000000,
8144           6.0000000000000000, 0.39999999999999991 },
8145   { 1.2148922218710421, 2.0000000000000000, 1.0000000000000000,
8146           6.0000000000000000, 0.50000000000000000 },
8147   { 1.2750496810838674, 2.0000000000000000, 1.0000000000000000,
8148           6.0000000000000000, 0.60000000000000009 },
8149   { 1.3448048570872917, 2.0000000000000000, 1.0000000000000000,
8150           6.0000000000000000, 0.69999999999999996 },
8151   { 1.4276833109859521, 2.0000000000000000, 1.0000000000000000,
8152           6.0000000000000000, 0.80000000000000004 },
8153   { 1.5299976259379788, 2.0000000000000000, 1.0000000000000000,
8154           6.0000000000000000, 0.89999999999999991 },
8155 };
8156 
8157 // Test function for a=2.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
8158 template <typename Tp>
test118()8159 void test118()
8160 {
8161   const Tp eps = std::numeric_limits<Tp>::epsilon();
8162   Tp max_abs_diff = -Tp(1);
8163   Tp max_abs_frac = -Tp(1);
8164   unsigned int num_datum = sizeof(data118)
8165                          / sizeof(testcase_hyperg<double>);
8166   for (unsigned int i = 0; i < num_datum; ++i)
8167     {
8168       const Tp f = std::tr1::hyperg(Tp(data118[i].a), Tp(data118[i].b),
8169                    Tp(data118[i].c), Tp(data118[i].x));
8170       const Tp f0 = data118[i].f0;
8171       const Tp diff = f - f0;
8172       if (std::abs(diff) > max_abs_diff)
8173         max_abs_diff = std::abs(diff);
8174       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8175         {
8176           const Tp frac = diff / f0;
8177           if (std::abs(frac) > max_abs_frac)
8178             max_abs_frac = std::abs(frac);
8179         }
8180     }
8181   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8182 }
8183 
8184 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
8185 testcase_hyperg<double> data119[] = {
8186   { 0.82510759951857582, 2.0000000000000000, 1.0000000000000000,
8187           8.0000000000000000, -0.90000000000000002 },
8188   { 0.84072786892782092, 2.0000000000000000, 1.0000000000000000,
8189           8.0000000000000000, -0.80000000000000004 },
8190   { 0.85710884896562356, 2.0000000000000000, 1.0000000000000000,
8191           8.0000000000000000, -0.69999999999999996 },
8192   { 0.87431674418118333, 2.0000000000000000, 1.0000000000000000,
8193           8.0000000000000000, -0.59999999999999998 },
8194   { 0.89242659229727017, 2.0000000000000000, 1.0000000000000000,
8195           8.0000000000000000, -0.50000000000000000 },
8196   { 0.91152392685930339, 2.0000000000000000, 1.0000000000000000,
8197           8.0000000000000000, -0.40000000000000002 },
8198   { 0.93170685950993570, 2.0000000000000000, 1.0000000000000000,
8199           8.0000000000000000, -0.30000000000000004 },
8200   { 0.95308871926790661, 2.0000000000000000, 1.0000000000000000,
8201           8.0000000000000000, -0.19999999999999996 },
8202   { 0.97580144325325802, 2.0000000000000000, 1.0000000000000000,
8203           8.0000000000000000, -0.099999999999999978 },
8204   { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
8205           8.0000000000000000, 0.0000000000000000 },
8206   { 1.0258682619030324, 2.0000000000000000, 1.0000000000000000,
8207           8.0000000000000000, 0.10000000000000009 },
8208   { 1.0536269616706000, 2.0000000000000000, 1.0000000000000000,
8209           8.0000000000000000, 0.19999999999999996 },
8210   { 1.0835447330793833, 2.0000000000000000, 1.0000000000000000,
8211           8.0000000000000000, 0.30000000000000004 },
8212   { 1.1159538758396654, 2.0000000000000000, 1.0000000000000000,
8213           8.0000000000000000, 0.39999999999999991 },
8214   { 1.1512736659291880, 2.0000000000000000, 1.0000000000000000,
8215           8.0000000000000000, 0.50000000000000000 },
8216   { 1.1900463690116090, 2.0000000000000000, 1.0000000000000000,
8217           8.0000000000000000, 0.60000000000000009 },
8218   { 1.2329961591622411, 2.0000000000000000, 1.0000000000000000,
8219           8.0000000000000000, 0.69999999999999996 },
8220   { 1.2811334345669059, 2.0000000000000000, 1.0000000000000000,
8221           8.0000000000000000, 0.80000000000000004 },
8222   { 1.3359629014132051, 2.0000000000000000, 1.0000000000000000,
8223           8.0000000000000000, 0.89999999999999991 },
8224 };
8225 
8226 // Test function for a=2.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
8227 template <typename Tp>
test119()8228 void test119()
8229 {
8230   const Tp eps = std::numeric_limits<Tp>::epsilon();
8231   Tp max_abs_diff = -Tp(1);
8232   Tp max_abs_frac = -Tp(1);
8233   unsigned int num_datum = sizeof(data119)
8234                          / sizeof(testcase_hyperg<double>);
8235   for (unsigned int i = 0; i < num_datum; ++i)
8236     {
8237       const Tp f = std::tr1::hyperg(Tp(data119[i].a), Tp(data119[i].b),
8238                    Tp(data119[i].c), Tp(data119[i].x));
8239       const Tp f0 = data119[i].f0;
8240       const Tp diff = f - f0;
8241       if (std::abs(diff) > max_abs_diff)
8242         max_abs_diff = std::abs(diff);
8243       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8244         {
8245           const Tp frac = diff / f0;
8246           if (std::abs(frac) > max_abs_frac)
8247             max_abs_frac = std::abs(frac);
8248         }
8249     }
8250   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8251 }
8252 
8253 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
8254 testcase_hyperg<double> data120[] = {
8255   { 0.85426123653345876, 2.0000000000000000, 1.0000000000000000,
8256           10.000000000000000, -0.90000000000000002 },
8257   { 0.86774543390930370, 2.0000000000000000, 1.0000000000000000,
8258           10.000000000000000, -0.80000000000000004 },
8259   { 0.88178859537254239, 2.0000000000000000, 1.0000000000000000,
8260           10.000000000000000, -0.69999999999999996 },
8261   { 0.89643269097060951, 2.0000000000000000, 1.0000000000000000,
8262           10.000000000000000, -0.59999999999999998 },
8263   { 0.91172456687216763, 2.0000000000000000, 1.0000000000000000,
8264           10.000000000000000, -0.50000000000000000 },
8265   { 0.92771674975966134, 2.0000000000000000, 1.0000000000000000,
8266           10.000000000000000, -0.40000000000000002 },
8267   { 0.94446842993888647, 2.0000000000000000, 1.0000000000000000,
8268           10.000000000000000, -0.30000000000000004 },
8269   { 0.96204667481937678, 2.0000000000000000, 1.0000000000000000,
8270           10.000000000000000, -0.19999999999999996 },
8271   { 0.98052794339012128, 2.0000000000000000, 1.0000000000000000,
8272           10.000000000000000, -0.099999999999999978 },
8273   { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
8274           10.000000000000000, 0.0000000000000000 },
8275   { 1.0205643671068179, 2.0000000000000000, 1.0000000000000000,
8276           10.000000000000000, 0.10000000000000009 },
8277   { 1.0423395201078882, 2.0000000000000000, 1.0000000000000000,
8278           10.000000000000000, 0.19999999999999996 },
8279   { 1.0654651277885334, 2.0000000000000000, 1.0000000000000000,
8280           10.000000000000000, 0.30000000000000004 },
8281   { 1.0901078068101382, 2.0000000000000000, 1.0000000000000000,
8282           10.000000000000000, 0.39999999999999991 },
8283   { 1.1164691415928940, 2.0000000000000000, 1.0000000000000000,
8284           10.000000000000000, 0.50000000000000000 },
8285   { 1.1447972335326551, 2.0000000000000000, 1.0000000000000000,
8286           10.000000000000000, 0.60000000000000009 },
8287   { 1.1754040384534161, 2.0000000000000000, 1.0000000000000000,
8288           10.000000000000000, 0.69999999999999996 },
8289   { 1.2086928679893112, 2.0000000000000000, 1.0000000000000000,
8290           10.000000000000000, 0.80000000000000004 },
8291   { 1.2452055640510711, 2.0000000000000000, 1.0000000000000000,
8292           10.000000000000000, 0.89999999999999991 },
8293 };
8294 
8295 // Test function for a=2.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
8296 template <typename Tp>
test120()8297 void test120()
8298 {
8299   const Tp eps = std::numeric_limits<Tp>::epsilon();
8300   Tp max_abs_diff = -Tp(1);
8301   Tp max_abs_frac = -Tp(1);
8302   unsigned int num_datum = sizeof(data120)
8303                          / sizeof(testcase_hyperg<double>);
8304   for (unsigned int i = 0; i < num_datum; ++i)
8305     {
8306       const Tp f = std::tr1::hyperg(Tp(data120[i].a), Tp(data120[i].b),
8307                    Tp(data120[i].c), Tp(data120[i].x));
8308       const Tp f0 = data120[i].f0;
8309       const Tp diff = f - f0;
8310       if (std::abs(diff) > max_abs_diff)
8311         max_abs_diff = std::abs(diff);
8312       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8313         {
8314           const Tp frac = diff / f0;
8315           if (std::abs(frac) > max_abs_frac)
8316             max_abs_frac = std::abs(frac);
8317         }
8318     }
8319   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8320 }
8321 
8322 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
8323 testcase_hyperg<double> data121[] = {
8324   { 0.27700831024930750, 2.0000000000000000, 2.0000000000000000,
8325           2.0000000000000000, -0.90000000000000002 },
8326   { 0.30864197530864196, 2.0000000000000000, 2.0000000000000000,
8327           2.0000000000000000, -0.80000000000000004 },
8328   { 0.34602076124567477, 2.0000000000000000, 2.0000000000000000,
8329           2.0000000000000000, -0.69999999999999996 },
8330   { 0.39062499999999994, 2.0000000000000000, 2.0000000000000000,
8331           2.0000000000000000, -0.59999999999999998 },
8332   { 0.44444444444444442, 2.0000000000000000, 2.0000000000000000,
8333           2.0000000000000000, -0.50000000000000000 },
8334   { 0.51020408163265307, 2.0000000000000000, 2.0000000000000000,
8335           2.0000000000000000, -0.40000000000000002 },
8336   { 0.59171597633136097, 2.0000000000000000, 2.0000000000000000,
8337           2.0000000000000000, -0.30000000000000004 },
8338   { 0.69444444444444453, 2.0000000000000000, 2.0000000000000000,
8339           2.0000000000000000, -0.19999999999999996 },
8340   { 0.82644628099173545, 2.0000000000000000, 2.0000000000000000,
8341           2.0000000000000000, -0.099999999999999978 },
8342   { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
8343           2.0000000000000000, 0.0000000000000000 },
8344   { 1.2345679012345681, 2.0000000000000000, 2.0000000000000000,
8345           2.0000000000000000, 0.10000000000000009 },
8346   { 1.5624999999999998, 2.0000000000000000, 2.0000000000000000,
8347           2.0000000000000000, 0.19999999999999996 },
8348   { 2.0408163265306127, 2.0000000000000000, 2.0000000000000000,
8349           2.0000000000000000, 0.30000000000000004 },
8350   { 2.7777777777777768, 2.0000000000000000, 2.0000000000000000,
8351           2.0000000000000000, 0.39999999999999991 },
8352   { 4.0000000000000000, 2.0000000000000000, 2.0000000000000000,
8353           2.0000000000000000, 0.50000000000000000 },
8354   { 6.2500000000000036, 2.0000000000000000, 2.0000000000000000,
8355           2.0000000000000000, 0.60000000000000009 },
8356   { 11.111111111111109, 2.0000000000000000, 2.0000000000000000,
8357           2.0000000000000000, 0.69999999999999996 },
8358   { 25.000000000000007, 2.0000000000000000, 2.0000000000000000,
8359           2.0000000000000000, 0.80000000000000004 },
8360   { 99.999999999999872, 2.0000000000000000, 2.0000000000000000,
8361           2.0000000000000000, 0.89999999999999991 },
8362 };
8363 
8364 // Test function for a=2.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
8365 template <typename Tp>
test121()8366 void test121()
8367 {
8368   const Tp eps = std::numeric_limits<Tp>::epsilon();
8369   Tp max_abs_diff = -Tp(1);
8370   Tp max_abs_frac = -Tp(1);
8371   unsigned int num_datum = sizeof(data121)
8372                          / sizeof(testcase_hyperg<double>);
8373   for (unsigned int i = 0; i < num_datum; ++i)
8374     {
8375       const Tp f = std::tr1::hyperg(Tp(data121[i].a), Tp(data121[i].b),
8376                    Tp(data121[i].c), Tp(data121[i].x));
8377       const Tp f0 = data121[i].f0;
8378       const Tp diff = f - f0;
8379       if (std::abs(diff) > max_abs_diff)
8380         max_abs_diff = std::abs(diff);
8381       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8382         {
8383           const Tp frac = diff / f0;
8384           if (std::abs(frac) > max_abs_frac)
8385             max_abs_frac = std::abs(frac);
8386         }
8387     }
8388   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8389 }
8390 
8391 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
8392 testcase_hyperg<double> data122[] = {
8393   { 0.50515448477320868, 2.0000000000000000, 2.0000000000000000,
8394           4.0000000000000000, -0.90000000000000002 },
8395   { 0.53674994210078020, 2.0000000000000000, 2.0000000000000000,
8396           4.0000000000000000, -0.80000000000000004 },
8397   { 0.57194655162437447, 2.0000000000000000, 2.0000000000000000,
8398           4.0000000000000000, -0.69999999999999996 },
8399   { 0.61137322330312327, 2.0000000000000000, 2.0000000000000000,
8400           4.0000000000000000, -0.59999999999999998 },
8401   { 0.65581297297972574, 2.0000000000000000, 2.0000000000000000,
8402           4.0000000000000000, -0.50000000000000000 },
8403   { 0.70625323977290932, 2.0000000000000000, 2.0000000000000000,
8404           4.0000000000000000, -0.40000000000000002 },
8405   { 0.76395739449542643, 2.0000000000000000, 2.0000000000000000,
8406           4.0000000000000000, -0.30000000000000004 },
8407   { 0.83056871002513311, 2.0000000000000000, 2.0000000000000000,
8408           4.0000000000000000, -0.19999999999999996 },
8409   { 0.90826553449323655, 2.0000000000000000, 2.0000000000000000,
8410           4.0000000000000000, -0.099999999999999978 },
8411   { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
8412           4.0000000000000000, 0.0000000000000000 },
8413   { 1.1098784992198341, 2.0000000000000000, 2.0000000000000000,
8414           4.0000000000000000, 0.10000000000000009 },
8415   { 1.2437942741831700, 2.0000000000000000, 2.0000000000000000,
8416           4.0000000000000000, 0.19999999999999996 },
8417   { 1.4105343768544543, 2.0000000000000000, 2.0000000000000000,
8418           4.0000000000000000, 0.30000000000000004 },
8419   { 1.6238435648986016, 2.0000000000000000, 2.0000000000000000,
8420           4.0000000000000000, 0.39999999999999991 },
8421   { 1.9065970003160624, 2.0000000000000000, 2.0000000000000000,
8422           4.0000000000000000, 0.50000000000000000 },
8423   { 2.3001951284393627, 2.0000000000000000, 2.0000000000000000,
8424           4.0000000000000000, 0.60000000000000009 },
8425   { 2.8891774744673464, 2.0000000000000000, 2.0000000000000000,
8426           4.0000000000000000, 0.69999999999999996 },
8427   { 3.8827206436045336, 2.0000000000000000, 2.0000000000000000,
8428           4.0000000000000000, 0.80000000000000004 },
8429   { 6.0316345867773542, 2.0000000000000000, 2.0000000000000000,
8430           4.0000000000000000, 0.89999999999999991 },
8431 };
8432 
8433 // Test function for a=2.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
8434 template <typename Tp>
test122()8435 void test122()
8436 {
8437   const Tp eps = std::numeric_limits<Tp>::epsilon();
8438   Tp max_abs_diff = -Tp(1);
8439   Tp max_abs_frac = -Tp(1);
8440   unsigned int num_datum = sizeof(data122)
8441                          / sizeof(testcase_hyperg<double>);
8442   for (unsigned int i = 0; i < num_datum; ++i)
8443     {
8444       const Tp f = std::tr1::hyperg(Tp(data122[i].a), Tp(data122[i].b),
8445                    Tp(data122[i].c), Tp(data122[i].x));
8446       const Tp f0 = data122[i].f0;
8447       const Tp diff = f - f0;
8448       if (std::abs(diff) > max_abs_diff)
8449         max_abs_diff = std::abs(diff);
8450       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8451         {
8452           const Tp frac = diff / f0;
8453           if (std::abs(frac) > max_abs_frac)
8454             max_abs_frac = std::abs(frac);
8455         }
8456     }
8457   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8458 }
8459 
8460 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
8461 testcase_hyperg<double> data123[] = {
8462   { 0.61824560969673303, 2.0000000000000000, 2.0000000000000000,
8463           6.0000000000000000, -0.90000000000000002 },
8464   { 0.64645665839161048, 2.0000000000000000, 2.0000000000000000,
8465           6.0000000000000000, -0.80000000000000004 },
8466   { 0.67712272792612083, 2.0000000000000000, 2.0000000000000000,
8467           6.0000000000000000, -0.69999999999999996 },
8468   { 0.71058076074636822, 2.0000000000000000, 2.0000000000000000,
8469           6.0000000000000000, -0.59999999999999998 },
8470   { 0.74723387423852861, 2.0000000000000000, 2.0000000000000000,
8471           6.0000000000000000, -0.50000000000000000 },
8472   { 0.78756892188863126, 2.0000000000000000, 2.0000000000000000,
8473           6.0000000000000000, -0.40000000000000002 },
8474   { 0.83218012557592713, 2.0000000000000000, 2.0000000000000000,
8475           6.0000000000000000, -0.30000000000000004 },
8476   { 0.88180144818204143, 2.0000000000000000, 2.0000000000000000,
8477           6.0000000000000000, -0.19999999999999996 },
8478   { 0.93735184459468934, 2.0000000000000000, 2.0000000000000000,
8479           6.0000000000000000, -0.099999999999999978 },
8480   { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
8481           6.0000000000000000, 0.0000000000000000 },
8482   { 1.0712594799044883, 2.0000000000000000, 2.0000000000000000,
8483           6.0000000000000000, 0.10000000000000009 },
8484   { 1.1531330932162096, 2.0000000000000000, 2.0000000000000000,
8485           6.0000000000000000, 0.19999999999999996 },
8486   { 1.2483404191094898, 2.0000000000000000, 2.0000000000000000,
8487           6.0000000000000000, 0.30000000000000004 },
8488   { 1.3606934909972501, 2.0000000000000000, 2.0000000000000000,
8489           6.0000000000000000, 0.39999999999999991 },
8490   { 1.4957544469027071, 2.0000000000000000, 2.0000000000000000,
8491           6.0000000000000000, 0.50000000000000000 },
8492   { 1.6620777107871287, 2.0000000000000000, 2.0000000000000000,
8493           6.0000000000000000, 0.60000000000000009 },
8494   { 1.8738132387064506, 2.0000000000000000, 2.0000000000000000,
8495           6.0000000000000000, 0.69999999999999996 },
8496   { 2.1570670242247409, 2.0000000000000000, 2.0000000000000000,
8497           6.0000000000000000, 0.80000000000000004 },
8498   { 2.5700735959225494, 2.0000000000000000, 2.0000000000000000,
8499           6.0000000000000000, 0.89999999999999991 },
8500 };
8501 
8502 // Test function for a=2.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
8503 template <typename Tp>
test123()8504 void test123()
8505 {
8506   const Tp eps = std::numeric_limits<Tp>::epsilon();
8507   Tp max_abs_diff = -Tp(1);
8508   Tp max_abs_frac = -Tp(1);
8509   unsigned int num_datum = sizeof(data123)
8510                          / sizeof(testcase_hyperg<double>);
8511   for (unsigned int i = 0; i < num_datum; ++i)
8512     {
8513       const Tp f = std::tr1::hyperg(Tp(data123[i].a), Tp(data123[i].b),
8514                    Tp(data123[i].c), Tp(data123[i].x));
8515       const Tp f0 = data123[i].f0;
8516       const Tp diff = f - f0;
8517       if (std::abs(diff) > max_abs_diff)
8518         max_abs_diff = std::abs(diff);
8519       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8520         {
8521           const Tp frac = diff / f0;
8522           if (std::abs(frac) > max_abs_frac)
8523             max_abs_frac = std::abs(frac);
8524         }
8525     }
8526   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8527 }
8528 
8529 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
8530 testcase_hyperg<double> data124[] = {
8531   { 0.68776713859043437, 2.0000000000000000, 2.0000000000000000,
8532           8.0000000000000000, -0.90000000000000002 },
8533   { 0.71280582849489826, 2.0000000000000000, 2.0000000000000000,
8534           8.0000000000000000, -0.80000000000000004 },
8535   { 0.73962983054724929, 2.0000000000000000, 2.0000000000000000,
8536           8.0000000000000000, -0.69999999999999996 },
8537   { 0.76844343025262085, 2.0000000000000000, 2.0000000000000000,
8538           8.0000000000000000, -0.59999999999999998 },
8539   { 0.79948476671182911, 2.0000000000000000, 2.0000000000000000,
8540           8.0000000000000000, -0.50000000000000000 },
8541   { 0.83303347721461229, 2.0000000000000000, 2.0000000000000000,
8542           8.0000000000000000, -0.40000000000000002 },
8543   { 0.86942060391338782, 2.0000000000000000, 2.0000000000000000,
8544           8.0000000000000000, -0.30000000000000004 },
8545   { 0.90904161711581655, 2.0000000000000000, 2.0000000000000000,
8546           8.0000000000000000, -0.19999999999999996 },
8547   { 0.95237381468647742, 2.0000000000000000, 2.0000000000000000,
8548           8.0000000000000000, -0.099999999999999978 },
8549   { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
8550           8.0000000000000000, 0.0000000000000000 },
8551   { 1.0526413941912305, 2.0000000000000000, 2.0000000000000000,
8552           8.0000000000000000, 0.10000000000000009 },
8553   { 1.1112045278881502, 2.0000000000000000, 2.0000000000000000,
8554           8.0000000000000000, 0.19999999999999996 },
8555   { 1.1768500306393046, 2.0000000000000000, 2.0000000000000000,
8556           8.0000000000000000, 0.30000000000000004 },
8557   { 1.2510971588297888, 2.0000000000000000, 2.0000000000000000,
8558           8.0000000000000000, 0.39999999999999991 },
8559   { 1.3359896747789315, 2.0000000000000000, 2.0000000000000000,
8560           8.0000000000000000, 0.50000000000000000 },
8561   { 1.4343740183432725, 2.0000000000000000, 2.0000000000000000,
8562           8.0000000000000000, 0.60000000000000009 },
8563   { 1.5504011881337365, 2.0000000000000000, 2.0000000000000000,
8564           8.0000000000000000, 0.69999999999999996 },
8565   { 1.6905307012604318, 2.0000000000000000, 2.0000000000000000,
8566           8.0000000000000000, 0.80000000000000004 },
8567   { 1.8658920279264424, 2.0000000000000000, 2.0000000000000000,
8568           8.0000000000000000, 0.89999999999999991 },
8569 };
8570 
8571 // Test function for a=2.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
8572 template <typename Tp>
test124()8573 void test124()
8574 {
8575   const Tp eps = std::numeric_limits<Tp>::epsilon();
8576   Tp max_abs_diff = -Tp(1);
8577   Tp max_abs_frac = -Tp(1);
8578   unsigned int num_datum = sizeof(data124)
8579                          / sizeof(testcase_hyperg<double>);
8580   for (unsigned int i = 0; i < num_datum; ++i)
8581     {
8582       const Tp f = std::tr1::hyperg(Tp(data124[i].a), Tp(data124[i].b),
8583                    Tp(data124[i].c), Tp(data124[i].x));
8584       const Tp f0 = data124[i].f0;
8585       const Tp diff = f - f0;
8586       if (std::abs(diff) > max_abs_diff)
8587         max_abs_diff = std::abs(diff);
8588       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8589         {
8590           const Tp frac = diff / f0;
8591           if (std::abs(frac) > max_abs_frac)
8592             max_abs_frac = std::abs(frac);
8593         }
8594     }
8595   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8596 }
8597 
8598 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
8599 testcase_hyperg<double> data125[] = {
8600   { 0.73530262886958830, 2.0000000000000000, 2.0000000000000000,
8601           10.000000000000000, -0.90000000000000002 },
8602   { 0.75768898977673638, 2.0000000000000000, 2.0000000000000000,
8603           10.000000000000000, -0.80000000000000004 },
8604   { 0.78143483544640069, 2.0000000000000000, 2.0000000000000000,
8605           10.000000000000000, -0.69999999999999996 },
8606   { 0.80667428603297209, 2.0000000000000000, 2.0000000000000000,
8607           10.000000000000000, -0.59999999999999998 },
8608   { 0.83356078772438325, 2.0000000000000000, 2.0000000000000000,
8609           10.000000000000000, -0.50000000000000000 },
8610   { 0.86227093001346145, 2.0000000000000000, 2.0000000000000000,
8611           10.000000000000000, -0.40000000000000002 },
8612   { 0.89300925500556994, 2.0000000000000000, 2.0000000000000000,
8613           10.000000000000000, -0.30000000000000004 },
8614   { 0.92601438873425990, 2.0000000000000000, 2.0000000000000000,
8615           10.000000000000000, -0.19999999999999996 },
8616   { 0.96156696230910810, 2.0000000000000000, 2.0000000000000000,
8617           10.000000000000000, -0.099999999999999978 },
8618   { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
8619           10.000000000000000, 0.0000000000000000 },
8620   { 1.0417127776179342, 2.0000000000000000, 2.0000000000000000,
8621           10.000000000000000, 0.10000000000000009 },
8622   { 1.0871896789480930, 2.0000000000000000, 2.0000000000000000,
8623           10.000000000000000, 0.19999999999999996 },
8624   { 1.1370264514689949, 2.0000000000000000, 2.0000000000000000,
8625           10.000000000000000, 0.30000000000000004 },
8626   { 1.1919677804049154, 2.0000000000000000, 2.0000000000000000,
8627           10.000000000000000, 0.39999999999999991 },
8628   { 1.2529628761065934, 2.0000000000000000, 2.0000000000000000,
8629           10.000000000000000, 0.50000000000000000 },
8630   { 1.3212511796458866, 2.0000000000000000, 2.0000000000000000,
8631           10.000000000000000, 0.60000000000000009 },
8632   { 1.3985017309668506, 2.0000000000000000, 2.0000000000000000,
8633           10.000000000000000, 0.69999999999999996 },
8634   { 1.4870567523847895, 2.0000000000000000, 2.0000000000000000,
8635           10.000000000000000, 0.80000000000000004 },
8636   { 1.5904049523738040, 2.0000000000000000, 2.0000000000000000,
8637           10.000000000000000, 0.89999999999999991 },
8638 };
8639 
8640 // Test function for a=2.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
8641 template <typename Tp>
test125()8642 void test125()
8643 {
8644   const Tp eps = std::numeric_limits<Tp>::epsilon();
8645   Tp max_abs_diff = -Tp(1);
8646   Tp max_abs_frac = -Tp(1);
8647   unsigned int num_datum = sizeof(data125)
8648                          / sizeof(testcase_hyperg<double>);
8649   for (unsigned int i = 0; i < num_datum; ++i)
8650     {
8651       const Tp f = std::tr1::hyperg(Tp(data125[i].a), Tp(data125[i].b),
8652                    Tp(data125[i].c), Tp(data125[i].x));
8653       const Tp f0 = data125[i].f0;
8654       const Tp diff = f - f0;
8655       if (std::abs(diff) > max_abs_diff)
8656         max_abs_diff = std::abs(diff);
8657       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8658         {
8659           const Tp frac = diff / f0;
8660           if (std::abs(frac) > max_abs_frac)
8661             max_abs_frac = std::abs(frac);
8662         }
8663     }
8664   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8665 }
8666 
8667 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
8668 testcase_hyperg<double> data126[] = {
8669   { 0.040386107340619266, 2.0000000000000000, 5.0000000000000000,
8670           2.0000000000000000, -0.90000000000000002 },
8671   { 0.052922149401344633, 2.0000000000000000, 5.0000000000000000,
8672           2.0000000000000000, -0.80000000000000004 },
8673   { 0.070429627772374270, 2.0000000000000000, 5.0000000000000000,
8674           2.0000000000000000, -0.69999999999999996 },
8675   { 0.095367431640624972, 2.0000000000000000, 5.0000000000000000,
8676           2.0000000000000000, -0.59999999999999998 },
8677   { 0.13168724279835387, 2.0000000000000000, 5.0000000000000000,
8678           2.0000000000000000, -0.50000000000000000 },
8679   { 0.18593443208187066, 2.0000000000000000, 5.0000000000000000,
8680           2.0000000000000000, -0.40000000000000002 },
8681   { 0.26932907434290437, 2.0000000000000000, 5.0000000000000000,
8682           2.0000000000000000, -0.30000000000000004 },
8683   { 0.40187757201646096, 2.0000000000000000, 5.0000000000000000,
8684           2.0000000000000000, -0.19999999999999996 },
8685   { 0.62092132305915493, 2.0000000000000000, 5.0000000000000000,
8686           2.0000000000000000, -0.099999999999999978 },
8687   { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
8688           2.0000000000000000, 0.0000000000000000 },
8689   { 1.6935087808430296, 2.0000000000000000, 5.0000000000000000,
8690           2.0000000000000000, 0.10000000000000009 },
8691   { 3.0517578124999991, 2.0000000000000000, 5.0000000000000000,
8692           2.0000000000000000, 0.19999999999999996 },
8693   { 5.9499018266198629, 2.0000000000000000, 5.0000000000000000,
8694           2.0000000000000000, 0.30000000000000004 },
8695   { 12.860082304526737, 2.0000000000000000, 5.0000000000000000,
8696           2.0000000000000000, 0.39999999999999991 },
8697   { 32.000000000000000, 2.0000000000000000, 5.0000000000000000,
8698           2.0000000000000000, 0.50000000000000000 },
8699   { 97.656250000000114, 2.0000000000000000, 5.0000000000000000,
8700           2.0000000000000000, 0.60000000000000009 },
8701   { 411.52263374485580, 2.0000000000000000, 5.0000000000000000,
8702           2.0000000000000000, 0.69999999999999996 },
8703   { 3124.9999999999991, 2.0000000000000000, 5.0000000000000000,
8704           2.0000000000000000, 0.80000000000000004 },
8705   { 99999.999999999665, 2.0000000000000000, 5.0000000000000000,
8706           2.0000000000000000, 0.89999999999999991 },
8707 };
8708 
8709 // Test function for a=2.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
8710 template <typename Tp>
test126()8711 void test126()
8712 {
8713   const Tp eps = std::numeric_limits<Tp>::epsilon();
8714   Tp max_abs_diff = -Tp(1);
8715   Tp max_abs_frac = -Tp(1);
8716   unsigned int num_datum = sizeof(data126)
8717                          / sizeof(testcase_hyperg<double>);
8718   for (unsigned int i = 0; i < num_datum; ++i)
8719     {
8720       const Tp f = std::tr1::hyperg(Tp(data126[i].a), Tp(data126[i].b),
8721                    Tp(data126[i].c), Tp(data126[i].x));
8722       const Tp f0 = data126[i].f0;
8723       const Tp diff = f - f0;
8724       if (std::abs(diff) > max_abs_diff)
8725         max_abs_diff = std::abs(diff);
8726       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8727         {
8728           const Tp frac = diff / f0;
8729           if (std::abs(frac) > max_abs_frac)
8730             max_abs_frac = std::abs(frac);
8731         }
8732     }
8733   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8734 }
8735 
8736 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
8737 testcase_hyperg<double> data127[] = {
8738   { 0.21140107887447140, 2.0000000000000000, 5.0000000000000000,
8739           4.0000000000000000, -0.90000000000000002 },
8740   { 0.24005486968449935, 2.0000000000000000, 5.0000000000000000,
8741           4.0000000000000000, -0.80000000000000004 },
8742   { 0.27478119275391821, 2.0000000000000000, 5.0000000000000000,
8743           4.0000000000000000, -0.69999999999999996 },
8744   { 0.31738281249999994, 2.0000000000000000, 5.0000000000000000,
8745           4.0000000000000000, -0.59999999999999998 },
8746   { 0.37037037037037035, 2.0000000000000000, 5.0000000000000000,
8747           4.0000000000000000, -0.50000000000000000 },
8748   { 0.43731778425655982, 2.0000000000000000, 5.0000000000000000,
8749           4.0000000000000000, -0.40000000000000002 },
8750   { 0.52344105598543444, 2.0000000000000000, 5.0000000000000000,
8751           4.0000000000000000, -0.30000000000000004 },
8752   { 0.63657407407407429, 2.0000000000000000, 5.0000000000000000,
8753           4.0000000000000000, -0.19999999999999996 },
8754   { 0.78888054094665638, 2.0000000000000000, 5.0000000000000000,
8755           4.0000000000000000, -0.099999999999999978 },
8756   { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
8757           4.0000000000000000, 0.0000000000000000 },
8758   { 1.3031550068587108, 2.0000000000000000, 5.0000000000000000,
8759           4.0000000000000000, 0.10000000000000009 },
8760   { 1.7578125000000002, 2.0000000000000000, 5.0000000000000000,
8761           4.0000000000000000, 0.19999999999999996 },
8762   { 2.4781341107871717, 2.0000000000000000, 5.0000000000000000,
8763           4.0000000000000000, 0.30000000000000004 },
8764   { 3.7037037037037037, 2.0000000000000000, 5.0000000000000000,
8765           4.0000000000000000, 0.39999999999999991 },
8766   { 5.9999999999999982, 2.0000000000000000, 5.0000000000000000,
8767           4.0000000000000000, 0.50000000000000000 },
8768   { 10.937500000000005, 2.0000000000000000, 5.0000000000000000,
8769           4.0000000000000000, 0.60000000000000009 },
8770   { 24.074074074074076, 2.0000000000000000, 5.0000000000000000,
8771           4.0000000000000000, 0.69999999999999996 },
8772   { 74.999999999999957, 2.0000000000000000, 5.0000000000000000,
8773           4.0000000000000000, 0.80000000000000004 },
8774   { 549.99999999999670, 2.0000000000000000, 5.0000000000000000,
8775           4.0000000000000000, 0.89999999999999991 },
8776 };
8777 
8778 // Test function for a=2.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
8779 template <typename Tp>
test127()8780 void test127()
8781 {
8782   const Tp eps = std::numeric_limits<Tp>::epsilon();
8783   Tp max_abs_diff = -Tp(1);
8784   Tp max_abs_frac = -Tp(1);
8785   unsigned int num_datum = sizeof(data127)
8786                          / sizeof(testcase_hyperg<double>);
8787   for (unsigned int i = 0; i < num_datum; ++i)
8788     {
8789       const Tp f = std::tr1::hyperg(Tp(data127[i].a), Tp(data127[i].b),
8790                    Tp(data127[i].c), Tp(data127[i].x));
8791       const Tp f0 = data127[i].f0;
8792       const Tp diff = f - f0;
8793       if (std::abs(diff) > max_abs_diff)
8794         max_abs_diff = std::abs(diff);
8795       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8796         {
8797           const Tp frac = diff / f0;
8798           if (std::abs(frac) > max_abs_frac)
8799             max_abs_frac = std::abs(frac);
8800         }
8801     }
8802   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8803 }
8804 
8805 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
8806 testcase_hyperg<double> data128[] = {
8807   { 0.33250915203252107, 2.0000000000000000, 5.0000000000000000,
8808           6.0000000000000000, -0.90000000000000002 },
8809   { 0.36566851047721960, 2.0000000000000000, 5.0000000000000000,
8810           6.0000000000000000, -0.80000000000000004 },
8811   { 0.40414812182437942, 2.0000000000000000, 5.0000000000000000,
8812           6.0000000000000000, -0.69999999999999996 },
8813   { 0.44916943268118470, 2.0000000000000000, 5.0000000000000000,
8814           6.0000000000000000, -0.59999999999999998 },
8815   { 0.50233081077479569, 2.0000000000000000, 5.0000000000000000,
8816           6.0000000000000000, -0.50000000000000000 },
8817   { 0.56575808728873322, 2.0000000000000000, 5.0000000000000000,
8818           6.0000000000000000, -0.40000000000000002 },
8819   { 0.64233106844971422, 2.0000000000000000, 5.0000000000000000,
8820           6.0000000000000000, -0.30000000000000004 },
8821   { 0.73603371116919514, 2.0000000000000000, 5.0000000000000000,
8822           6.0000000000000000, -0.19999999999999996 },
8823   { 0.85251256240112439, 2.0000000000000000, 5.0000000000000000,
8824           6.0000000000000000, -0.099999999999999978 },
8825   { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
8826           6.0000000000000000, 0.0000000000000000 },
8827   { 1.1909065696197674, 2.0000000000000000, 5.0000000000000000,
8828           6.0000000000000000, 0.10000000000000009 },
8829   { 1.4447095285569311, 2.0000000000000000, 5.0000000000000000,
8830           6.0000000000000000, 0.19999999999999996 },
8831   { 1.7935243137840653, 2.0000000000000000, 5.0000000000000000,
8832           6.0000000000000000, 0.30000000000000004 },
8833   { 2.2937035820494454, 2.0000000000000000, 5.0000000000000000,
8834           6.0000000000000000, 0.39999999999999991 },
8835   { 3.0524711083016687, 2.0000000000000000, 5.0000000000000000,
8836           6.0000000000000000, 0.50000000000000000 },
8837   { 4.2976512669354259, 2.0000000000000000, 5.0000000000000000,
8838           6.0000000000000000, 0.60000000000000009 },
8839   { 6.5977107563194677, 2.0000000000000000, 5.0000000000000000,
8840           6.0000000000000000, 0.69999999999999996 },
8841   { 11.793747206577530, 2.0000000000000000, 5.0000000000000000,
8842           6.0000000000000000, 0.80000000000000004 },
8843   { 29.997625937982058, 2.0000000000000000, 5.0000000000000000,
8844           6.0000000000000000, 0.89999999999999991 },
8845 };
8846 
8847 // Test function for a=2.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
8848 template <typename Tp>
test128()8849 void test128()
8850 {
8851   const Tp eps = std::numeric_limits<Tp>::epsilon();
8852   Tp max_abs_diff = -Tp(1);
8853   Tp max_abs_frac = -Tp(1);
8854   unsigned int num_datum = sizeof(data128)
8855                          / sizeof(testcase_hyperg<double>);
8856   for (unsigned int i = 0; i < num_datum; ++i)
8857     {
8858       const Tp f = std::tr1::hyperg(Tp(data128[i].a), Tp(data128[i].b),
8859                    Tp(data128[i].c), Tp(data128[i].x));
8860       const Tp f0 = data128[i].f0;
8861       const Tp diff = f - f0;
8862       if (std::abs(diff) > max_abs_diff)
8863         max_abs_diff = std::abs(diff);
8864       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8865         {
8866           const Tp frac = diff / f0;
8867           if (std::abs(frac) > max_abs_frac)
8868             max_abs_frac = std::abs(frac);
8869         }
8870     }
8871   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8872 }
8873 
8874 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
8875 testcase_hyperg<double> data129[] = {
8876   { 0.42108197362250305, 2.0000000000000000, 5.0000000000000000,
8877           8.0000000000000000, -0.90000000000000002 },
8878   { 0.45503172013983051, 2.0000000000000000, 5.0000000000000000,
8879           8.0000000000000000, -0.80000000000000004 },
8880   { 0.49345609813624303, 2.0000000000000000, 5.0000000000000000,
8881           8.0000000000000000, -0.69999999999999996 },
8882   { 0.53720880551221295, 2.0000000000000000, 5.0000000000000000,
8883           8.0000000000000000, -0.59999999999999998 },
8884   { 0.58736431524847466, 2.0000000000000000, 5.0000000000000000,
8885           8.0000000000000000, -0.50000000000000000 },
8886   { 0.64529222467897962, 2.0000000000000000, 5.0000000000000000,
8887           8.0000000000000000, -0.40000000000000002 },
8888   { 0.71276337354393904, 2.0000000000000000, 5.0000000000000000,
8889           8.0000000000000000, -0.30000000000000004 },
8890   { 0.79210466220795306, 2.0000000000000000, 5.0000000000000000,
8891           8.0000000000000000, -0.19999999999999996 },
8892   { 0.88643063455510596, 2.0000000000000000, 5.0000000000000000,
8893           8.0000000000000000, -0.099999999999999978 },
8894   { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
8895           8.0000000000000000, 0.0000000000000000 },
8896   { 1.1387832139040652, 2.0000000000000000, 5.0000000000000000,
8897           8.0000000000000000, 0.10000000000000009 },
8898   { 1.3114025920844752, 2.0000000000000000, 5.0000000000000000,
8899           8.0000000000000000, 0.19999999999999996 },
8900   { 1.5307655016768162, 2.0000000000000000, 5.0000000000000000,
8901           8.0000000000000000, 0.30000000000000004 },
8902   { 1.8170727950333345, 2.0000000000000000, 5.0000000000000000,
8903           8.0000000000000000, 0.39999999999999991 },
8904   { 2.2037865486700836, 2.0000000000000000, 5.0000000000000000,
8905           8.0000000000000000, 0.50000000000000000 },
8906   { 2.7506766056439380, 2.0000000000000000, 5.0000000000000000,
8907           8.0000000000000000, 0.60000000000000009 },
8908   { 3.5764534935716972, 2.0000000000000000, 5.0000000000000000,
8909           8.0000000000000000, 0.69999999999999996 },
8910   { 4.9587762302155403, 2.0000000000000000, 5.0000000000000000,
8911           8.0000000000000000, 0.80000000000000004 },
8912   { 7.7740847924166800, 2.0000000000000000, 5.0000000000000000,
8913           8.0000000000000000, 0.89999999999999991 },
8914 };
8915 
8916 // Test function for a=2.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
8917 template <typename Tp>
test129()8918 void test129()
8919 {
8920   const Tp eps = std::numeric_limits<Tp>::epsilon();
8921   Tp max_abs_diff = -Tp(1);
8922   Tp max_abs_frac = -Tp(1);
8923   unsigned int num_datum = sizeof(data129)
8924                          / sizeof(testcase_hyperg<double>);
8925   for (unsigned int i = 0; i < num_datum; ++i)
8926     {
8927       const Tp f = std::tr1::hyperg(Tp(data129[i].a), Tp(data129[i].b),
8928                    Tp(data129[i].c), Tp(data129[i].x));
8929       const Tp f0 = data129[i].f0;
8930       const Tp diff = f - f0;
8931       if (std::abs(diff) > max_abs_diff)
8932         max_abs_diff = std::abs(diff);
8933       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8934         {
8935           const Tp frac = diff / f0;
8936           if (std::abs(frac) > max_abs_frac)
8937             max_abs_frac = std::abs(frac);
8938         }
8939     }
8940   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8941 }
8942 
8943 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
8944 testcase_hyperg<double> data130[] = {
8945   { 0.48860241312958425, 2.0000000000000000, 5.0000000000000000,
8946           10.000000000000000, -0.90000000000000002 },
8947   { 0.52193382517068487, 2.0000000000000000, 5.0000000000000000,
8948           10.000000000000000, -0.80000000000000004 },
8949   { 0.55902375003954219, 2.0000000000000000, 5.0000000000000000,
8950           10.000000000000000, -0.69999999999999996 },
8951   { 0.60049055150230346, 2.0000000000000000, 5.0000000000000000,
8952           10.000000000000000, -0.59999999999999998 },
8953   { 0.64709127927203480, 2.0000000000000000, 5.0000000000000000,
8954           10.000000000000000, -0.50000000000000000 },
8955   { 0.69976233335368998, 2.0000000000000000, 5.0000000000000000,
8956           10.000000000000000, -0.40000000000000002 },
8957   { 0.75967529501081055, 2.0000000000000000, 5.0000000000000000,
8958           10.000000000000000, -0.30000000000000004 },
8959   { 0.82831498895254407, 2.0000000000000000, 5.0000000000000000,
8960           10.000000000000000, -0.19999999999999996 },
8961   { 0.90759090169653933, 2.0000000000000000, 5.0000000000000000,
8962           10.000000000000000, -0.099999999999999978 },
8963   { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
8964           10.000000000000000, 0.0000000000000000 },
8965   { 1.1088712278667465, 2.0000000000000000, 5.0000000000000000,
8966           10.000000000000000, 0.10000000000000009 },
8967   { 1.2387445478440853, 2.0000000000000000, 5.0000000000000000,
8968           10.000000000000000, 0.19999999999999996 },
8969   { 1.3959812720437546, 2.0000000000000000, 5.0000000000000000,
8970           10.000000000000000, 0.30000000000000004 },
8971   { 1.5897930661091164, 2.0000000000000000, 5.0000000000000000,
8972           10.000000000000000, 0.39999999999999991 },
8973   { 1.8340789380307454, 2.0000000000000000, 5.0000000000000000,
8974           10.000000000000000, 0.50000000000000000 },
8975   { 2.1509548085970764, 2.0000000000000000, 5.0000000000000000,
8976           10.000000000000000, 0.60000000000000009 },
8977   { 2.5782406951207504, 2.0000000000000000, 5.0000000000000000,
8978           10.000000000000000, 0.69999999999999996 },
8979   { 3.1877847194242737, 2.0000000000000000, 5.0000000000000000,
8980           10.000000000000000, 0.80000000000000004 },
8981   { 4.1421596631676900, 2.0000000000000000, 5.0000000000000000,
8982           10.000000000000000, 0.89999999999999991 },
8983 };
8984 
8985 // Test function for a=2.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
8986 template <typename Tp>
test130()8987 void test130()
8988 {
8989   const Tp eps = std::numeric_limits<Tp>::epsilon();
8990   Tp max_abs_diff = -Tp(1);
8991   Tp max_abs_frac = -Tp(1);
8992   unsigned int num_datum = sizeof(data130)
8993                          / sizeof(testcase_hyperg<double>);
8994   for (unsigned int i = 0; i < num_datum; ++i)
8995     {
8996       const Tp f = std::tr1::hyperg(Tp(data130[i].a), Tp(data130[i].b),
8997                    Tp(data130[i].c), Tp(data130[i].x));
8998       const Tp f0 = data130[i].f0;
8999       const Tp diff = f - f0;
9000       if (std::abs(diff) > max_abs_diff)
9001         max_abs_diff = std::abs(diff);
9002       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9003         {
9004           const Tp frac = diff / f0;
9005           if (std::abs(frac) > max_abs_frac)
9006             max_abs_frac = std::abs(frac);
9007         }
9008     }
9009   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9010 }
9011 
9012 // Test data for a=2.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
9013 testcase_hyperg<double> data131[] = {
9014   { 0.0016310376661280216, 2.0000000000000000, 10.000000000000000,
9015           2.0000000000000000, -0.90000000000000002 },
9016   { 0.0028007538972582421, 2.0000000000000000, 10.000000000000000,
9017           2.0000000000000000, -0.80000000000000004 },
9018   { 0.0049603324681551939, 2.0000000000000000, 10.000000000000000,
9019           2.0000000000000000, -0.69999999999999996 },
9020   { 0.0090949470177292789, 2.0000000000000000, 10.000000000000000,
9021           2.0000000000000000, -0.59999999999999998 },
9022   { 0.017341529915832606, 2.0000000000000000, 10.000000000000000,
9023           2.0000000000000000, -0.50000000000000000 },
9024   { 0.034571613033607777, 2.0000000000000000, 10.000000000000000,
9025           2.0000000000000000, -0.40000000000000002 },
9026   { 0.072538150286405714, 2.0000000000000000, 10.000000000000000,
9027           2.0000000000000000, -0.30000000000000004 },
9028   { 0.16150558288984579, 2.0000000000000000, 10.000000000000000,
9029           2.0000000000000000, -0.19999999999999996 },
9030   { 0.38554328942953148, 2.0000000000000000, 10.000000000000000,
9031           2.0000000000000000, -0.099999999999999978 },
9032   { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
9033           2.0000000000000000, 0.0000000000000000 },
9034   { 2.8679719907924444, 2.0000000000000000, 10.000000000000000,
9035           2.0000000000000000, 0.10000000000000009 },
9036   { 9.3132257461547816, 2.0000000000000000, 10.000000000000000,
9037           2.0000000000000000, 0.19999999999999996 },
9038   { 35.401331746414378, 2.0000000000000000, 10.000000000000000,
9039           2.0000000000000000, 0.30000000000000004 },
9040   { 165.38171687920172, 2.0000000000000000, 10.000000000000000,
9041           2.0000000000000000, 0.39999999999999991 },
9042   { 1024.0000000000000, 2.0000000000000000, 10.000000000000000,
9043           2.0000000000000000, 0.50000000000000000 },
9044   { 9536.7431640625200, 2.0000000000000000, 10.000000000000000,
9045           2.0000000000000000, 0.60000000000000009 },
9046   { 169350.87808430271, 2.0000000000000000, 10.000000000000000,
9047           2.0000000000000000, 0.69999999999999996 },
9048   { 9765624.9999999944, 2.0000000000000000, 10.000000000000000,
9049           2.0000000000000000, 0.80000000000000004 },
9050   { 9999999999.9999332, 2.0000000000000000, 10.000000000000000,
9051           2.0000000000000000, 0.89999999999999991 },
9052 };
9053 
9054 // Test function for a=2.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
9055 template <typename Tp>
test131()9056 void test131()
9057 {
9058   const Tp eps = std::numeric_limits<Tp>::epsilon();
9059   Tp max_abs_diff = -Tp(1);
9060   Tp max_abs_frac = -Tp(1);
9061   unsigned int num_datum = sizeof(data131)
9062                          / sizeof(testcase_hyperg<double>);
9063   for (unsigned int i = 0; i < num_datum; ++i)
9064     {
9065       const Tp f = std::tr1::hyperg(Tp(data131[i].a), Tp(data131[i].b),
9066                    Tp(data131[i].c), Tp(data131[i].x));
9067       const Tp f0 = data131[i].f0;
9068       const Tp diff = f - f0;
9069       if (std::abs(diff) > max_abs_diff)
9070         max_abs_diff = std::abs(diff);
9071       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9072         {
9073           const Tp frac = diff / f0;
9074           if (std::abs(frac) > max_abs_frac)
9075             max_abs_frac = std::abs(frac);
9076         }
9077     }
9078   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9079 }
9080 
9081 // Test data for a=2.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
9082 testcase_hyperg<double> data132[] = {
9083   { 0.071191280690193509, 2.0000000000000000, 10.000000000000000,
9084           4.0000000000000000, -0.90000000000000002 },
9085   { 0.085646504654238079, 2.0000000000000000, 10.000000000000000,
9086           4.0000000000000000, -0.80000000000000004 },
9087   { 0.10478215656371073, 2.0000000000000000, 10.000000000000000,
9088           4.0000000000000000, -0.69999999999999996 },
9089   { 0.13074816337653575, 2.0000000000000000, 10.000000000000000,
9090           4.0000000000000000, -0.59999999999999998 },
9091   { 0.16701141666848116, 2.0000000000000000, 10.000000000000000,
9092           4.0000000000000000, -0.50000000000000000 },
9093   { 0.21939323375313971, 2.0000000000000000, 10.000000000000000,
9094           4.0000000000000000, -0.40000000000000002 },
9095   { 0.29813515331786627, 2.0000000000000000, 10.000000000000000,
9096           4.0000000000000000, -0.30000000000000004 },
9097   { 0.42225974638874386, 2.0000000000000000, 10.000000000000000,
9098           4.0000000000000000, -0.19999999999999996 },
9099   { 0.62942145962174867, 2.0000000000000000, 10.000000000000000,
9100           4.0000000000000000, -0.099999999999999978 },
9101   { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
9102           4.0000000000000000, 0.0000000000000000 },
9103   { 1.7218685262373197, 2.0000000000000000, 10.000000000000000,
9104           4.0000000000000000, 0.10000000000000009 },
9105   { 3.2855760483514689, 2.0000000000000000, 10.000000000000000,
9106           4.0000000000000000, 0.19999999999999996 },
9107   { 7.1616652508907093, 2.0000000000000000, 10.000000000000000,
9108           4.0000000000000000, 0.30000000000000004 },
9109   { 18.612326808485907, 2.0000000000000000, 10.000000000000000,
9110           4.0000000000000000, 0.39999999999999991 },
9111   { 61.476190476190474, 2.0000000000000000, 10.000000000000000,
9112           4.0000000000000000, 0.50000000000000000 },
9113   { 286.27580915178623, 2.0000000000000000, 10.000000000000000,
9114           4.0000000000000000, 0.60000000000000009 },
9115   { 2274.9441142102296, 2.0000000000000000, 10.000000000000000,
9116           4.0000000000000000, 0.69999999999999996 },
9117   { 47229.761904761865, 2.0000000000000000, 10.000000000000000,
9118           4.0000000000000000, 0.80000000000000004 },
9119   { 9961460.7142856438, 2.0000000000000000, 10.000000000000000,
9120           4.0000000000000000, 0.89999999999999991 },
9121 };
9122 
9123 // Test function for a=2.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
9124 template <typename Tp>
test132()9125 void test132()
9126 {
9127   const Tp eps = std::numeric_limits<Tp>::epsilon();
9128   Tp max_abs_diff = -Tp(1);
9129   Tp max_abs_frac = -Tp(1);
9130   unsigned int num_datum = sizeof(data132)
9131                          / sizeof(testcase_hyperg<double>);
9132   for (unsigned int i = 0; i < num_datum; ++i)
9133     {
9134       const Tp f = std::tr1::hyperg(Tp(data132[i].a), Tp(data132[i].b),
9135                    Tp(data132[i].c), Tp(data132[i].x));
9136       const Tp f0 = data132[i].f0;
9137       const Tp diff = f - f0;
9138       if (std::abs(diff) > max_abs_diff)
9139         max_abs_diff = std::abs(diff);
9140       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9141         {
9142           const Tp frac = diff / f0;
9143           if (std::abs(frac) > max_abs_frac)
9144             max_abs_frac = std::abs(frac);
9145         }
9146     }
9147   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9148 }
9149 
9150 // Test data for a=2.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
9151 testcase_hyperg<double> data133[] = {
9152   { 0.14747230019381052, 2.0000000000000000, 10.000000000000000,
9153           6.0000000000000000, -0.90000000000000002 },
9154   { 0.17073600100690603, 2.0000000000000000, 10.000000000000000,
9155           6.0000000000000000, -0.80000000000000004 },
9156   { 0.19982795745135354, 2.0000000000000000, 10.000000000000000,
9157           6.0000000000000000, -0.69999999999999996 },
9158   { 0.23681776864188067, 2.0000000000000000, 10.000000000000000,
9159           6.0000000000000000, -0.59999999999999998 },
9160   { 0.28475624360398022, 2.0000000000000000, 10.000000000000000,
9161           6.0000000000000000, -0.50000000000000000 },
9162   { 0.34827500743063144, 2.0000000000000000, 10.000000000000000,
9163           6.0000000000000000, -0.40000000000000002 },
9164   { 0.43464829159684681, 2.0000000000000000, 10.000000000000000,
9165           6.0000000000000000, -0.30000000000000004 },
9166   { 0.55576053438064787, 2.0000000000000000, 10.000000000000000,
9167           6.0000000000000000, -0.19999999999999996 },
9168   { 0.73195020913445485, 2.0000000000000000, 10.000000000000000,
9169           6.0000000000000000, -0.099999999999999978 },
9170   { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
9171           6.0000000000000000, 0.0000000000000000 },
9172   { 1.4310223867822929, 2.0000000000000000, 10.000000000000000,
9173           6.0000000000000000, 0.10000000000000009 },
9174   { 2.1742563399057540, 2.0000000000000000, 10.000000000000000,
9175           6.0000000000000000, 0.19999999999999996 },
9176   { 3.5769231236256043, 2.0000000000000000, 10.000000000000000,
9177           6.0000000000000000, 0.30000000000000004 },
9178   { 6.5620441134844363, 2.0000000000000000, 10.000000000000000,
9179           6.0000000000000000, 0.39999999999999991 },
9180   { 14.063492063492063, 2.0000000000000000, 10.000000000000000,
9181           6.0000000000000000, 0.50000000000000000 },
9182   { 38.085937500000036, 2.0000000000000000, 10.000000000000000,
9183           6.0000000000000000, 0.60000000000000009 },
9184   { 150.92973632068282, 2.0000000000000000, 10.000000000000000,
9185           6.0000000000000000, 0.69999999999999996 },
9186   { 1212.3015873015852, 2.0000000000000000, 10.000000000000000,
9187           6.0000000000000000, 0.80000000000000004 },
9188   { 55107.142857142389, 2.0000000000000000, 10.000000000000000,
9189           6.0000000000000000, 0.89999999999999991 },
9190 };
9191 
9192 // Test function for a=2.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
9193 template <typename Tp>
test133()9194 void test133()
9195 {
9196   const Tp eps = std::numeric_limits<Tp>::epsilon();
9197   Tp max_abs_diff = -Tp(1);
9198   Tp max_abs_frac = -Tp(1);
9199   unsigned int num_datum = sizeof(data133)
9200                          / sizeof(testcase_hyperg<double>);
9201   for (unsigned int i = 0; i < num_datum; ++i)
9202     {
9203       const Tp f = std::tr1::hyperg(Tp(data133[i].a), Tp(data133[i].b),
9204                    Tp(data133[i].c), Tp(data133[i].x));
9205       const Tp f0 = data133[i].f0;
9206       const Tp diff = f - f0;
9207       if (std::abs(diff) > max_abs_diff)
9208         max_abs_diff = std::abs(diff);
9209       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9210         {
9211           const Tp frac = diff / f0;
9212           if (std::abs(frac) > max_abs_frac)
9213             max_abs_frac = std::abs(frac);
9214         }
9215     }
9216   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9217 }
9218 
9219 // Test data for a=2.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
9220 testcase_hyperg<double> data134[] = {
9221   { 0.21658059714090588, 2.0000000000000000, 10.000000000000000,
9222           8.0000000000000000, -0.90000000000000002 },
9223   { 0.24513539602702844, 2.0000000000000000, 10.000000000000000,
9224           8.0000000000000000, -0.80000000000000004 },
9225   { 0.27967018274845046, 2.0000000000000000, 10.000000000000000,
9226           8.0000000000000000, -0.69999999999999996 },
9227   { 0.32196044921874994, 2.0000000000000000, 10.000000000000000,
9228           8.0000000000000000, -0.59999999999999998 },
9229   { 0.37448559670781900, 2.0000000000000000, 10.000000000000000,
9230           8.0000000000000000, -0.50000000000000000 },
9231   { 0.44078856032208796, 2.0000000000000000, 10.000000000000000,
9232           8.0000000000000000, -0.40000000000000002 },
9233   { 0.52606701446027815, 2.0000000000000000, 10.000000000000000,
9234           8.0000000000000000, -0.30000000000000004 },
9235   { 0.63818158436214001, 2.0000000000000000, 10.000000000000000,
9236           8.0000000000000000, -0.19999999999999996 },
9237   { 0.78944971882612769, 2.0000000000000000, 10.000000000000000,
9238           8.0000000000000000, -0.099999999999999978 },
9239   { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
9240           8.0000000000000000, 0.0000000000000000 },
9241   { 1.3044251384443430, 2.0000000000000000, 10.000000000000000,
9242           8.0000000000000000, 0.10000000000000009 },
9243   { 1.7659505208333335, 2.0000000000000000, 10.000000000000000,
9244           8.0000000000000000, 0.19999999999999996 },
9245   { 2.5093710953769270, 2.0000000000000000, 10.000000000000000,
9246           8.0000000000000000, 0.30000000000000004 },
9247   { 3.8065843621399158, 2.0000000000000000, 10.000000000000000,
9248           8.0000000000000000, 0.39999999999999991 },
9249   { 6.3333333333333313, 2.0000000000000000, 10.000000000000000,
9250           8.0000000000000000, 0.50000000000000000 },
9251   { 12.109375000000004, 2.0000000000000000, 10.000000000000000,
9252           8.0000000000000000, 0.60000000000000009 },
9253   { 29.115226337448540, 2.0000000000000000, 10.000000000000000,
9254           8.0000000000000000, 0.69999999999999996 },
9255   { 108.33333333333330, 2.0000000000000000, 10.000000000000000,
9256           8.0000000000000000, 0.80000000000000004 },
9257   { 1224.9999999999923, 2.0000000000000000, 10.000000000000000,
9258           8.0000000000000000, 0.89999999999999991 },
9259 };
9260 
9261 // Test function for a=2.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
9262 template <typename Tp>
test134()9263 void test134()
9264 {
9265   const Tp eps = std::numeric_limits<Tp>::epsilon();
9266   Tp max_abs_diff = -Tp(1);
9267   Tp max_abs_frac = -Tp(1);
9268   unsigned int num_datum = sizeof(data134)
9269                          / sizeof(testcase_hyperg<double>);
9270   for (unsigned int i = 0; i < num_datum; ++i)
9271     {
9272       const Tp f = std::tr1::hyperg(Tp(data134[i].a), Tp(data134[i].b),
9273                    Tp(data134[i].c), Tp(data134[i].x));
9274       const Tp f0 = data134[i].f0;
9275       const Tp diff = f - f0;
9276       if (std::abs(diff) > max_abs_diff)
9277         max_abs_diff = std::abs(diff);
9278       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9279         {
9280           const Tp frac = diff / f0;
9281           if (std::abs(frac) > max_abs_frac)
9282             max_abs_frac = std::abs(frac);
9283         }
9284     }
9285   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9286 }
9287 
9288 // Test data for a=2.0000000000000000, b=10.000000000000000, c=10.000000000000000.
9289 testcase_hyperg<double> data135[] = {
9290   { 0.27700831024930750, 2.0000000000000000, 10.000000000000000,
9291           10.000000000000000, -0.90000000000000002 },
9292   { 0.30864197530864196, 2.0000000000000000, 10.000000000000000,
9293           10.000000000000000, -0.80000000000000004 },
9294   { 0.34602076124567477, 2.0000000000000000, 10.000000000000000,
9295           10.000000000000000, -0.69999999999999996 },
9296   { 0.39062499999999994, 2.0000000000000000, 10.000000000000000,
9297           10.000000000000000, -0.59999999999999998 },
9298   { 0.44444444444444442, 2.0000000000000000, 10.000000000000000,
9299           10.000000000000000, -0.50000000000000000 },
9300   { 0.51020408163265307, 2.0000000000000000, 10.000000000000000,
9301           10.000000000000000, -0.40000000000000002 },
9302   { 0.59171597633136097, 2.0000000000000000, 10.000000000000000,
9303           10.000000000000000, -0.30000000000000004 },
9304   { 0.69444444444444453, 2.0000000000000000, 10.000000000000000,
9305           10.000000000000000, -0.19999999999999996 },
9306   { 0.82644628099173545, 2.0000000000000000, 10.000000000000000,
9307           10.000000000000000, -0.099999999999999978 },
9308   { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
9309           10.000000000000000, 0.0000000000000000 },
9310   { 1.2345679012345681, 2.0000000000000000, 10.000000000000000,
9311           10.000000000000000, 0.10000000000000009 },
9312   { 1.5624999999999998, 2.0000000000000000, 10.000000000000000,
9313           10.000000000000000, 0.19999999999999996 },
9314   { 2.0408163265306127, 2.0000000000000000, 10.000000000000000,
9315           10.000000000000000, 0.30000000000000004 },
9316   { 2.7777777777777768, 2.0000000000000000, 10.000000000000000,
9317           10.000000000000000, 0.39999999999999991 },
9318   { 4.0000000000000000, 2.0000000000000000, 10.000000000000000,
9319           10.000000000000000, 0.50000000000000000 },
9320   { 6.2500000000000036, 2.0000000000000000, 10.000000000000000,
9321           10.000000000000000, 0.60000000000000009 },
9322   { 11.111111111111109, 2.0000000000000000, 10.000000000000000,
9323           10.000000000000000, 0.69999999999999996 },
9324   { 25.000000000000007, 2.0000000000000000, 10.000000000000000,
9325           10.000000000000000, 0.80000000000000004 },
9326   { 99.999999999999872, 2.0000000000000000, 10.000000000000000,
9327           10.000000000000000, 0.89999999999999991 },
9328 };
9329 
9330 // Test function for a=2.0000000000000000, b=10.000000000000000, c=10.000000000000000.
9331 template <typename Tp>
test135()9332 void test135()
9333 {
9334   const Tp eps = std::numeric_limits<Tp>::epsilon();
9335   Tp max_abs_diff = -Tp(1);
9336   Tp max_abs_frac = -Tp(1);
9337   unsigned int num_datum = sizeof(data135)
9338                          / sizeof(testcase_hyperg<double>);
9339   for (unsigned int i = 0; i < num_datum; ++i)
9340     {
9341       const Tp f = std::tr1::hyperg(Tp(data135[i].a), Tp(data135[i].b),
9342                    Tp(data135[i].c), Tp(data135[i].x));
9343       const Tp f0 = data135[i].f0;
9344       const Tp diff = f - f0;
9345       if (std::abs(diff) > max_abs_diff)
9346         max_abs_diff = std::abs(diff);
9347       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9348         {
9349           const Tp frac = diff / f0;
9350           if (std::abs(frac) > max_abs_frac)
9351             max_abs_frac = std::abs(frac);
9352         }
9353     }
9354   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9355 }
9356 
9357 // Test data for a=2.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
9358 testcase_hyperg<double> data136[] = {
9359   { 2.6602838683283435e-06, 2.0000000000000000, 20.000000000000000,
9360           2.0000000000000000, -0.90000000000000002 },
9361   { 7.8442223930072316e-06, 2.0000000000000000, 20.000000000000000,
9362           2.0000000000000000, -0.80000000000000004 },
9363   { 2.4604898194634598e-05, 2.0000000000000000, 20.000000000000000,
9364           2.0000000000000000, -0.69999999999999996 },
9365   { 8.2718061255302686e-05, 2.0000000000000000, 20.000000000000000,
9366           2.0000000000000000, -0.59999999999999998 },
9367   { 0.00030072865982171723, 2.0000000000000000, 20.000000000000000,
9368           2.0000000000000000, -0.50000000000000000 },
9369   { 0.0011951964277455193, 2.0000000000000000, 20.000000000000000,
9370           2.0000000000000000, -0.40000000000000002 },
9371   { 0.0052617832469731814, 2.0000000000000000, 20.000000000000000,
9372           2.0000000000000000, -0.30000000000000004 },
9373   { 0.026084053304588847, 2.0000000000000000, 20.000000000000000,
9374           2.0000000000000000, -0.19999999999999996 },
9375   { 0.14864362802414346, 2.0000000000000000, 20.000000000000000,
9376           2.0000000000000000, -0.099999999999999978 },
9377   { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
9378           2.0000000000000000, 0.0000000000000000 },
9379   { 8.2252633399699757, 2.0000000000000000, 20.000000000000000,
9380           2.0000000000000000, 0.10000000000000009 },
9381   { 86.736173798840269, 2.0000000000000000, 20.000000000000000,
9382           2.0000000000000000, 0.19999999999999996 },
9383   { 1253.2542894196865, 2.0000000000000000, 20.000000000000000,
9384           2.0000000000000000, 0.30000000000000004 },
9385   { 27351.112277912434, 2.0000000000000000, 20.000000000000000,
9386           2.0000000000000000, 0.39999999999999991 },
9387   { 1048576.0000000000, 2.0000000000000000, 20.000000000000000,
9388           2.0000000000000000, 0.50000000000000000 },
9389   { 90949470.177293226, 2.0000000000000000, 20.000000000000000,
9390           2.0000000000000000, 0.60000000000000009 },
9391   { 28679719907.924358, 2.0000000000000000, 20.000000000000000,
9392           2.0000000000000000, 0.69999999999999996 },
9393   { 95367431640624.906, 2.0000000000000000, 20.000000000000000,
9394           2.0000000000000000, 0.80000000000000004 },
9395   { 9.9999999999998657e+19, 2.0000000000000000, 20.000000000000000,
9396           2.0000000000000000, 0.89999999999999991 },
9397 };
9398 
9399 // Test function for a=2.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
9400 template <typename Tp>
test136()9401 void test136()
9402 {
9403   const Tp eps = std::numeric_limits<Tp>::epsilon();
9404   Tp max_abs_diff = -Tp(1);
9405   Tp max_abs_frac = -Tp(1);
9406   unsigned int num_datum = sizeof(data136)
9407                          / sizeof(testcase_hyperg<double>);
9408   for (unsigned int i = 0; i < num_datum; ++i)
9409     {
9410       const Tp f = std::tr1::hyperg(Tp(data136[i].a), Tp(data136[i].b),
9411                    Tp(data136[i].c), Tp(data136[i].x));
9412       const Tp f0 = data136[i].f0;
9413       const Tp diff = f - f0;
9414       if (std::abs(diff) > max_abs_diff)
9415         max_abs_diff = std::abs(diff);
9416       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9417         {
9418           const Tp frac = diff / f0;
9419           if (std::abs(frac) > max_abs_frac)
9420             max_abs_frac = std::abs(frac);
9421         }
9422     }
9423   VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
9424 }
9425 
9426 // Test data for a=2.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
9427 testcase_hyperg<double> data137[] = {
9428   { 0.018828092583720951, 2.0000000000000000, 20.000000000000000,
9429           4.0000000000000000, -0.90000000000000002 },
9430   { 0.023381944060455316, 2.0000000000000000, 20.000000000000000,
9431           4.0000000000000000, -0.80000000000000004 },
9432   { 0.029789623984280793, 2.0000000000000000, 20.000000000000000,
9433           4.0000000000000000, -0.69999999999999996 },
9434   { 0.039191021482500497, 2.0000000000000000, 20.000000000000000,
9435           4.0000000000000000, -0.59999999999999998 },
9436   { 0.053727813036721514, 2.0000000000000000, 20.000000000000000,
9437           4.0000000000000000, -0.50000000000000000 },
9438   { 0.077762010061669024, 2.0000000000000000, 20.000000000000000,
9439           4.0000000000000000, -0.40000000000000002 },
9440   { 0.12110505620123302, 2.0000000000000000, 20.000000000000000,
9441           4.0000000000000000, -0.30000000000000004 },
9442   { 0.20870149809080590, 2.0000000000000000, 20.000000000000000,
9443           4.0000000000000000, -0.19999999999999996 },
9444   { 0.41429234328785769, 2.0000000000000000, 20.000000000000000,
9445           4.0000000000000000, -0.099999999999999978 },
9446   { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
9447           4.0000000000000000, 0.0000000000000000 },
9448   { 3.1308087404153113, 2.0000000000000000, 20.000000000000000,
9449           4.0000000000000000, 0.10000000000000009 },
9450   { 13.586180626453050, 2.0000000000000000, 20.000000000000000,
9451           4.0000000000000000, 0.19999999999999996 },
9452   { 87.117304082784415, 2.0000000000000000, 20.000000000000000,
9453           4.0000000000000000, 0.30000000000000004 },
9454   { 889.26474381242826, 2.0000000000000000, 20.000000000000000,
9455           4.0000000000000000, 0.39999999999999991 },
9456   { 16231.913312693494, 2.0000000000000000, 20.000000000000000,
9457           4.0000000000000000, 0.50000000000000000 },
9458   { 653537.51168945129, 2.0000000000000000, 20.000000000000000,
9459           4.0000000000000000, 0.60000000000000009 },
9460   { 87756230.793848589, 2.0000000000000000, 20.000000000000000,
9461           4.0000000000000000, 0.69999999999999996 },
9462   { 101493977171.74945, 2.0000000000000000, 20.000000000000000,
9463           4.0000000000000000, 0.80000000000000004 },
9464   { 21375960679556916., 2.0000000000000000, 20.000000000000000,
9465           4.0000000000000000, 0.89999999999999991 },
9466 };
9467 
9468 // Test function for a=2.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
9469 template <typename Tp>
test137()9470 void test137()
9471 {
9472   const Tp eps = std::numeric_limits<Tp>::epsilon();
9473   Tp max_abs_diff = -Tp(1);
9474   Tp max_abs_frac = -Tp(1);
9475   unsigned int num_datum = sizeof(data137)
9476                          / sizeof(testcase_hyperg<double>);
9477   for (unsigned int i = 0; i < num_datum; ++i)
9478     {
9479       const Tp f = std::tr1::hyperg(Tp(data137[i].a), Tp(data137[i].b),
9480                    Tp(data137[i].c), Tp(data137[i].x));
9481       const Tp f0 = data137[i].f0;
9482       const Tp diff = f - f0;
9483       if (std::abs(diff) > max_abs_diff)
9484         max_abs_diff = std::abs(diff);
9485       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9486         {
9487           const Tp frac = diff / f0;
9488           if (std::abs(frac) > max_abs_frac)
9489             max_abs_frac = std::abs(frac);
9490         }
9491     }
9492   VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
9493 }
9494 
9495 // Test data for a=2.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
9496 testcase_hyperg<double> data138[] = {
9497   { 0.049200410661854252, 2.0000000000000000, 20.000000000000000,
9498           6.0000000000000000, -0.90000000000000002 },
9499   { 0.059460876757152226, 2.0000000000000000, 20.000000000000000,
9500           6.0000000000000000, -0.80000000000000004 },
9501   { 0.073244762686653350, 2.0000000000000000, 20.000000000000000,
9502           6.0000000000000000, -0.69999999999999996 },
9503   { 0.092334626017932922, 2.0000000000000000, 20.000000000000000,
9504           6.0000000000000000, -0.59999999999999998 },
9505   { 0.11976760350696837, 2.0000000000000000, 20.000000000000000,
9506           6.0000000000000000, -0.50000000000000000 },
9507   { 0.16102414609169383, 2.0000000000000000, 20.000000000000000,
9508           6.0000000000000000, -0.40000000000000002 },
9509   { 0.22670456785796222, 2.0000000000000000, 20.000000000000000,
9510           6.0000000000000000, -0.30000000000000004 },
9511   { 0.33912903252727361, 2.0000000000000000, 20.000000000000000,
9512           6.0000000000000000, -0.19999999999999996 },
9513   { 0.55049794600858060, 2.0000000000000000, 20.000000000000000,
9514           6.0000000000000000, -0.099999999999999978 },
9515   { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
9516           6.0000000000000000, 0.0000000000000000 },
9517   { 2.1254722872032232, 2.0000000000000000, 20.000000000000000,
9518           6.0000000000000000, 0.10000000000000009 },
9519   { 5.6261213886736172, 2.0000000000000000, 20.000000000000000,
9520           6.0000000000000000, 0.19999999999999996 },
9521   { 20.137315891130996, 2.0000000000000000, 20.000000000000000,
9522           6.0000000000000000, 0.30000000000000004 },
9523   { 108.04381584643853, 2.0000000000000000, 20.000000000000000,
9524           6.0000000000000000, 0.39999999999999991 },
9525   { 992.41692466460245, 2.0000000000000000, 20.000000000000000,
9526           6.0000000000000000, 0.50000000000000000 },
9527   { 19055.363816004465, 2.0000000000000000, 20.000000000000000,
9528           6.0000000000000000, 0.60000000000000009 },
9529   { 1105471.9504312086, 2.0000000000000000, 20.000000000000000,
9530           6.0000000000000000, 0.69999999999999996 },
9531   { 448521363.90608919, 2.0000000000000000, 20.000000000000000,
9532           6.0000000000000000, 0.80000000000000004 },
9533   { 19078917293639.004, 2.0000000000000000, 20.000000000000000,
9534           6.0000000000000000, 0.89999999999999991 },
9535 };
9536 
9537 // Test function for a=2.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
9538 template <typename Tp>
test138()9539 void test138()
9540 {
9541   const Tp eps = std::numeric_limits<Tp>::epsilon();
9542   Tp max_abs_diff = -Tp(1);
9543   Tp max_abs_frac = -Tp(1);
9544   unsigned int num_datum = sizeof(data138)
9545                          / sizeof(testcase_hyperg<double>);
9546   for (unsigned int i = 0; i < num_datum; ++i)
9547     {
9548       const Tp f = std::tr1::hyperg(Tp(data138[i].a), Tp(data138[i].b),
9549                    Tp(data138[i].c), Tp(data138[i].x));
9550       const Tp f0 = data138[i].f0;
9551       const Tp diff = f - f0;
9552       if (std::abs(diff) > max_abs_diff)
9553         max_abs_diff = std::abs(diff);
9554       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9555         {
9556           const Tp frac = diff / f0;
9557           if (std::abs(frac) > max_abs_frac)
9558             max_abs_frac = std::abs(frac);
9559         }
9560     }
9561   VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
9562 }
9563 
9564 // Test data for a=2.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
9565 testcase_hyperg<double> data139[] = {
9566   { 0.083753547015334745, 2.0000000000000000, 20.000000000000000,
9567           8.0000000000000000, -0.90000000000000002 },
9568   { 0.099238444687035701, 2.0000000000000000, 20.000000000000000,
9569           8.0000000000000000, -0.80000000000000004 },
9570   { 0.11938294012867758, 2.0000000000000000, 20.000000000000000,
9571           8.0000000000000000, -0.69999999999999996 },
9572   { 0.14622683905023326, 2.0000000000000000, 20.000000000000000,
9573           8.0000000000000000, -0.59999999999999998 },
9574   { 0.18303556733713025, 2.0000000000000000, 20.000000000000000,
9575           8.0000000000000000, -0.50000000000000000 },
9576   { 0.23527764069382409, 2.0000000000000000, 20.000000000000000,
9577           8.0000000000000000, -0.40000000000000002 },
9578   { 0.31261681740827085, 2.0000000000000000, 20.000000000000000,
9579           8.0000000000000000, -0.30000000000000004 },
9580   { 0.43327581880538862, 2.0000000000000000, 20.000000000000000,
9581           8.0000000000000000, -0.19999999999999996 },
9582   { 0.63445840637296658, 2.0000000000000000, 20.000000000000000,
9583           8.0000000000000000, -0.099999999999999978 },
9584   { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
9585           8.0000000000000000, 0.0000000000000000 },
9586   { 1.7438842395813297, 2.0000000000000000, 20.000000000000000,
9587           8.0000000000000000, 0.10000000000000009 },
9588   { 3.5070840938209269, 2.0000000000000000, 20.000000000000000,
9589           8.0000000000000000, 0.19999999999999996 },
9590   { 8.6573372006089713, 2.0000000000000000, 20.000000000000000,
9591           8.0000000000000000, 0.30000000000000004 },
9592   { 28.779342118408906, 2.0000000000000000, 20.000000000000000,
9593           8.0000000000000000, 0.39999999999999991 },
9594   { 147.50178613955714, 2.0000000000000000, 20.000000000000000,
9595           8.0000000000000000, 0.50000000000000000 },
9596   { 1427.1686016136398, 2.0000000000000000, 20.000000000000000,
9597           8.0000000000000000, 0.60000000000000009 },
9598   { 36780.643714655642, 2.0000000000000000, 20.000000000000000,
9599           8.0000000000000000, 0.69999999999999996 },
9600   { 5313869.6058585485, 2.0000000000000000, 20.000000000000000,
9601           8.0000000000000000, 0.80000000000000004 },
9602   { 46057280607.381966, 2.0000000000000000, 20.000000000000000,
9603           8.0000000000000000, 0.89999999999999991 },
9604 };
9605 
9606 // Test function for a=2.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
9607 template <typename Tp>
test139()9608 void test139()
9609 {
9610   const Tp eps = std::numeric_limits<Tp>::epsilon();
9611   Tp max_abs_diff = -Tp(1);
9612   Tp max_abs_frac = -Tp(1);
9613   unsigned int num_datum = sizeof(data139)
9614                          / sizeof(testcase_hyperg<double>);
9615   for (unsigned int i = 0; i < num_datum; ++i)
9616     {
9617       const Tp f = std::tr1::hyperg(Tp(data139[i].a), Tp(data139[i].b),
9618                    Tp(data139[i].c), Tp(data139[i].x));
9619       const Tp f0 = data139[i].f0;
9620       const Tp diff = f - f0;
9621       if (std::abs(diff) > max_abs_diff)
9622         max_abs_diff = std::abs(diff);
9623       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9624         {
9625           const Tp frac = diff / f0;
9626           if (std::abs(frac) > max_abs_frac)
9627             max_abs_frac = std::abs(frac);
9628         }
9629     }
9630   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9631 }
9632 
9633 // Test data for a=2.0000000000000000, b=20.000000000000000, c=10.000000000000000.
9634 testcase_hyperg<double> data140[] = {
9635   { 0.11920045035073683, 2.0000000000000000, 20.000000000000000,
9636           10.000000000000000, -0.90000000000000002 },
9637   { 0.13907946814302774, 2.0000000000000000, 20.000000000000000,
9638           10.000000000000000, -0.80000000000000004 },
9639   { 0.16431439792559688, 2.0000000000000000, 20.000000000000000,
9640           10.000000000000000, -0.69999999999999996 },
9641   { 0.19698796016987008, 2.0000000000000000, 20.000000000000000,
9642           10.000000000000000, -0.59999999999999998 },
9643   { 0.24028510928790570, 2.0000000000000000, 20.000000000000000,
9644           10.000000000000000, -0.50000000000000000 },
9645   { 0.29926031296483119, 2.0000000000000000, 20.000000000000000,
9646           10.000000000000000, -0.40000000000000002 },
9647   { 0.38229327814229169, 2.0000000000000000, 20.000000000000000,
9648           10.000000000000000, -0.30000000000000004 },
9649   { 0.50402047283093110, 2.0000000000000000, 20.000000000000000,
9650           10.000000000000000, -0.19999999999999996 },
9651   { 0.69167261179586503, 2.0000000000000000, 20.000000000000000,
9652           10.000000000000000, -0.099999999999999978 },
9653   { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
9654           10.000000000000000, 0.0000000000000000 },
9655   { 1.5503152253394308, 2.0000000000000000, 20.000000000000000,
9656           10.000000000000000, 0.10000000000000009 },
9657   { 2.6469548193635797, 2.0000000000000000, 20.000000000000000,
9658           10.000000000000000, 0.19999999999999996 },
9659   { 5.1882631330566813, 2.0000000000000000, 20.000000000000000,
9660           10.000000000000000, 0.30000000000000004 },
9661   { 12.476792759124516, 2.0000000000000000, 20.000000000000000,
9662           10.000000000000000, 0.39999999999999991 },
9663   { 41.026391565091259, 2.0000000000000000, 20.000000000000000,
9664           10.000000000000000, 0.50000000000000000 },
9665   { 220.92584715988204, 2.0000000000000000, 20.000000000000000,
9666           10.000000000000000, 0.60000000000000009 },
9667   { 2677.0834450236207, 2.0000000000000000, 20.000000000000000,
9668           10.000000000000000, 0.69999999999999996 },
9669   { 141774.31260689779, 2.0000000000000000, 20.000000000000000,
9670           10.000000000000000, 0.80000000000000004 },
9671   { 254267148.83196995, 2.0000000000000000, 20.000000000000000,
9672           10.000000000000000, 0.89999999999999991 },
9673 };
9674 
9675 // Test function for a=2.0000000000000000, b=20.000000000000000, c=10.000000000000000.
9676 template <typename Tp>
test140()9677 void test140()
9678 {
9679   const Tp eps = std::numeric_limits<Tp>::epsilon();
9680   Tp max_abs_diff = -Tp(1);
9681   Tp max_abs_frac = -Tp(1);
9682   unsigned int num_datum = sizeof(data140)
9683                          / sizeof(testcase_hyperg<double>);
9684   for (unsigned int i = 0; i < num_datum; ++i)
9685     {
9686       const Tp f = std::tr1::hyperg(Tp(data140[i].a), Tp(data140[i].b),
9687                    Tp(data140[i].c), Tp(data140[i].x));
9688       const Tp f0 = data140[i].f0;
9689       const Tp diff = f - f0;
9690       if (std::abs(diff) > max_abs_diff)
9691         max_abs_diff = std::abs(diff);
9692       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9693         {
9694           const Tp frac = diff / f0;
9695           if (std::abs(frac) > max_abs_frac)
9696             max_abs_frac = std::abs(frac);
9697         }
9698     }
9699   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9700 }
9701 
9702 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
9703 testcase_hyperg<double> data141[] = {
9704   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9705           2.0000000000000000, -0.90000000000000002 },
9706   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9707           2.0000000000000000, -0.80000000000000004 },
9708   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9709           2.0000000000000000, -0.69999999999999996 },
9710   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9711           2.0000000000000000, -0.59999999999999998 },
9712   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9713           2.0000000000000000, -0.50000000000000000 },
9714   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9715           2.0000000000000000, -0.40000000000000002 },
9716   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9717           2.0000000000000000, -0.30000000000000004 },
9718   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9719           2.0000000000000000, -0.19999999999999996 },
9720   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9721           2.0000000000000000, -0.099999999999999978 },
9722   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9723           2.0000000000000000, 0.0000000000000000 },
9724   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9725           2.0000000000000000, 0.10000000000000009 },
9726   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9727           2.0000000000000000, 0.19999999999999996 },
9728   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9729           2.0000000000000000, 0.30000000000000004 },
9730   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9731           2.0000000000000000, 0.39999999999999991 },
9732   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9733           2.0000000000000000, 0.50000000000000000 },
9734   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9735           2.0000000000000000, 0.60000000000000009 },
9736   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9737           2.0000000000000000, 0.69999999999999996 },
9738   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9739           2.0000000000000000, 0.80000000000000004 },
9740   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9741           2.0000000000000000, 0.89999999999999991 },
9742 };
9743 
9744 // Test function for a=5.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
9745 template <typename Tp>
test141()9746 void test141()
9747 {
9748   const Tp eps = std::numeric_limits<Tp>::epsilon();
9749   Tp max_abs_diff = -Tp(1);
9750   Tp max_abs_frac = -Tp(1);
9751   unsigned int num_datum = sizeof(data141)
9752                          / sizeof(testcase_hyperg<double>);
9753   for (unsigned int i = 0; i < num_datum; ++i)
9754     {
9755       const Tp f = std::tr1::hyperg(Tp(data141[i].a), Tp(data141[i].b),
9756                    Tp(data141[i].c), Tp(data141[i].x));
9757       const Tp f0 = data141[i].f0;
9758       const Tp diff = f - f0;
9759       if (std::abs(diff) > max_abs_diff)
9760         max_abs_diff = std::abs(diff);
9761       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9762         {
9763           const Tp frac = diff / f0;
9764           if (std::abs(frac) > max_abs_frac)
9765             max_abs_frac = std::abs(frac);
9766         }
9767     }
9768   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9769 }
9770 
9771 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
9772 testcase_hyperg<double> data142[] = {
9773   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9774           4.0000000000000000, -0.90000000000000002 },
9775   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9776           4.0000000000000000, -0.80000000000000004 },
9777   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9778           4.0000000000000000, -0.69999999999999996 },
9779   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9780           4.0000000000000000, -0.59999999999999998 },
9781   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9782           4.0000000000000000, -0.50000000000000000 },
9783   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9784           4.0000000000000000, -0.40000000000000002 },
9785   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9786           4.0000000000000000, -0.30000000000000004 },
9787   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9788           4.0000000000000000, -0.19999999999999996 },
9789   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9790           4.0000000000000000, -0.099999999999999978 },
9791   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9792           4.0000000000000000, 0.0000000000000000 },
9793   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9794           4.0000000000000000, 0.10000000000000009 },
9795   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9796           4.0000000000000000, 0.19999999999999996 },
9797   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9798           4.0000000000000000, 0.30000000000000004 },
9799   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9800           4.0000000000000000, 0.39999999999999991 },
9801   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9802           4.0000000000000000, 0.50000000000000000 },
9803   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9804           4.0000000000000000, 0.60000000000000009 },
9805   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9806           4.0000000000000000, 0.69999999999999996 },
9807   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9808           4.0000000000000000, 0.80000000000000004 },
9809   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9810           4.0000000000000000, 0.89999999999999991 },
9811 };
9812 
9813 // Test function for a=5.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
9814 template <typename Tp>
test142()9815 void test142()
9816 {
9817   const Tp eps = std::numeric_limits<Tp>::epsilon();
9818   Tp max_abs_diff = -Tp(1);
9819   Tp max_abs_frac = -Tp(1);
9820   unsigned int num_datum = sizeof(data142)
9821                          / sizeof(testcase_hyperg<double>);
9822   for (unsigned int i = 0; i < num_datum; ++i)
9823     {
9824       const Tp f = std::tr1::hyperg(Tp(data142[i].a), Tp(data142[i].b),
9825                    Tp(data142[i].c), Tp(data142[i].x));
9826       const Tp f0 = data142[i].f0;
9827       const Tp diff = f - f0;
9828       if (std::abs(diff) > max_abs_diff)
9829         max_abs_diff = std::abs(diff);
9830       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9831         {
9832           const Tp frac = diff / f0;
9833           if (std::abs(frac) > max_abs_frac)
9834             max_abs_frac = std::abs(frac);
9835         }
9836     }
9837   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9838 }
9839 
9840 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
9841 testcase_hyperg<double> data143[] = {
9842   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9843           6.0000000000000000, -0.90000000000000002 },
9844   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9845           6.0000000000000000, -0.80000000000000004 },
9846   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9847           6.0000000000000000, -0.69999999999999996 },
9848   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9849           6.0000000000000000, -0.59999999999999998 },
9850   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9851           6.0000000000000000, -0.50000000000000000 },
9852   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9853           6.0000000000000000, -0.40000000000000002 },
9854   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9855           6.0000000000000000, -0.30000000000000004 },
9856   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9857           6.0000000000000000, -0.19999999999999996 },
9858   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9859           6.0000000000000000, -0.099999999999999978 },
9860   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9861           6.0000000000000000, 0.0000000000000000 },
9862   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9863           6.0000000000000000, 0.10000000000000009 },
9864   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9865           6.0000000000000000, 0.19999999999999996 },
9866   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9867           6.0000000000000000, 0.30000000000000004 },
9868   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9869           6.0000000000000000, 0.39999999999999991 },
9870   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9871           6.0000000000000000, 0.50000000000000000 },
9872   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9873           6.0000000000000000, 0.60000000000000009 },
9874   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9875           6.0000000000000000, 0.69999999999999996 },
9876   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9877           6.0000000000000000, 0.80000000000000004 },
9878   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9879           6.0000000000000000, 0.89999999999999991 },
9880 };
9881 
9882 // Test function for a=5.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
9883 template <typename Tp>
test143()9884 void test143()
9885 {
9886   const Tp eps = std::numeric_limits<Tp>::epsilon();
9887   Tp max_abs_diff = -Tp(1);
9888   Tp max_abs_frac = -Tp(1);
9889   unsigned int num_datum = sizeof(data143)
9890                          / sizeof(testcase_hyperg<double>);
9891   for (unsigned int i = 0; i < num_datum; ++i)
9892     {
9893       const Tp f = std::tr1::hyperg(Tp(data143[i].a), Tp(data143[i].b),
9894                    Tp(data143[i].c), Tp(data143[i].x));
9895       const Tp f0 = data143[i].f0;
9896       const Tp diff = f - f0;
9897       if (std::abs(diff) > max_abs_diff)
9898         max_abs_diff = std::abs(diff);
9899       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9900         {
9901           const Tp frac = diff / f0;
9902           if (std::abs(frac) > max_abs_frac)
9903             max_abs_frac = std::abs(frac);
9904         }
9905     }
9906   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9907 }
9908 
9909 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
9910 testcase_hyperg<double> data144[] = {
9911   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9912           8.0000000000000000, -0.90000000000000002 },
9913   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9914           8.0000000000000000, -0.80000000000000004 },
9915   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9916           8.0000000000000000, -0.69999999999999996 },
9917   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9918           8.0000000000000000, -0.59999999999999998 },
9919   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9920           8.0000000000000000, -0.50000000000000000 },
9921   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9922           8.0000000000000000, -0.40000000000000002 },
9923   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9924           8.0000000000000000, -0.30000000000000004 },
9925   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9926           8.0000000000000000, -0.19999999999999996 },
9927   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9928           8.0000000000000000, -0.099999999999999978 },
9929   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9930           8.0000000000000000, 0.0000000000000000 },
9931   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9932           8.0000000000000000, 0.10000000000000009 },
9933   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9934           8.0000000000000000, 0.19999999999999996 },
9935   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9936           8.0000000000000000, 0.30000000000000004 },
9937   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9938           8.0000000000000000, 0.39999999999999991 },
9939   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9940           8.0000000000000000, 0.50000000000000000 },
9941   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9942           8.0000000000000000, 0.60000000000000009 },
9943   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9944           8.0000000000000000, 0.69999999999999996 },
9945   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9946           8.0000000000000000, 0.80000000000000004 },
9947   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9948           8.0000000000000000, 0.89999999999999991 },
9949 };
9950 
9951 // Test function for a=5.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
9952 template <typename Tp>
test144()9953 void test144()
9954 {
9955   const Tp eps = std::numeric_limits<Tp>::epsilon();
9956   Tp max_abs_diff = -Tp(1);
9957   Tp max_abs_frac = -Tp(1);
9958   unsigned int num_datum = sizeof(data144)
9959                          / sizeof(testcase_hyperg<double>);
9960   for (unsigned int i = 0; i < num_datum; ++i)
9961     {
9962       const Tp f = std::tr1::hyperg(Tp(data144[i].a), Tp(data144[i].b),
9963                    Tp(data144[i].c), Tp(data144[i].x));
9964       const Tp f0 = data144[i].f0;
9965       const Tp diff = f - f0;
9966       if (std::abs(diff) > max_abs_diff)
9967         max_abs_diff = std::abs(diff);
9968       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9969         {
9970           const Tp frac = diff / f0;
9971           if (std::abs(frac) > max_abs_frac)
9972             max_abs_frac = std::abs(frac);
9973         }
9974     }
9975   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9976 }
9977 
9978 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
9979 testcase_hyperg<double> data145[] = {
9980   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9981           10.000000000000000, -0.90000000000000002 },
9982   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9983           10.000000000000000, -0.80000000000000004 },
9984   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9985           10.000000000000000, -0.69999999999999996 },
9986   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9987           10.000000000000000, -0.59999999999999998 },
9988   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9989           10.000000000000000, -0.50000000000000000 },
9990   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9991           10.000000000000000, -0.40000000000000002 },
9992   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9993           10.000000000000000, -0.30000000000000004 },
9994   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9995           10.000000000000000, -0.19999999999999996 },
9996   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9997           10.000000000000000, -0.099999999999999978 },
9998   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9999           10.000000000000000, 0.0000000000000000 },
10000   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10001           10.000000000000000, 0.10000000000000009 },
10002   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10003           10.000000000000000, 0.19999999999999996 },
10004   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10005           10.000000000000000, 0.30000000000000004 },
10006   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10007           10.000000000000000, 0.39999999999999991 },
10008   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10009           10.000000000000000, 0.50000000000000000 },
10010   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10011           10.000000000000000, 0.60000000000000009 },
10012   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10013           10.000000000000000, 0.69999999999999996 },
10014   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10015           10.000000000000000, 0.80000000000000004 },
10016   { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10017           10.000000000000000, 0.89999999999999991 },
10018 };
10019 
10020 // Test function for a=5.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
10021 template <typename Tp>
test145()10022 void test145()
10023 {
10024   const Tp eps = std::numeric_limits<Tp>::epsilon();
10025   Tp max_abs_diff = -Tp(1);
10026   Tp max_abs_frac = -Tp(1);
10027   unsigned int num_datum = sizeof(data145)
10028                          / sizeof(testcase_hyperg<double>);
10029   for (unsigned int i = 0; i < num_datum; ++i)
10030     {
10031       const Tp f = std::tr1::hyperg(Tp(data145[i].a), Tp(data145[i].b),
10032                    Tp(data145[i].c), Tp(data145[i].x));
10033       const Tp f0 = data145[i].f0;
10034       const Tp diff = f - f0;
10035       if (std::abs(diff) > max_abs_diff)
10036         max_abs_diff = std::abs(diff);
10037       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10038         {
10039           const Tp frac = diff / f0;
10040           if (std::abs(frac) > max_abs_frac)
10041             max_abs_frac = std::abs(frac);
10042         }
10043     }
10044   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10045 }
10046 
10047 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
10048 testcase_hyperg<double> data146[] = {
10049   { 0.52275983209457511, 5.0000000000000000, 0.50000000000000000,
10050           2.0000000000000000, -0.90000000000000002 },
10051   { 0.54700336898142965, 5.0000000000000000, 0.50000000000000000,
10052           2.0000000000000000, -0.80000000000000004 },
10053   { 0.57468955512601971, 5.0000000000000000, 0.50000000000000000,
10054           2.0000000000000000, -0.69999999999999996 },
10055   { 0.60665490543315015, 5.0000000000000000, 0.50000000000000000,
10056           2.0000000000000000, -0.59999999999999998 },
10057   { 0.64403057859056123, 5.0000000000000000, 0.50000000000000000,
10058           2.0000000000000000, -0.50000000000000000 },
10059   { 0.68838183648623719, 5.0000000000000000, 0.50000000000000000,
10060           2.0000000000000000, -0.40000000000000002 },
10061   { 0.74193265039311085, 5.0000000000000000, 0.50000000000000000,
10062           2.0000000000000000, -0.30000000000000004 },
10063   { 0.80794095908995300, 5.0000000000000000, 0.50000000000000000,
10064           2.0000000000000000, -0.19999999999999996 },
10065   { 0.89135275749639320, 5.0000000000000000, 0.50000000000000000,
10066           2.0000000000000000, -0.099999999999999978 },
10067   { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
10068           2.0000000000000000, 0.0000000000000000 },
10069   { 1.1469266219310688, 5.0000000000000000, 0.50000000000000000,
10070           2.0000000000000000, 0.10000000000000009 },
10071   { 1.3552340708357489, 5.0000000000000000, 0.50000000000000000,
10072           2.0000000000000000, 0.19999999999999996 },
10073   { 1.6690840478838305, 5.0000000000000000, 0.50000000000000000,
10074           2.0000000000000000, 0.30000000000000004 },
10075   { 2.1815415453174483, 5.0000000000000000, 0.50000000000000000,
10076           2.0000000000000000, 0.39999999999999991 },
10077   { 3.1156892546032235, 5.0000000000000000, 0.50000000000000000,
10078           2.0000000000000000, 0.50000000000000000 },
10079   { 5.1109077417760416, 5.0000000000000000, 0.50000000000000000,
10080           2.0000000000000000, 0.60000000000000009 },
10081   { 10.560352936466296, 5.0000000000000000, 0.50000000000000000,
10082           2.0000000000000000, 0.69999999999999996 },
10083   { 33.541019662496815, 5.0000000000000000, 0.50000000000000000,
10084           2.0000000000000000, 0.80000000000000004 },
10085   { 300.66343065819501, 5.0000000000000000, 0.50000000000000000,
10086           2.0000000000000000, 0.89999999999999991 },
10087 };
10088 
10089 // Test function for a=5.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
10090 template <typename Tp>
test146()10091 void test146()
10092 {
10093   const Tp eps = std::numeric_limits<Tp>::epsilon();
10094   Tp max_abs_diff = -Tp(1);
10095   Tp max_abs_frac = -Tp(1);
10096   unsigned int num_datum = sizeof(data146)
10097                          / sizeof(testcase_hyperg<double>);
10098   for (unsigned int i = 0; i < num_datum; ++i)
10099     {
10100       const Tp f = std::tr1::hyperg(Tp(data146[i].a), Tp(data146[i].b),
10101                    Tp(data146[i].c), Tp(data146[i].x));
10102       const Tp f0 = data146[i].f0;
10103       const Tp diff = f - f0;
10104       if (std::abs(diff) > max_abs_diff)
10105         max_abs_diff = std::abs(diff);
10106       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10107         {
10108           const Tp frac = diff / f0;
10109           if (std::abs(frac) > max_abs_frac)
10110             max_abs_frac = std::abs(frac);
10111         }
10112     }
10113   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10114 }
10115 
10116 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
10117 testcase_hyperg<double> data147[] = {
10118   { 0.68252041951139264, 5.0000000000000000, 0.50000000000000000,
10119           4.0000000000000000, -0.90000000000000002 },
10120   { 0.70394732624993395, 5.0000000000000000, 0.50000000000000000,
10121           4.0000000000000000, -0.80000000000000004 },
10122   { 0.72748884971552041, 5.0000000000000000, 0.50000000000000000,
10123           4.0000000000000000, -0.69999999999999996 },
10124   { 0.75351147371199689, 5.0000000000000000, 0.50000000000000000,
10125           4.0000000000000000, -0.59999999999999998 },
10126   { 0.78247589005573748, 5.0000000000000000, 0.50000000000000000,
10127           4.0000000000000000, -0.50000000000000000 },
10128   { 0.81497017420249818, 5.0000000000000000, 0.50000000000000000,
10129           4.0000000000000000, -0.40000000000000002 },
10130   { 0.85175826875009564, 5.0000000000000000, 0.50000000000000000,
10131           4.0000000000000000, -0.30000000000000004 },
10132   { 0.89385278481745867, 5.0000000000000000, 0.50000000000000000,
10133           4.0000000000000000, -0.19999999999999996 },
10134   { 0.94262778709507411, 5.0000000000000000, 0.50000000000000000,
10135           4.0000000000000000, -0.099999999999999978 },
10136   { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
10137           4.0000000000000000, 0.0000000000000000 },
10138   { 1.0687327277420910, 5.0000000000000000, 0.50000000000000000,
10139           4.0000000000000000, 0.10000000000000009 },
10140   { 1.1529725508983291, 5.0000000000000000, 0.50000000000000000,
10141           4.0000000000000000, 0.19999999999999996 },
10142   { 1.2592587134058799, 5.0000000000000000, 0.50000000000000000,
10143           4.0000000000000000, 0.30000000000000004 },
10144   { 1.3985773194637892, 5.0000000000000000, 0.50000000000000000,
10145           4.0000000000000000, 0.39999999999999991 },
10146   { 1.5909902576697317, 5.0000000000000000, 0.50000000000000000,
10147           4.0000000000000000, 0.50000000000000000 },
10148   { 1.8776023607249752, 5.0000000000000000, 0.50000000000000000,
10149           4.0000000000000000, 0.60000000000000009 },
10150   { 2.3582499003694646, 5.0000000000000000, 0.50000000000000000,
10151           4.0000000000000000, 0.69999999999999996 },
10152   { 3.3541019662496838, 5.0000000000000000, 0.50000000000000000,
10153           4.0000000000000000, 0.80000000000000004 },
10154   { 6.7198400278577859, 5.0000000000000000, 0.50000000000000000,
10155           4.0000000000000000, 0.89999999999999991 },
10156 };
10157 
10158 // Test function for a=5.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
10159 template <typename Tp>
test147()10160 void test147()
10161 {
10162   const Tp eps = std::numeric_limits<Tp>::epsilon();
10163   Tp max_abs_diff = -Tp(1);
10164   Tp max_abs_frac = -Tp(1);
10165   unsigned int num_datum = sizeof(data147)
10166                          / sizeof(testcase_hyperg<double>);
10167   for (unsigned int i = 0; i < num_datum; ++i)
10168     {
10169       const Tp f = std::tr1::hyperg(Tp(data147[i].a), Tp(data147[i].b),
10170                    Tp(data147[i].c), Tp(data147[i].x));
10171       const Tp f0 = data147[i].f0;
10172       const Tp diff = f - f0;
10173       if (std::abs(diff) > max_abs_diff)
10174         max_abs_diff = std::abs(diff);
10175       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10176         {
10177           const Tp frac = diff / f0;
10178           if (std::abs(frac) > max_abs_frac)
10179             max_abs_frac = std::abs(frac);
10180         }
10181     }
10182   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10183 }
10184 
10185 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
10186 testcase_hyperg<double> data148[] = {
10187   { 0.75755211927082589, 5.0000000000000000, 0.50000000000000000,
10188           6.0000000000000000, -0.90000000000000002 },
10189   { 0.77603550233010998, 5.0000000000000000, 0.50000000000000000,
10190           6.0000000000000000, -0.80000000000000004 },
10191   { 0.79596241913438492, 5.0000000000000000, 0.50000000000000000,
10192           6.0000000000000000, -0.69999999999999996 },
10193   { 0.81753360792105201, 5.0000000000000000, 0.50000000000000000,
10194           6.0000000000000000, -0.59999999999999998 },
10195   { 0.84099165409805521, 5.0000000000000000, 0.50000000000000000,
10196           6.0000000000000000, -0.50000000000000000 },
10197   { 0.86663303852180873, 5.0000000000000000, 0.50000000000000000,
10198           6.0000000000000000, -0.40000000000000002 },
10199   { 0.89482475828629970, 5.0000000000000000, 0.50000000000000000,
10200           6.0000000000000000, -0.30000000000000004 },
10201   { 0.92602774279590350, 5.0000000000000000, 0.50000000000000000,
10202           6.0000000000000000, -0.19999999999999996 },
10203   { 0.96083064727087386, 5.0000000000000000, 0.50000000000000000,
10204           6.0000000000000000, -0.099999999999999978 },
10205   { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
10206           6.0000000000000000, 0.0000000000000000 },
10207   { 1.0445570841313008, 5.0000000000000000, 0.50000000000000000,
10208           6.0000000000000000, 0.10000000000000009 },
10209   { 1.0959004638926031, 5.0000000000000000, 0.50000000000000000,
10210           6.0000000000000000, 0.19999999999999996 },
10211   { 1.1560106261370562, 5.0000000000000000, 0.50000000000000000,
10212           6.0000000000000000, 0.30000000000000004 },
10213   { 1.2278121770678145, 5.0000000000000000, 0.50000000000000000,
10214           6.0000000000000000, 0.39999999999999991 },
10215   { 1.3158640214709998, 5.0000000000000000, 0.50000000000000000,
10216           6.0000000000000000, 0.50000000000000000 },
10217   { 1.4278095344155000, 5.0000000000000000, 0.50000000000000000,
10218           6.0000000000000000, 0.60000000000000009 },
10219   { 1.5778700502946612, 5.0000000000000000, 0.50000000000000000,
10220           6.0000000000000000, 0.69999999999999996 },
10221   { 1.7972173289196469, 5.0000000000000000, 0.50000000000000000,
10222           6.0000000000000000, 0.80000000000000004 },
10223   { 2.1789970569269732, 5.0000000000000000, 0.50000000000000000,
10224           6.0000000000000000, 0.89999999999999991 },
10225 };
10226 
10227 // Test function for a=5.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
10228 template <typename Tp>
test148()10229 void test148()
10230 {
10231   const Tp eps = std::numeric_limits<Tp>::epsilon();
10232   Tp max_abs_diff = -Tp(1);
10233   Tp max_abs_frac = -Tp(1);
10234   unsigned int num_datum = sizeof(data148)
10235                          / sizeof(testcase_hyperg<double>);
10236   for (unsigned int i = 0; i < num_datum; ++i)
10237     {
10238       const Tp f = std::tr1::hyperg(Tp(data148[i].a), Tp(data148[i].b),
10239                    Tp(data148[i].c), Tp(data148[i].x));
10240       const Tp f0 = data148[i].f0;
10241       const Tp diff = f - f0;
10242       if (std::abs(diff) > max_abs_diff)
10243         max_abs_diff = std::abs(diff);
10244       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10245         {
10246           const Tp frac = diff / f0;
10247           if (std::abs(frac) > max_abs_frac)
10248             max_abs_frac = std::abs(frac);
10249         }
10250     }
10251   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10252 }
10253 
10254 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
10255 testcase_hyperg<double> data149[] = {
10256   { 0.80270093579329471, 5.0000000000000000, 0.50000000000000000,
10257           8.0000000000000000, -0.90000000000000002 },
10258   { 0.81884974572462788, 5.0000000000000000, 0.50000000000000000,
10259           8.0000000000000000, -0.80000000000000004 },
10260   { 0.83605266330015271, 5.0000000000000000, 0.50000000000000000,
10261           8.0000000000000000, -0.69999999999999996 },
10262   { 0.85443340762795972, 5.0000000000000000, 0.50000000000000000,
10263           8.0000000000000000, -0.59999999999999998 },
10264   { 0.87413762182790655, 5.0000000000000000, 0.50000000000000000,
10265           8.0000000000000000, -0.50000000000000000 },
10266   { 0.89533826626907331, 5.0000000000000000, 0.50000000000000000,
10267           8.0000000000000000, -0.40000000000000002 },
10268   { 0.91824276674115268, 5.0000000000000000, 0.50000000000000000,
10269           8.0000000000000000, -0.30000000000000004 },
10270   { 0.94310265050720576, 5.0000000000000000, 0.50000000000000000,
10271           8.0000000000000000, -0.19999999999999996 },
10272   { 0.97022678857609712, 5.0000000000000000, 0.50000000000000000,
10273           8.0000000000000000, -0.099999999999999978 },
10274   { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
10275           8.0000000000000000, 0.0000000000000000 },
10276   { 1.0329098673199812, 5.0000000000000000, 0.50000000000000000,
10277           8.0000000000000000, 0.10000000000000009 },
10278   { 1.0695865684573389, 5.0000000000000000, 0.50000000000000000,
10279           8.0000000000000000, 0.19999999999999996 },
10280   { 1.1108642103944570, 5.0000000000000000, 0.50000000000000000,
10281           8.0000000000000000, 0.30000000000000004 },
10282   { 1.1578795055970506, 5.0000000000000000, 0.50000000000000000,
10283           8.0000000000000000, 0.39999999999999991 },
10284   { 1.2122394794169442, 5.0000000000000000, 0.50000000000000000,
10285           8.0000000000000000, 0.50000000000000000 },
10286   { 1.2763274721556934, 5.0000000000000000, 0.50000000000000000,
10287           8.0000000000000000, 0.60000000000000009 },
10288   { 1.3539179650251021, 5.0000000000000000, 0.50000000000000000,
10289           8.0000000000000000, 0.69999999999999996 },
10290   { 1.4515986118197148, 5.0000000000000000, 0.50000000000000000,
10291           8.0000000000000000, 0.80000000000000004 },
10292   { 1.5829284571614219, 5.0000000000000000, 0.50000000000000000,
10293           8.0000000000000000, 0.89999999999999991 },
10294 };
10295 
10296 // Test function for a=5.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
10297 template <typename Tp>
test149()10298 void test149()
10299 {
10300   const Tp eps = std::numeric_limits<Tp>::epsilon();
10301   Tp max_abs_diff = -Tp(1);
10302   Tp max_abs_frac = -Tp(1);
10303   unsigned int num_datum = sizeof(data149)
10304                          / sizeof(testcase_hyperg<double>);
10305   for (unsigned int i = 0; i < num_datum; ++i)
10306     {
10307       const Tp f = std::tr1::hyperg(Tp(data149[i].a), Tp(data149[i].b),
10308                    Tp(data149[i].c), Tp(data149[i].x));
10309       const Tp f0 = data149[i].f0;
10310       const Tp diff = f - f0;
10311       if (std::abs(diff) > max_abs_diff)
10312         max_abs_diff = std::abs(diff);
10313       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10314         {
10315           const Tp frac = diff / f0;
10316           if (std::abs(frac) > max_abs_frac)
10317             max_abs_frac = std::abs(frac);
10318         }
10319     }
10320   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10321 }
10322 
10323 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
10324 testcase_hyperg<double> data150[] = {
10325   { 0.83322694172301959, 5.0000000000000000, 0.50000000000000000,
10326           10.000000000000000, -0.90000000000000002 },
10327   { 0.84753931604765664, 5.0000000000000000, 0.50000000000000000,
10328           10.000000000000000, -0.80000000000000004 },
10329   { 0.86265784532195022, 5.0000000000000000, 0.50000000000000000,
10330           10.000000000000000, -0.69999999999999996 },
10331   { 0.87866479300707079, 5.0000000000000000, 0.50000000000000000,
10332           10.000000000000000, -0.59999999999999998 },
10333   { 0.89565516540263501, 5.0000000000000000, 0.50000000000000000,
10334           10.000000000000000, -0.50000000000000000 },
10335   { 0.91373946207610557, 5.0000000000000000, 0.50000000000000000,
10336           10.000000000000000, -0.40000000000000002 },
10337   { 0.93304721345881891, 5.0000000000000000, 0.50000000000000000,
10338           10.000000000000000, -0.30000000000000004 },
10339   { 0.95373159512905148, 5.0000000000000000, 0.50000000000000000,
10340           10.000000000000000, -0.19999999999999996 },
10341   { 0.97597554238828121, 5.0000000000000000, 0.50000000000000000,
10342           10.000000000000000, -0.099999999999999978 },
10343   { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
10344           10.000000000000000, 0.0000000000000000 },
10345   { 1.0260752851887982, 5.0000000000000000, 0.50000000000000000,
10346           10.000000000000000, 0.10000000000000009 },
10347   { 1.0545371197996178, 5.0000000000000000, 0.50000000000000000,
10348           10.000000000000000, 0.19999999999999996 },
10349   { 1.0858099017045830, 5.0000000000000000, 0.50000000000000000,
10350           10.000000000000000, 0.30000000000000004 },
10351   { 1.1204416568688709, 5.0000000000000000, 0.50000000000000000,
10352           10.000000000000000, 0.39999999999999991 },
10353   { 1.1591587835964847, 5.0000000000000000, 0.50000000000000000,
10354           10.000000000000000, 0.50000000000000000 },
10355   { 1.2029564720303347, 5.0000000000000000, 0.50000000000000000,
10356           10.000000000000000, 0.60000000000000009 },
10357   { 1.2532588722007874, 5.0000000000000000, 0.50000000000000000,
10358           10.000000000000000, 0.69999999999999996 },
10359   { 1.3122319926925459, 5.0000000000000000, 0.50000000000000000,
10360           10.000000000000000, 0.80000000000000004 },
10361   { 1.3834948587364100, 5.0000000000000000, 0.50000000000000000,
10362           10.000000000000000, 0.89999999999999991 },
10363 };
10364 
10365 // Test function for a=5.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
10366 template <typename Tp>
test150()10367 void test150()
10368 {
10369   const Tp eps = std::numeric_limits<Tp>::epsilon();
10370   Tp max_abs_diff = -Tp(1);
10371   Tp max_abs_frac = -Tp(1);
10372   unsigned int num_datum = sizeof(data150)
10373                          / sizeof(testcase_hyperg<double>);
10374   for (unsigned int i = 0; i < num_datum; ++i)
10375     {
10376       const Tp f = std::tr1::hyperg(Tp(data150[i].a), Tp(data150[i].b),
10377                    Tp(data150[i].c), Tp(data150[i].x));
10378       const Tp f0 = data150[i].f0;
10379       const Tp diff = f - f0;
10380       if (std::abs(diff) > max_abs_diff)
10381         max_abs_diff = std::abs(diff);
10382       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10383         {
10384           const Tp frac = diff / f0;
10385           if (std::abs(frac) > max_abs_frac)
10386             max_abs_frac = std::abs(frac);
10387         }
10388     }
10389   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10390 }
10391 
10392 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
10393 testcase_hyperg<double> data151[] = {
10394   { 0.25646288779245091, 5.0000000000000000, 1.0000000000000000,
10395           2.0000000000000000, -0.90000000000000002 },
10396   { 0.28273129096174382, 5.0000000000000000, 1.0000000000000000,
10397           2.0000000000000000, -0.80000000000000004 },
10398   { 0.31438201170962976, 5.0000000000000000, 1.0000000000000000,
10399           2.0000000000000000, -0.69999999999999996 },
10400   { 0.35308837890625017, 5.0000000000000000, 1.0000000000000000,
10401           2.0000000000000000, -0.59999999999999998 },
10402   { 0.40123456790123463, 5.0000000000000000, 1.0000000000000000,
10403           2.0000000000000000, -0.50000000000000000 },
10404   { 0.46230737192836319, 5.0000000000000000, 1.0000000000000000,
10405           2.0000000000000000, -0.40000000000000002 },
10406   { 0.54156016946185359, 5.0000000000000000, 1.0000000000000000,
10407           2.0000000000000000, -0.30000000000000004 },
10408   { 0.64718364197530875, 5.0000000000000000, 1.0000000000000000,
10409           2.0000000000000000, -0.19999999999999996 },
10410   { 0.79246636158732342, 5.0000000000000000, 1.0000000000000000,
10411           2.0000000000000000, -0.099999999999999978 },
10412   { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
10413           2.0000000000000000, 0.0000000000000000 },
10414   { 1.3103947568968148, 5.0000000000000000, 1.0000000000000000,
10415           2.0000000000000000, 0.10000000000000009 },
10416   { 1.8017578125000004, 5.0000000000000000, 1.0000000000000000,
10417           2.0000000000000000, 0.19999999999999996 },
10418   { 2.6374427321949185, 5.0000000000000000, 1.0000000000000000,
10419           2.0000000000000000, 0.30000000000000004 },
10420   { 4.1975308641975282, 5.0000000000000000, 1.0000000000000000,
10421           2.0000000000000000, 0.39999999999999991 },
10422   { 7.4999999999999964, 5.0000000000000000, 1.0000000000000000,
10423           2.0000000000000000, 0.50000000000000000 },
10424   { 15.859375000000012, 5.0000000000000000, 1.0000000000000000,
10425           2.0000000000000000, 0.60000000000000009 },
10426   { 43.734567901234513, 5.0000000000000000, 1.0000000000000000,
10427           2.0000000000000000, 0.69999999999999996 },
10428   { 194.99999999999994, 5.0000000000000000, 1.0000000000000000,
10429           2.0000000000000000, 0.80000000000000004 },
10430   { 2777.4999999999832, 5.0000000000000000, 1.0000000000000000,
10431           2.0000000000000000, 0.89999999999999991 },
10432 };
10433 
10434 // Test function for a=5.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
10435 template <typename Tp>
test151()10436 void test151()
10437 {
10438   const Tp eps = std::numeric_limits<Tp>::epsilon();
10439   Tp max_abs_diff = -Tp(1);
10440   Tp max_abs_frac = -Tp(1);
10441   unsigned int num_datum = sizeof(data151)
10442                          / sizeof(testcase_hyperg<double>);
10443   for (unsigned int i = 0; i < num_datum; ++i)
10444     {
10445       const Tp f = std::tr1::hyperg(Tp(data151[i].a), Tp(data151[i].b),
10446                    Tp(data151[i].c), Tp(data151[i].x));
10447       const Tp f0 = data151[i].f0;
10448       const Tp diff = f - f0;
10449       if (std::abs(diff) > max_abs_diff)
10450         max_abs_diff = std::abs(diff);
10451       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10452         {
10453           const Tp frac = diff / f0;
10454           if (std::abs(frac) > max_abs_frac)
10455             max_abs_frac = std::abs(frac);
10456         }
10457     }
10458   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10459 }
10460 
10461 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
10462 testcase_hyperg<double> data152[] = {
10463   { 0.46398891966759004, 5.0000000000000000, 1.0000000000000000,
10464           4.0000000000000000, -0.90000000000000002 },
10465   { 0.49382716049382713, 5.0000000000000000, 1.0000000000000000,
10466           4.0000000000000000, -0.80000000000000004 },
10467   { 0.52768166089965396, 5.0000000000000000, 1.0000000000000000,
10468           4.0000000000000000, -0.69999999999999996 },
10469   { 0.56640624999999978, 5.0000000000000000, 1.0000000000000000,
10470           4.0000000000000000, -0.59999999999999998 },
10471   { 0.61111111111111116, 5.0000000000000000, 1.0000000000000000,
10472           4.0000000000000000, -0.50000000000000000 },
10473   { 0.66326530612244894, 5.0000000000000000, 1.0000000000000000,
10474           4.0000000000000000, -0.40000000000000002 },
10475   { 0.72485207100591698, 5.0000000000000000, 1.0000000000000000,
10476           4.0000000000000000, -0.30000000000000004 },
10477   { 0.79861111111111094, 5.0000000000000000, 1.0000000000000000,
10478           4.0000000000000000, -0.19999999999999996 },
10479   { 0.88842975206611552, 5.0000000000000000, 1.0000000000000000,
10480           4.0000000000000000, -0.099999999999999978 },
10481   { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
10482           4.0000000000000000, 0.0000000000000000 },
10483   { 1.1419753086419753, 5.0000000000000000, 1.0000000000000000,
10484           4.0000000000000000, 0.10000000000000009 },
10485   { 1.3281249999999998, 5.0000000000000000, 1.0000000000000000,
10486           4.0000000000000000, 0.19999999999999996 },
10487   { 1.5816326530612239, 5.0000000000000000, 1.0000000000000000,
10488           4.0000000000000000, 0.30000000000000004 },
10489   { 1.9444444444444444, 5.0000000000000000, 1.0000000000000000,
10490           4.0000000000000000, 0.39999999999999991 },
10491   { 2.5000000000000000, 5.0000000000000000, 1.0000000000000000,
10492           4.0000000000000000, 0.50000000000000000 },
10493   { 3.4374999999999996, 5.0000000000000000, 1.0000000000000000,
10494           4.0000000000000000, 0.60000000000000009 },
10495   { 5.2777777777777715, 5.0000000000000000, 1.0000000000000000,
10496           4.0000000000000000, 0.69999999999999996 },
10497   { 9.9999999999999947, 5.0000000000000000, 1.0000000000000000,
10498           4.0000000000000000, 0.80000000000000004 },
10499   { 32.499999999999837, 5.0000000000000000, 1.0000000000000000,
10500           4.0000000000000000, 0.89999999999999991 },
10501 };
10502 
10503 // Test function for a=5.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
10504 template <typename Tp>
test152()10505 void test152()
10506 {
10507   const Tp eps = std::numeric_limits<Tp>::epsilon();
10508   Tp max_abs_diff = -Tp(1);
10509   Tp max_abs_frac = -Tp(1);
10510   unsigned int num_datum = sizeof(data152)
10511                          / sizeof(testcase_hyperg<double>);
10512   for (unsigned int i = 0; i < num_datum; ++i)
10513     {
10514       const Tp f = std::tr1::hyperg(Tp(data152[i].a), Tp(data152[i].b),
10515                    Tp(data152[i].c), Tp(data152[i].x));
10516       const Tp f0 = data152[i].f0;
10517       const Tp diff = f - f0;
10518       if (std::abs(diff) > max_abs_diff)
10519         max_abs_diff = std::abs(diff);
10520       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10521         {
10522           const Tp frac = diff / f0;
10523           if (std::abs(frac) > max_abs_frac)
10524             max_abs_frac = std::abs(frac);
10525         }
10526     }
10527   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10528 }
10529 
10530 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
10531 testcase_hyperg<double> data153[] = {
10532   { 0.57476744883397501, 5.0000000000000000, 1.0000000000000000,
10533           6.0000000000000000, -0.90000000000000002 },
10534   { 0.60302731682513933, 5.0000000000000000, 1.0000000000000000,
10535           6.0000000000000000, -0.80000000000000004 },
10536   { 0.63425708719096396, 5.0000000000000000, 1.0000000000000000,
10537           6.0000000000000000, -0.69999999999999996 },
10538   { 0.66895764182970419, 5.0000000000000000, 1.0000000000000000,
10539           6.0000000000000000, -0.59999999999999998 },
10540   { 0.70775063063963428, 5.0000000000000000, 1.0000000000000000,
10541           6.0000000000000000, -0.50000000000000000 },
10542   { 0.75141762103495924, 5.0000000000000000, 1.0000000000000000,
10543           6.0000000000000000, -0.40000000000000002 },
10544   { 0.80095569442603298, 5.0000000000000000, 1.0000000000000000,
10545           6.0000000000000000, -0.30000000000000004 },
10546   { 0.85765823887436754, 5.0000000000000000, 1.0000000000000000,
10547           6.0000000000000000, -0.19999999999999996 },
10548   { 0.92323549576335540, 5.0000000000000000, 1.0000000000000000,
10549           6.0000000000000000, -0.099999999999999978 },
10550   { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
10551           6.0000000000000000, 0.0000000000000000 },
10552   { 1.0911622464839472, 5.0000000000000000, 1.0000000000000000,
10553           6.0000000000000000, 0.10000000000000009 },
10554   { 1.2013226178607666, 5.0000000000000000, 1.0000000000000000,
10555           6.0000000000000000, 0.19999999999999996 },
10556   { 1.3373332072682687, 5.0000000000000000, 1.0000000000000000,
10557           6.0000000000000000, 0.30000000000000004 },
10558   { 1.5099074378209716, 5.0000000000000000, 1.0000000000000000,
10559           6.0000000000000000, 0.39999999999999991 },
10560   { 1.7368822229245819, 5.0000000000000000, 1.0000000000000000,
10561           6.0000000000000000, 0.50000000000000000 },
10562   { 2.0505871832661429, 5.0000000000000000, 1.0000000000000000,
10563           6.0000000000000000, 0.60000000000000009 },
10564   { 2.5172389775867967, 5.0000000000000000, 1.0000000000000000,
10565           6.0000000000000000, 0.69999999999999996 },
10566   { 3.3015631983556144, 5.0000000000000000, 1.0000000000000000,
10567           6.0000000000000000, 0.80000000000000004 },
10568   { 5.0005935155044519, 5.0000000000000000, 1.0000000000000000,
10569           6.0000000000000000, 0.89999999999999991 },
10570 };
10571 
10572 // Test function for a=5.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
10573 template <typename Tp>
test153()10574 void test153()
10575 {
10576   const Tp eps = std::numeric_limits<Tp>::epsilon();
10577   Tp max_abs_diff = -Tp(1);
10578   Tp max_abs_frac = -Tp(1);
10579   unsigned int num_datum = sizeof(data153)
10580                          / sizeof(testcase_hyperg<double>);
10581   for (unsigned int i = 0; i < num_datum; ++i)
10582     {
10583       const Tp f = std::tr1::hyperg(Tp(data153[i].a), Tp(data153[i].b),
10584                    Tp(data153[i].c), Tp(data153[i].x));
10585       const Tp f0 = data153[i].f0;
10586       const Tp diff = f - f0;
10587       if (std::abs(diff) > max_abs_diff)
10588         max_abs_diff = std::abs(diff);
10589       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10590         {
10591           const Tp frac = diff / f0;
10592           if (std::abs(frac) > max_abs_frac)
10593             max_abs_frac = std::abs(frac);
10594         }
10595     }
10596   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10597 }
10598 
10599 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
10600 testcase_hyperg<double> data154[] = {
10601   { 0.64582752605387961, 5.0000000000000000, 1.0000000000000000,
10602           8.0000000000000000, -0.90000000000000002 },
10603   { 0.67184161997264169, 5.0000000000000000, 1.0000000000000000,
10604           8.0000000000000000, -0.80000000000000004 },
10605   { 0.70012779922368040, 5.0000000000000000, 1.0000000000000000,
10606           8.0000000000000000, -0.69999999999999996 },
10607   { 0.73100784656910256, 5.0000000000000000, 1.0000000000000000,
10608           8.0000000000000000, -0.59999999999999998 },
10609   { 0.76486919089091077, 5.0000000000000000, 1.0000000000000000,
10610           8.0000000000000000, -0.50000000000000000 },
10611   { 0.80218301124334579, 5.0000000000000000, 1.0000000000000000,
10612           8.0000000000000000, -0.40000000000000002 },
10613   { 0.84352883533234446, 5.0000000000000000, 1.0000000000000000,
10614           8.0000000000000000, -0.30000000000000004 },
10615   { 0.88962858902212572, 5.0000000000000000, 1.0000000000000000,
10616           8.0000000000000000, -0.19999999999999996 },
10617   { 0.94139473468584123, 5.0000000000000000, 1.0000000000000000,
10618           8.0000000000000000, -0.099999999999999978 },
10619   { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
10620           8.0000000000000000, 0.0000000000000000 },
10621   { 1.0669812691939897, 5.0000000000000000, 1.0000000000000000,
10622           8.0000000000000000, 0.10000000000000009 },
10623   { 1.1443996012177726, 5.0000000000000000, 1.0000000000000000,
10624           8.0000000000000000, 0.19999999999999996 },
10625   { 1.2350966976721314, 5.0000000000000000, 1.0000000000000000,
10626           8.0000000000000000, 0.30000000000000004 },
10627   { 1.3431264370409088, 5.0000000000000000, 1.0000000000000000,
10628           8.0000000000000000, 0.39999999999999991 },
10629   { 1.4745266814162399, 5.0000000000000000, 1.0000000000000000,
10630           8.0000000000000000, 0.50000000000000000 },
10631   { 1.6388137104840066, 5.0000000000000000, 1.0000000000000000,
10632           8.0000000000000000, 0.60000000000000009 },
10633   { 1.8522074849776518, 5.0000000000000000, 1.0000000000000000,
10634           8.0000000000000000, 0.69999999999999996 },
10635   { 2.1458016978417458, 5.0000000000000000, 1.0000000000000000,
10636           8.0000000000000000, 0.80000000000000004 },
10637   { 2.5927464669826339, 5.0000000000000000, 1.0000000000000000,
10638           8.0000000000000000, 0.89999999999999991 },
10639 };
10640 
10641 // Test function for a=5.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
10642 template <typename Tp>
test154()10643 void test154()
10644 {
10645   const Tp eps = std::numeric_limits<Tp>::epsilon();
10646   Tp max_abs_diff = -Tp(1);
10647   Tp max_abs_frac = -Tp(1);
10648   unsigned int num_datum = sizeof(data154)
10649                          / sizeof(testcase_hyperg<double>);
10650   for (unsigned int i = 0; i < num_datum; ++i)
10651     {
10652       const Tp f = std::tr1::hyperg(Tp(data154[i].a), Tp(data154[i].b),
10653                    Tp(data154[i].c), Tp(data154[i].x));
10654       const Tp f0 = data154[i].f0;
10655       const Tp diff = f - f0;
10656       if (std::abs(diff) > max_abs_diff)
10657         max_abs_diff = std::abs(diff);
10658       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10659         {
10660           const Tp frac = diff / f0;
10661           if (std::abs(frac) > max_abs_frac)
10662             max_abs_frac = std::abs(frac);
10663         }
10664     }
10665   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10666 }
10667 
10668 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
10669 testcase_hyperg<double> data155[] = {
10670   { 0.69583236336670629, 5.0000000000000000, 1.0000000000000000,
10671           10.000000000000000, -0.90000000000000002 },
10672   { 0.71968920666899694, 5.0000000000000000, 1.0000000000000000,
10673           10.000000000000000, -0.80000000000000004 },
10674   { 0.74533885416044232, 5.0000000000000000, 1.0000000000000000,
10675           10.000000000000000, -0.69999999999999996 },
10676   { 0.77300145361503014, 5.0000000000000000, 1.0000000000000000,
10677           10.000000000000000, -0.59999999999999998 },
10678   { 0.80293630810919514, 5.0000000000000000, 1.0000000000000000,
10679           10.000000000000000, -0.50000000000000000 },
10680   { 0.83545132638592035, 5.0000000000000000, 1.0000000000000000,
10681           10.000000000000000, -0.40000000000000002 },
10682   { 0.87091544744412508, 5.0000000000000000, 1.0000000000000000,
10683           10.000000000000000, -0.30000000000000004 },
10684   { 0.90977522877919847, 5.0000000000000000, 1.0000000000000000,
10685           10.000000000000000, -0.19999999999999996 },
10686   { 0.95257738192069130, 5.0000000000000000, 1.0000000000000000,
10687           10.000000000000000, -0.099999999999999978 },
10688   { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
10689           10.000000000000000, 0.0000000000000000 },
10690   { 1.0528968282789379, 5.0000000000000000, 1.0000000000000000,
10691           10.000000000000000, 0.10000000000000009 },
10692   { 1.1123617169062123, 5.0000000000000000, 1.0000000000000000,
10693           10.000000000000000, 0.19999999999999996 },
10694   { 1.1798254572896132, 5.0000000000000000, 1.0000000000000000,
10695           10.000000000000000, 0.30000000000000004 },
10696   { 1.2572069000522696, 5.0000000000000000, 1.0000000000000000,
10697           10.000000000000000, 0.39999999999999991 },
10698   { 1.3471600884974377, 5.0000000000000000, 1.0000000000000000,
10699           10.000000000000000, 0.50000000000000000 },
10700   { 1.4535032279573519, 5.0000000000000000, 1.0000000000000000,
10701           10.000000000000000, 0.60000000000000009 },
10702   { 1.5820245752814948, 5.0000000000000000, 1.0000000000000000,
10703           10.000000000000000, 0.69999999999999996 },
10704   { 1.7421756366906538, 5.0000000000000000, 1.0000000000000000,
10705           10.000000000000000, 0.80000000000000004 },
10706   { 1.9513145531098233, 5.0000000000000000, 1.0000000000000000,
10707           10.000000000000000, 0.89999999999999991 },
10708 };
10709 
10710 // Test function for a=5.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
10711 template <typename Tp>
test155()10712 void test155()
10713 {
10714   const Tp eps = std::numeric_limits<Tp>::epsilon();
10715   Tp max_abs_diff = -Tp(1);
10716   Tp max_abs_frac = -Tp(1);
10717   unsigned int num_datum = sizeof(data155)
10718                          / sizeof(testcase_hyperg<double>);
10719   for (unsigned int i = 0; i < num_datum; ++i)
10720     {
10721       const Tp f = std::tr1::hyperg(Tp(data155[i].a), Tp(data155[i].b),
10722                    Tp(data155[i].c), Tp(data155[i].x));
10723       const Tp f0 = data155[i].f0;
10724       const Tp diff = f - f0;
10725       if (std::abs(diff) > max_abs_diff)
10726         max_abs_diff = std::abs(diff);
10727       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10728         {
10729           const Tp frac = diff / f0;
10730           if (std::abs(frac) > max_abs_frac)
10731             max_abs_frac = std::abs(frac);
10732         }
10733     }
10734   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10735 }
10736 
10737 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
10738 testcase_hyperg<double> data156[] = {
10739   { 0.040386107340619266, 5.0000000000000000, 2.0000000000000000,
10740           2.0000000000000000, -0.90000000000000002 },
10741   { 0.052922149401344633, 5.0000000000000000, 2.0000000000000000,
10742           2.0000000000000000, -0.80000000000000004 },
10743   { 0.070429627772374270, 5.0000000000000000, 2.0000000000000000,
10744           2.0000000000000000, -0.69999999999999996 },
10745   { 0.095367431640624972, 5.0000000000000000, 2.0000000000000000,
10746           2.0000000000000000, -0.59999999999999998 },
10747   { 0.13168724279835387, 5.0000000000000000, 2.0000000000000000,
10748           2.0000000000000000, -0.50000000000000000 },
10749   { 0.18593443208187066, 5.0000000000000000, 2.0000000000000000,
10750           2.0000000000000000, -0.40000000000000002 },
10751   { 0.26932907434290437, 5.0000000000000000, 2.0000000000000000,
10752           2.0000000000000000, -0.30000000000000004 },
10753   { 0.40187757201646096, 5.0000000000000000, 2.0000000000000000,
10754           2.0000000000000000, -0.19999999999999996 },
10755   { 0.62092132305915493, 5.0000000000000000, 2.0000000000000000,
10756           2.0000000000000000, -0.099999999999999978 },
10757   { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
10758           2.0000000000000000, 0.0000000000000000 },
10759   { 1.6935087808430296, 5.0000000000000000, 2.0000000000000000,
10760           2.0000000000000000, 0.10000000000000009 },
10761   { 3.0517578124999991, 5.0000000000000000, 2.0000000000000000,
10762           2.0000000000000000, 0.19999999999999996 },
10763   { 5.9499018266198629, 5.0000000000000000, 2.0000000000000000,
10764           2.0000000000000000, 0.30000000000000004 },
10765   { 12.860082304526737, 5.0000000000000000, 2.0000000000000000,
10766           2.0000000000000000, 0.39999999999999991 },
10767   { 32.000000000000000, 5.0000000000000000, 2.0000000000000000,
10768           2.0000000000000000, 0.50000000000000000 },
10769   { 97.656250000000114, 5.0000000000000000, 2.0000000000000000,
10770           2.0000000000000000, 0.60000000000000009 },
10771   { 411.52263374485580, 5.0000000000000000, 2.0000000000000000,
10772           2.0000000000000000, 0.69999999999999996 },
10773   { 3124.9999999999991, 5.0000000000000000, 2.0000000000000000,
10774           2.0000000000000000, 0.80000000000000004 },
10775   { 99999.999999999665, 5.0000000000000000, 2.0000000000000000,
10776           2.0000000000000000, 0.89999999999999991 },
10777 };
10778 
10779 // Test function for a=5.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
10780 template <typename Tp>
test156()10781 void test156()
10782 {
10783   const Tp eps = std::numeric_limits<Tp>::epsilon();
10784   Tp max_abs_diff = -Tp(1);
10785   Tp max_abs_frac = -Tp(1);
10786   unsigned int num_datum = sizeof(data156)
10787                          / sizeof(testcase_hyperg<double>);
10788   for (unsigned int i = 0; i < num_datum; ++i)
10789     {
10790       const Tp f = std::tr1::hyperg(Tp(data156[i].a), Tp(data156[i].b),
10791                    Tp(data156[i].c), Tp(data156[i].x));
10792       const Tp f0 = data156[i].f0;
10793       const Tp diff = f - f0;
10794       if (std::abs(diff) > max_abs_diff)
10795         max_abs_diff = std::abs(diff);
10796       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10797         {
10798           const Tp frac = diff / f0;
10799           if (std::abs(frac) > max_abs_frac)
10800             max_abs_frac = std::abs(frac);
10801         }
10802     }
10803   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10804 }
10805 
10806 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
10807 testcase_hyperg<double> data157[] = {
10808   { 0.21140107887447140, 5.0000000000000000, 2.0000000000000000,
10809           4.0000000000000000, -0.90000000000000002 },
10810   { 0.24005486968449935, 5.0000000000000000, 2.0000000000000000,
10811           4.0000000000000000, -0.80000000000000004 },
10812   { 0.27478119275391821, 5.0000000000000000, 2.0000000000000000,
10813           4.0000000000000000, -0.69999999999999996 },
10814   { 0.31738281249999994, 5.0000000000000000, 2.0000000000000000,
10815           4.0000000000000000, -0.59999999999999998 },
10816   { 0.37037037037037035, 5.0000000000000000, 2.0000000000000000,
10817           4.0000000000000000, -0.50000000000000000 },
10818   { 0.43731778425655982, 5.0000000000000000, 2.0000000000000000,
10819           4.0000000000000000, -0.40000000000000002 },
10820   { 0.52344105598543444, 5.0000000000000000, 2.0000000000000000,
10821           4.0000000000000000, -0.30000000000000004 },
10822   { 0.63657407407407429, 5.0000000000000000, 2.0000000000000000,
10823           4.0000000000000000, -0.19999999999999996 },
10824   { 0.78888054094665638, 5.0000000000000000, 2.0000000000000000,
10825           4.0000000000000000, -0.099999999999999978 },
10826   { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
10827           4.0000000000000000, 0.0000000000000000 },
10828   { 1.3031550068587108, 5.0000000000000000, 2.0000000000000000,
10829           4.0000000000000000, 0.10000000000000009 },
10830   { 1.7578125000000002, 5.0000000000000000, 2.0000000000000000,
10831           4.0000000000000000, 0.19999999999999996 },
10832   { 2.4781341107871717, 5.0000000000000000, 2.0000000000000000,
10833           4.0000000000000000, 0.30000000000000004 },
10834   { 3.7037037037037037, 5.0000000000000000, 2.0000000000000000,
10835           4.0000000000000000, 0.39999999999999991 },
10836   { 5.9999999999999982, 5.0000000000000000, 2.0000000000000000,
10837           4.0000000000000000, 0.50000000000000000 },
10838   { 10.937500000000005, 5.0000000000000000, 2.0000000000000000,
10839           4.0000000000000000, 0.60000000000000009 },
10840   { 24.074074074074076, 5.0000000000000000, 2.0000000000000000,
10841           4.0000000000000000, 0.69999999999999996 },
10842   { 74.999999999999957, 5.0000000000000000, 2.0000000000000000,
10843           4.0000000000000000, 0.80000000000000004 },
10844   { 549.99999999999670, 5.0000000000000000, 2.0000000000000000,
10845           4.0000000000000000, 0.89999999999999991 },
10846 };
10847 
10848 // Test function for a=5.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
10849 template <typename Tp>
test157()10850 void test157()
10851 {
10852   const Tp eps = std::numeric_limits<Tp>::epsilon();
10853   Tp max_abs_diff = -Tp(1);
10854   Tp max_abs_frac = -Tp(1);
10855   unsigned int num_datum = sizeof(data157)
10856                          / sizeof(testcase_hyperg<double>);
10857   for (unsigned int i = 0; i < num_datum; ++i)
10858     {
10859       const Tp f = std::tr1::hyperg(Tp(data157[i].a), Tp(data157[i].b),
10860                    Tp(data157[i].c), Tp(data157[i].x));
10861       const Tp f0 = data157[i].f0;
10862       const Tp diff = f - f0;
10863       if (std::abs(diff) > max_abs_diff)
10864         max_abs_diff = std::abs(diff);
10865       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10866         {
10867           const Tp frac = diff / f0;
10868           if (std::abs(frac) > max_abs_frac)
10869             max_abs_frac = std::abs(frac);
10870         }
10871     }
10872   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10873 }
10874 
10875 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
10876 testcase_hyperg<double> data158[] = {
10877   { 0.33250915203252107, 5.0000000000000000, 2.0000000000000000,
10878           6.0000000000000000, -0.90000000000000002 },
10879   { 0.36566851047721960, 5.0000000000000000, 2.0000000000000000,
10880           6.0000000000000000, -0.80000000000000004 },
10881   { 0.40414812182437942, 5.0000000000000000, 2.0000000000000000,
10882           6.0000000000000000, -0.69999999999999996 },
10883   { 0.44916943268118470, 5.0000000000000000, 2.0000000000000000,
10884           6.0000000000000000, -0.59999999999999998 },
10885   { 0.50233081077479569, 5.0000000000000000, 2.0000000000000000,
10886           6.0000000000000000, -0.50000000000000000 },
10887   { 0.56575808728873322, 5.0000000000000000, 2.0000000000000000,
10888           6.0000000000000000, -0.40000000000000002 },
10889   { 0.64233106844971422, 5.0000000000000000, 2.0000000000000000,
10890           6.0000000000000000, -0.30000000000000004 },
10891   { 0.73603371116919514, 5.0000000000000000, 2.0000000000000000,
10892           6.0000000000000000, -0.19999999999999996 },
10893   { 0.85251256240112439, 5.0000000000000000, 2.0000000000000000,
10894           6.0000000000000000, -0.099999999999999978 },
10895   { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
10896           6.0000000000000000, 0.0000000000000000 },
10897   { 1.1909065696197674, 5.0000000000000000, 2.0000000000000000,
10898           6.0000000000000000, 0.10000000000000009 },
10899   { 1.4447095285569311, 5.0000000000000000, 2.0000000000000000,
10900           6.0000000000000000, 0.19999999999999996 },
10901   { 1.7935243137840653, 5.0000000000000000, 2.0000000000000000,
10902           6.0000000000000000, 0.30000000000000004 },
10903   { 2.2937035820494454, 5.0000000000000000, 2.0000000000000000,
10904           6.0000000000000000, 0.39999999999999991 },
10905   { 3.0524711083016687, 5.0000000000000000, 2.0000000000000000,
10906           6.0000000000000000, 0.50000000000000000 },
10907   { 4.2976512669354259, 5.0000000000000000, 2.0000000000000000,
10908           6.0000000000000000, 0.60000000000000009 },
10909   { 6.5977107563194677, 5.0000000000000000, 2.0000000000000000,
10910           6.0000000000000000, 0.69999999999999996 },
10911   { 11.793747206577530, 5.0000000000000000, 2.0000000000000000,
10912           6.0000000000000000, 0.80000000000000004 },
10913   { 29.997625937982058, 5.0000000000000000, 2.0000000000000000,
10914           6.0000000000000000, 0.89999999999999991 },
10915 };
10916 
10917 // Test function for a=5.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
10918 template <typename Tp>
test158()10919 void test158()
10920 {
10921   const Tp eps = std::numeric_limits<Tp>::epsilon();
10922   Tp max_abs_diff = -Tp(1);
10923   Tp max_abs_frac = -Tp(1);
10924   unsigned int num_datum = sizeof(data158)
10925                          / sizeof(testcase_hyperg<double>);
10926   for (unsigned int i = 0; i < num_datum; ++i)
10927     {
10928       const Tp f = std::tr1::hyperg(Tp(data158[i].a), Tp(data158[i].b),
10929                    Tp(data158[i].c), Tp(data158[i].x));
10930       const Tp f0 = data158[i].f0;
10931       const Tp diff = f - f0;
10932       if (std::abs(diff) > max_abs_diff)
10933         max_abs_diff = std::abs(diff);
10934       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10935         {
10936           const Tp frac = diff / f0;
10937           if (std::abs(frac) > max_abs_frac)
10938             max_abs_frac = std::abs(frac);
10939         }
10940     }
10941   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10942 }
10943 
10944 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
10945 testcase_hyperg<double> data159[] = {
10946   { 0.42108197362250305, 5.0000000000000000, 2.0000000000000000,
10947           8.0000000000000000, -0.90000000000000002 },
10948   { 0.45503172013983051, 5.0000000000000000, 2.0000000000000000,
10949           8.0000000000000000, -0.80000000000000004 },
10950   { 0.49345609813624303, 5.0000000000000000, 2.0000000000000000,
10951           8.0000000000000000, -0.69999999999999996 },
10952   { 0.53720880551221295, 5.0000000000000000, 2.0000000000000000,
10953           8.0000000000000000, -0.59999999999999998 },
10954   { 0.58736431524847466, 5.0000000000000000, 2.0000000000000000,
10955           8.0000000000000000, -0.50000000000000000 },
10956   { 0.64529222467897962, 5.0000000000000000, 2.0000000000000000,
10957           8.0000000000000000, -0.40000000000000002 },
10958   { 0.71276337354393904, 5.0000000000000000, 2.0000000000000000,
10959           8.0000000000000000, -0.30000000000000004 },
10960   { 0.79210466220795306, 5.0000000000000000, 2.0000000000000000,
10961           8.0000000000000000, -0.19999999999999996 },
10962   { 0.88643063455510596, 5.0000000000000000, 2.0000000000000000,
10963           8.0000000000000000, -0.099999999999999978 },
10964   { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
10965           8.0000000000000000, 0.0000000000000000 },
10966   { 1.1387832139040652, 5.0000000000000000, 2.0000000000000000,
10967           8.0000000000000000, 0.10000000000000009 },
10968   { 1.3114025920844752, 5.0000000000000000, 2.0000000000000000,
10969           8.0000000000000000, 0.19999999999999996 },
10970   { 1.5307655016768162, 5.0000000000000000, 2.0000000000000000,
10971           8.0000000000000000, 0.30000000000000004 },
10972   { 1.8170727950333345, 5.0000000000000000, 2.0000000000000000,
10973           8.0000000000000000, 0.39999999999999991 },
10974   { 2.2037865486700836, 5.0000000000000000, 2.0000000000000000,
10975           8.0000000000000000, 0.50000000000000000 },
10976   { 2.7506766056439380, 5.0000000000000000, 2.0000000000000000,
10977           8.0000000000000000, 0.60000000000000009 },
10978   { 3.5764534935716972, 5.0000000000000000, 2.0000000000000000,
10979           8.0000000000000000, 0.69999999999999996 },
10980   { 4.9587762302155403, 5.0000000000000000, 2.0000000000000000,
10981           8.0000000000000000, 0.80000000000000004 },
10982   { 7.7740847924166800, 5.0000000000000000, 2.0000000000000000,
10983           8.0000000000000000, 0.89999999999999991 },
10984 };
10985 
10986 // Test function for a=5.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
10987 template <typename Tp>
test159()10988 void test159()
10989 {
10990   const Tp eps = std::numeric_limits<Tp>::epsilon();
10991   Tp max_abs_diff = -Tp(1);
10992   Tp max_abs_frac = -Tp(1);
10993   unsigned int num_datum = sizeof(data159)
10994                          / sizeof(testcase_hyperg<double>);
10995   for (unsigned int i = 0; i < num_datum; ++i)
10996     {
10997       const Tp f = std::tr1::hyperg(Tp(data159[i].a), Tp(data159[i].b),
10998                    Tp(data159[i].c), Tp(data159[i].x));
10999       const Tp f0 = data159[i].f0;
11000       const Tp diff = f - f0;
11001       if (std::abs(diff) > max_abs_diff)
11002         max_abs_diff = std::abs(diff);
11003       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11004         {
11005           const Tp frac = diff / f0;
11006           if (std::abs(frac) > max_abs_frac)
11007             max_abs_frac = std::abs(frac);
11008         }
11009     }
11010   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11011 }
11012 
11013 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
11014 testcase_hyperg<double> data160[] = {
11015   { 0.48860241312958425, 5.0000000000000000, 2.0000000000000000,
11016           10.000000000000000, -0.90000000000000002 },
11017   { 0.52193382517068487, 5.0000000000000000, 2.0000000000000000,
11018           10.000000000000000, -0.80000000000000004 },
11019   { 0.55902375003954219, 5.0000000000000000, 2.0000000000000000,
11020           10.000000000000000, -0.69999999999999996 },
11021   { 0.60049055150230346, 5.0000000000000000, 2.0000000000000000,
11022           10.000000000000000, -0.59999999999999998 },
11023   { 0.64709127927203480, 5.0000000000000000, 2.0000000000000000,
11024           10.000000000000000, -0.50000000000000000 },
11025   { 0.69976233335368998, 5.0000000000000000, 2.0000000000000000,
11026           10.000000000000000, -0.40000000000000002 },
11027   { 0.75967529501081055, 5.0000000000000000, 2.0000000000000000,
11028           10.000000000000000, -0.30000000000000004 },
11029   { 0.82831498895254407, 5.0000000000000000, 2.0000000000000000,
11030           10.000000000000000, -0.19999999999999996 },
11031   { 0.90759090169653933, 5.0000000000000000, 2.0000000000000000,
11032           10.000000000000000, -0.099999999999999978 },
11033   { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
11034           10.000000000000000, 0.0000000000000000 },
11035   { 1.1088712278667465, 5.0000000000000000, 2.0000000000000000,
11036           10.000000000000000, 0.10000000000000009 },
11037   { 1.2387445478440853, 5.0000000000000000, 2.0000000000000000,
11038           10.000000000000000, 0.19999999999999996 },
11039   { 1.3959812720437546, 5.0000000000000000, 2.0000000000000000,
11040           10.000000000000000, 0.30000000000000004 },
11041   { 1.5897930661091164, 5.0000000000000000, 2.0000000000000000,
11042           10.000000000000000, 0.39999999999999991 },
11043   { 1.8340789380307454, 5.0000000000000000, 2.0000000000000000,
11044           10.000000000000000, 0.50000000000000000 },
11045   { 2.1509548085970764, 5.0000000000000000, 2.0000000000000000,
11046           10.000000000000000, 0.60000000000000009 },
11047   { 2.5782406951207504, 5.0000000000000000, 2.0000000000000000,
11048           10.000000000000000, 0.69999999999999996 },
11049   { 3.1877847194242737, 5.0000000000000000, 2.0000000000000000,
11050           10.000000000000000, 0.80000000000000004 },
11051   { 4.1421596631676900, 5.0000000000000000, 2.0000000000000000,
11052           10.000000000000000, 0.89999999999999991 },
11053 };
11054 
11055 // Test function for a=5.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
11056 template <typename Tp>
test160()11057 void test160()
11058 {
11059   const Tp eps = std::numeric_limits<Tp>::epsilon();
11060   Tp max_abs_diff = -Tp(1);
11061   Tp max_abs_frac = -Tp(1);
11062   unsigned int num_datum = sizeof(data160)
11063                          / sizeof(testcase_hyperg<double>);
11064   for (unsigned int i = 0; i < num_datum; ++i)
11065     {
11066       const Tp f = std::tr1::hyperg(Tp(data160[i].a), Tp(data160[i].b),
11067                    Tp(data160[i].c), Tp(data160[i].x));
11068       const Tp f0 = data160[i].f0;
11069       const Tp diff = f - f0;
11070       if (std::abs(diff) > max_abs_diff)
11071         max_abs_diff = std::abs(diff);
11072       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11073         {
11074           const Tp frac = diff / f0;
11075           if (std::abs(frac) > max_abs_frac)
11076             max_abs_frac = std::abs(frac);
11077         }
11078     }
11079   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11080 }
11081 
11082 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
11083 testcase_hyperg<double> data161[] = {
11084   { -0.0047236848832209691, 5.0000000000000000, 5.0000000000000000,
11085           2.0000000000000000, -0.90000000000000002 },
11086   { -0.0073321496427103212, 5.0000000000000000, 5.0000000000000000,
11087           2.0000000000000000, -0.80000000000000004 },
11088   { -0.010977302557845672, 5.0000000000000000, 5.0000000000000000,
11089           2.0000000000000000, -0.69999999999999996 },
11090   { -0.015692785382270907, 5.0000000000000000, 5.0000000000000000,
11091           2.0000000000000000, -0.59999999999999998 },
11092   { -0.020728547477518677, 5.0000000000000000, 5.0000000000000000,
11093           2.0000000000000000, -0.50000000000000000 },
11094   { -0.022767481479412769, 5.0000000000000000, 5.0000000000000000,
11095           2.0000000000000000, -0.40000000000000002 },
11096   { -0.010634636868114139, 5.0000000000000000, 5.0000000000000000,
11097           2.0000000000000000, -0.30000000000000004 },
11098   { 0.050699832580781923, 5.0000000000000000, 5.0000000000000000,
11099           2.0000000000000000, -0.19999999999999996 },
11100   { 0.27045765367659280, 5.0000000000000000, 5.0000000000000000,
11101           2.0000000000000000, -0.099999999999999978 },
11102   { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
11103           2.0000000000000000, 0.0000000000000000 },
11104   { 3.4387055868901171, 5.0000000000000000, 5.0000000000000000,
11105           2.0000000000000000, 0.10000000000000009 },
11106   { 12.052059173583981, 5.0000000000000000, 5.0000000000000000,
11107           2.0000000000000000, 0.19999999999999996 },
11108   { 45.565319600798020, 5.0000000000000000, 5.0000000000000000,
11109           2.0000000000000000, 0.30000000000000004 },
11110   { 196.23532998018572, 5.0000000000000000, 5.0000000000000000,
11111           2.0000000000000000, 0.39999999999999991 },
11112   { 1032.0000000000002, 5.0000000000000000, 5.0000000000000000,
11113           2.0000000000000000, 0.50000000000000000 },
11114   { 7376.0986328125073, 5.0000000000000000, 5.0000000000000000,
11115           2.0000000000000000, 0.60000000000000009 },
11116   { 86964.639536655843, 5.0000000000000000, 5.0000000000000000,
11117           2.0000000000000000, 0.69999999999999996 },
11118   { 2596875.0000000009, 5.0000000000000000, 5.0000000000000000,
11119           2.0000000000000000, 0.80000000000000004 },
11120   { 766224999.99999273, 5.0000000000000000, 5.0000000000000000,
11121           2.0000000000000000, 0.89999999999999991 },
11122 };
11123 
11124 // Test function for a=5.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
11125 template <typename Tp>
test161()11126 void test161()
11127 {
11128   const Tp eps = std::numeric_limits<Tp>::epsilon();
11129   Tp max_abs_diff = -Tp(1);
11130   Tp max_abs_frac = -Tp(1);
11131   unsigned int num_datum = sizeof(data161)
11132                          / sizeof(testcase_hyperg<double>);
11133   for (unsigned int i = 0; i < num_datum; ++i)
11134     {
11135       const Tp f = std::tr1::hyperg(Tp(data161[i].a), Tp(data161[i].b),
11136                    Tp(data161[i].c), Tp(data161[i].x));
11137       const Tp f0 = data161[i].f0;
11138       const Tp diff = f - f0;
11139       if (std::abs(diff) > max_abs_diff)
11140         max_abs_diff = std::abs(diff);
11141       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11142         {
11143           const Tp frac = diff / f0;
11144           if (std::abs(frac) > max_abs_frac)
11145             max_abs_frac = std::abs(frac);
11146         }
11147     }
11148   VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
11149 }
11150 
11151 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
11152 testcase_hyperg<double> data162[] = {
11153   { 0.016473280625778897, 5.0000000000000000, 5.0000000000000000,
11154           4.0000000000000000, -0.90000000000000002 },
11155   { 0.023520955289486407, 5.0000000000000000, 5.0000000000000000,
11156           4.0000000000000000, -0.80000000000000004 },
11157   { 0.034179084066004943, 5.0000000000000000, 5.0000000000000000,
11158           4.0000000000000000, -0.69999999999999996 },
11159   { 0.050663948059082052, 5.0000000000000000, 5.0000000000000000,
11160           4.0000000000000000, -0.59999999999999998 },
11161   { 0.076817558299039843, 5.0000000000000000, 5.0000000000000000,
11162           4.0000000000000000, -0.50000000000000000 },
11163   { 0.11952927776691676, 5.0000000000000000, 5.0000000000000000,
11164           4.0000000000000000, -0.40000000000000002 },
11165   { 0.19163799520552813, 5.0000000000000000, 5.0000000000000000,
11166           4.0000000000000000, -0.30000000000000004 },
11167   { 0.31815307784636504, 5.0000000000000000, 5.0000000000000000,
11168           4.0000000000000000, -0.19999999999999996 },
11169   { 0.55036208180243285, 5.0000000000000000, 5.0000000000000000,
11170           4.0000000000000000, -0.099999999999999978 },
11171   { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
11172           4.0000000000000000, 0.0000000000000000 },
11173   { 1.9287183337378946, 5.0000000000000000, 5.0000000000000000,
11174           4.0000000000000000, 0.10000000000000009 },
11175   { 4.0054321289062473, 5.0000000000000000, 5.0000000000000000,
11176           4.0000000000000000, 0.19999999999999996 },
11177   { 9.1373492337376394, 5.0000000000000000, 5.0000000000000000,
11178           4.0000000000000000, 0.30000000000000004 },
11179   { 23.576817558299005, 5.0000000000000000, 5.0000000000000000,
11180           4.0000000000000000, 0.39999999999999991 },
11181   { 71.999999999999972, 5.0000000000000000, 5.0000000000000000,
11182           4.0000000000000000, 0.50000000000000000 },
11183   { 280.76171875000023, 5.0000000000000000, 5.0000000000000000,
11184           4.0000000000000000, 0.60000000000000009 },
11185   { 1611.7969821673514, 5.0000000000000000, 5.0000000000000000,
11186           4.0000000000000000, 0.69999999999999996 },
11187   { 18749.999999999996, 5.0000000000000000, 5.0000000000000000,
11188           4.0000000000000000, 0.80000000000000004 },
11189   { 1224999.9999999879, 5.0000000000000000, 5.0000000000000000,
11190           4.0000000000000000, 0.89999999999999991 },
11191 };
11192 
11193 // Test function for a=5.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
11194 template <typename Tp>
test162()11195 void test162()
11196 {
11197   const Tp eps = std::numeric_limits<Tp>::epsilon();
11198   Tp max_abs_diff = -Tp(1);
11199   Tp max_abs_frac = -Tp(1);
11200   unsigned int num_datum = sizeof(data162)
11201                          / sizeof(testcase_hyperg<double>);
11202   for (unsigned int i = 0; i < num_datum; ++i)
11203     {
11204       const Tp f = std::tr1::hyperg(Tp(data162[i].a), Tp(data162[i].b),
11205                    Tp(data162[i].c), Tp(data162[i].x));
11206       const Tp f0 = data162[i].f0;
11207       const Tp diff = f - f0;
11208       if (std::abs(diff) > max_abs_diff)
11209         max_abs_diff = std::abs(diff);
11210       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11211         {
11212           const Tp frac = diff / f0;
11213           if (std::abs(frac) > max_abs_frac)
11214             max_abs_frac = std::abs(frac);
11215         }
11216     }
11217   VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
11218 }
11219 
11220 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
11221 testcase_hyperg<double> data163[] = {
11222   { 0.067462409738203513, 5.0000000000000000, 5.0000000000000000,
11223           6.0000000000000000, -0.90000000000000002 },
11224   { 0.084813629887172517, 5.0000000000000000, 5.0000000000000000,
11225           6.0000000000000000, -0.80000000000000004 },
11226   { 0.10799223563666410, 5.0000000000000000, 5.0000000000000000,
11227           6.0000000000000000, -0.69999999999999996 },
11228   { 0.13947766136095369, 5.0000000000000000, 5.0000000000000000,
11229           6.0000000000000000, -0.59999999999999998 },
11230   { 0.18305927261494304, 5.0000000000000000, 5.0000000000000000,
11231           6.0000000000000000, -0.50000000000000000 },
11232   { 0.24468431546783445, 5.0000000000000000, 5.0000000000000000,
11233           6.0000000000000000, -0.40000000000000002 },
11234   { 0.33397274564972956, 5.0000000000000000, 5.0000000000000000,
11235           6.0000000000000000, -0.30000000000000004 },
11236   { 0.46703323887436765, 5.0000000000000000, 5.0000000000000000,
11237           6.0000000000000000, -0.19999999999999996 },
11238   { 0.67194346197695642, 5.0000000000000000, 5.0000000000000000,
11239           6.0000000000000000, -0.099999999999999978 },
11240   { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
11241           6.0000000000000000, 0.0000000000000000 },
11242   { 1.5503148146900136, 5.0000000000000000, 5.0000000000000000,
11243           6.0000000000000000, 0.10000000000000009 },
11244   { 2.5278200136940998, 5.0000000000000000, 5.0000000000000000,
11245           6.0000000000000000, 0.19999999999999996 },
11246   { 4.3933515329658954, 5.0000000000000000, 5.0000000000000000,
11247           6.0000000000000000, 0.30000000000000004 },
11248   { 8.3000308946110888, 5.0000000000000000, 5.0000000000000000,
11249           6.0000000000000000, 0.39999999999999991 },
11250   { 17.570215556257921, 5.0000000000000000, 5.0000000000000000,
11251           6.0000000000000000, 0.50000000000000000 },
11252   { 43.847462183266167, 5.0000000000000000, 5.0000000000000000,
11253           6.0000000000000000, 0.60000000000000009 },
11254   { 141.86909082943853, 5.0000000000000000, 5.0000000000000000,
11255           6.0000000000000000, 0.69999999999999996 },
11256   { 736.63489653168926, 5.0000000000000000, 5.0000000000000000,
11257           6.0000000000000000, 0.80000000000000004 },
11258   { 12117.500593515439, 5.0000000000000000, 5.0000000000000000,
11259           6.0000000000000000, 0.89999999999999991 },
11260 };
11261 
11262 // Test function for a=5.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
11263 template <typename Tp>
test163()11264 void test163()
11265 {
11266   const Tp eps = std::numeric_limits<Tp>::epsilon();
11267   Tp max_abs_diff = -Tp(1);
11268   Tp max_abs_frac = -Tp(1);
11269   unsigned int num_datum = sizeof(data163)
11270                          / sizeof(testcase_hyperg<double>);
11271   for (unsigned int i = 0; i < num_datum; ++i)
11272     {
11273       const Tp f = std::tr1::hyperg(Tp(data163[i].a), Tp(data163[i].b),
11274                    Tp(data163[i].c), Tp(data163[i].x));
11275       const Tp f0 = data163[i].f0;
11276       const Tp diff = f - f0;
11277       if (std::abs(diff) > max_abs_diff)
11278         max_abs_diff = std::abs(diff);
11279       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11280         {
11281           const Tp frac = diff / f0;
11282           if (std::abs(frac) > max_abs_frac)
11283             max_abs_frac = std::abs(frac);
11284         }
11285     }
11286   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11287 }
11288 
11289 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
11290 testcase_hyperg<double> data164[] = {
11291   { 0.12409443806004232, 5.0000000000000000, 5.0000000000000000,
11292           8.0000000000000000, -0.90000000000000002 },
11293   { 0.14886910375100412, 5.0000000000000000, 5.0000000000000000,
11294           8.0000000000000000, -0.80000000000000004 },
11295   { 0.18023328876836334, 5.0000000000000000, 5.0000000000000000,
11296           8.0000000000000000, -0.69999999999999996 },
11297   { 0.22044046981094714, 5.0000000000000000, 5.0000000000000000,
11298           8.0000000000000000, -0.59999999999999998 },
11299   { 0.27271160690708801, 5.0000000000000000, 5.0000000000000000,
11300           8.0000000000000000, -0.50000000000000000 },
11301   { 0.34174821195025840, 5.0000000000000000, 5.0000000000000000,
11302           8.0000000000000000, -0.40000000000000002 },
11303   { 0.43457788826160237, 5.0000000000000000, 5.0000000000000000,
11304           8.0000000000000000, -0.30000000000000004 },
11305   { 0.56199385898404552, 5.0000000000000000, 5.0000000000000000,
11306           8.0000000000000000, -0.19999999999999996 },
11307   { 0.74109892753745221, 5.0000000000000000, 5.0000000000000000,
11308           8.0000000000000000, -0.099999999999999978 },
11309   { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
11310           8.0000000000000000, 0.0000000000000000 },
11311   { 1.3869229400096228, 5.0000000000000000, 5.0000000000000000,
11312           8.0000000000000000, 0.10000000000000009 },
11313   { 1.9890168748121255, 5.0000000000000000, 5.0000000000000000,
11314           8.0000000000000000, 0.19999999999999996 },
11315   { 2.9741205609307424, 5.0000000000000000, 5.0000000000000000,
11316           8.0000000000000000, 0.30000000000000004 },
11317   { 4.6924751038237300, 5.0000000000000000, 5.0000000000000000,
11318           8.0000000000000000, 0.39999999999999991 },
11319   { 7.9555939380658254, 5.0000000000000000, 5.0000000000000000,
11320           8.0000000000000000, 0.50000000000000000 },
11321   { 14.933102063314404, 5.0000000000000000, 5.0000000000000000,
11322           8.0000000000000000, 0.60000000000000009 },
11323   { 32.780461638447491, 5.0000000000000000, 5.0000000000000000,
11324           8.0000000000000000, 0.69999999999999996 },
11325   { 94.848124287773530, 5.0000000000000000, 5.0000000000000000,
11326           8.0000000000000000, 0.80000000000000004 },
11327   { 523.16034401517425, 5.0000000000000000, 5.0000000000000000,
11328           8.0000000000000000, 0.89999999999999991 },
11329 };
11330 
11331 // Test function for a=5.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
11332 template <typename Tp>
test164()11333 void test164()
11334 {
11335   const Tp eps = std::numeric_limits<Tp>::epsilon();
11336   Tp max_abs_diff = -Tp(1);
11337   Tp max_abs_frac = -Tp(1);
11338   unsigned int num_datum = sizeof(data164)
11339                          / sizeof(testcase_hyperg<double>);
11340   for (unsigned int i = 0; i < num_datum; ++i)
11341     {
11342       const Tp f = std::tr1::hyperg(Tp(data164[i].a), Tp(data164[i].b),
11343                    Tp(data164[i].c), Tp(data164[i].x));
11344       const Tp f0 = data164[i].f0;
11345       const Tp diff = f - f0;
11346       if (std::abs(diff) > max_abs_diff)
11347         max_abs_diff = std::abs(diff);
11348       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11349         {
11350           const Tp frac = diff / f0;
11351           if (std::abs(frac) > max_abs_frac)
11352             max_abs_frac = std::abs(frac);
11353         }
11354     }
11355   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11356 }
11357 
11358 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
11359 testcase_hyperg<double> data165[] = {
11360   { 0.17885405888526873, 5.0000000000000000, 5.0000000000000000,
11361           10.000000000000000, -0.90000000000000002 },
11362   { 0.20861302518993380, 5.0000000000000000, 5.0000000000000000,
11363           10.000000000000000, -0.80000000000000004 },
11364   { 0.24504033307244924, 5.0000000000000000, 5.0000000000000000,
11365           10.000000000000000, -0.69999999999999996 },
11366   { 0.29007236051133478, 5.0000000000000000, 5.0000000000000000,
11367           10.000000000000000, -0.59999999999999998 },
11368   { 0.34635542859732726, 5.0000000000000000, 5.0000000000000000,
11369           10.000000000000000, -0.50000000000000000 },
11370   { 0.41756858504598376, 5.0000000000000000, 5.0000000000000000,
11371           10.000000000000000, -0.40000000000000002 },
11372   { 0.50892615622124382, 5.0000000000000000, 5.0000000000000000,
11373           10.000000000000000, -0.30000000000000004 },
11374   { 0.62798173270509761, 5.0000000000000000, 5.0000000000000000,
11375           10.000000000000000, -0.19999999999999996 },
11376   { 0.78595487360378424, 5.0000000000000000, 5.0000000000000000,
11377           10.000000000000000, -0.099999999999999978 },
11378   { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
11379           10.000000000000000, 0.0000000000000000 },
11380   { 1.2972517637384813, 5.0000000000000000, 5.0000000000000000,
11381           10.000000000000000, 0.10000000000000009 },
11382   { 1.7224028197396388, 5.0000000000000000, 5.0000000000000000,
11383           10.000000000000000, 0.19999999999999996 },
11384   { 2.3527690438263305, 5.0000000000000000, 5.0000000000000000,
11385           10.000000000000000, 0.30000000000000004 },
11386   { 3.3305218060101116, 5.0000000000000000, 5.0000000000000000,
11387           10.000000000000000, 0.39999999999999991 },
11388   { 4.9383884076775466, 5.0000000000000000, 5.0000000000000000,
11389           10.000000000000000, 0.50000000000000000 },
11390   { 7.8007604680775229, 5.0000000000000000, 5.0000000000000000,
11391           10.000000000000000, 0.60000000000000009 },
11392   { 13.518663719271885, 5.0000000000000000, 5.0000000000000000,
11393           10.000000000000000, 0.69999999999999996 },
11394   { 27.285345906502567, 5.0000000000000000, 5.0000000000000000,
11395           10.000000000000000, 0.80000000000000004 },
11396   { 75.572415101501988, 5.0000000000000000, 5.0000000000000000,
11397           10.000000000000000, 0.89999999999999991 },
11398 };
11399 
11400 // Test function for a=5.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
11401 template <typename Tp>
test165()11402 void test165()
11403 {
11404   const Tp eps = std::numeric_limits<Tp>::epsilon();
11405   Tp max_abs_diff = -Tp(1);
11406   Tp max_abs_frac = -Tp(1);
11407   unsigned int num_datum = sizeof(data165)
11408                          / sizeof(testcase_hyperg<double>);
11409   for (unsigned int i = 0; i < num_datum; ++i)
11410     {
11411       const Tp f = std::tr1::hyperg(Tp(data165[i].a), Tp(data165[i].b),
11412                    Tp(data165[i].c), Tp(data165[i].x));
11413       const Tp f0 = data165[i].f0;
11414       const Tp diff = f - f0;
11415       if (std::abs(diff) > max_abs_diff)
11416         max_abs_diff = std::abs(diff);
11417       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11418         {
11419           const Tp frac = diff / f0;
11420           if (std::abs(frac) > max_abs_frac)
11421             max_abs_frac = std::abs(frac);
11422         }
11423     }
11424   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11425 }
11426 
11427 // Test data for a=5.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
11428 testcase_hyperg<double> data166[] = {
11429   { 0.00063586451658060152, 5.0000000000000000, 10.000000000000000,
11430           2.0000000000000000, -0.90000000000000002 },
11431   { 0.0010334743461762443, 5.0000000000000000, 10.000000000000000,
11432           2.0000000000000000, -0.80000000000000004 },
11433   { 0.0015326246054669515, 5.0000000000000000, 10.000000000000000,
11434           2.0000000000000000, -0.69999999999999996 },
11435   { 0.0019007018181583387, 5.0000000000000000, 10.000000000000000,
11436           2.0000000000000000, -0.59999999999999998 },
11437   { 0.0012845577715431577, 5.0000000000000000, 10.000000000000000,
11438           2.0000000000000000, -0.50000000000000000 },
11439   { -0.0027213806178058826, 5.0000000000000000, 10.000000000000000,
11440           2.0000000000000000, -0.40000000000000002 },
11441   { -0.015121744574954068, 5.0000000000000000, 10.000000000000000,
11442           2.0000000000000000, -0.30000000000000004 },
11443   { -0.036637840562974443, 5.0000000000000000, 10.000000000000000,
11444           2.0000000000000000, -0.19999999999999996 },
11445   { 0.019117849062621491, 5.0000000000000000, 10.000000000000000,
11446           2.0000000000000000, -0.099999999999999978 },
11447   { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
11448           2.0000000000000000, 0.0000000000000000 },
11449   { 9.8116901852350615, 5.0000000000000000, 10.000000000000000,
11450           2.0000000000000000, 0.10000000000000009 },
11451   { 84.255589172244044, 5.0000000000000000, 10.000000000000000,
11452           2.0000000000000000, 0.19999999999999996 },
11453   { 773.87517619421294, 5.0000000000000000, 10.000000000000000,
11454           2.0000000000000000, 0.30000000000000004 },
11455   { 8556.9725363053585, 5.0000000000000000, 10.000000000000000,
11456           2.0000000000000000, 0.39999999999999991 },
11457   { 129023.99999999996, 5.0000000000000000, 10.000000000000000,
11458           2.0000000000000000, 0.50000000000000000 },
11459   { 3174543.3807373112, 5.0000000000000000, 10.000000000000000,
11460           2.0000000000000000, 0.60000000000000009 },
11461   { 175133896.95814410, 5.0000000000000000, 10.000000000000000,
11462           2.0000000000000000, 0.69999999999999996 },
11463   { 43564453125.000061, 5.0000000000000000, 10.000000000000000,
11464           2.0000000000000000, 0.80000000000000004 },
11465   { 446859999999993.50, 5.0000000000000000, 10.000000000000000,
11466           2.0000000000000000, 0.89999999999999991 },
11467 };
11468 
11469 // Test function for a=5.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
11470 template <typename Tp>
test166()11471 void test166()
11472 {
11473   const Tp eps = std::numeric_limits<Tp>::epsilon();
11474   Tp max_abs_diff = -Tp(1);
11475   Tp max_abs_frac = -Tp(1);
11476   unsigned int num_datum = sizeof(data166)
11477                          / sizeof(testcase_hyperg<double>);
11478   for (unsigned int i = 0; i < num_datum; ++i)
11479     {
11480       const Tp f = std::tr1::hyperg(Tp(data166[i].a), Tp(data166[i].b),
11481                    Tp(data166[i].c), Tp(data166[i].x));
11482       const Tp f0 = data166[i].f0;
11483       const Tp diff = f - f0;
11484       if (std::abs(diff) > max_abs_diff)
11485         max_abs_diff = std::abs(diff);
11486       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11487         {
11488           const Tp frac = diff / f0;
11489           if (std::abs(frac) > max_abs_frac)
11490             max_abs_frac = std::abs(frac);
11491         }
11492     }
11493   VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
11494 }
11495 
11496 // Test data for a=5.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
11497 testcase_hyperg<double> data167[] = {
11498   { -0.00030045430691819899, 5.0000000000000000, 10.000000000000000,
11499           4.0000000000000000, -0.90000000000000002 },
11500   { -0.00031119487747328581, 5.0000000000000000, 10.000000000000000,
11501           4.0000000000000000, -0.80000000000000004 },
11502   { -0.00014589213141649274, 5.0000000000000000, 10.000000000000000,
11503           4.0000000000000000, -0.69999999999999996 },
11504   { 0.00056843418860809121, 5.0000000000000000, 10.000000000000000,
11505           4.0000000000000000, -0.59999999999999998 },
11506   { 0.0028902549859721725, 5.0000000000000000, 10.000000000000000,
11507           4.0000000000000000, -0.50000000000000000 },
11508   { 0.0098776037238877470, 5.0000000000000000, 10.000000000000000,
11509           4.0000000000000000, -0.40000000000000002 },
11510   { 0.030689217428863914, 5.0000000000000000, 10.000000000000000,
11511           4.0000000000000000, -0.30000000000000004 },
11512   { 0.094211590019076599, 5.0000000000000000, 10.000000000000000,
11513           4.0000000000000000, -0.19999999999999996 },
11514   { 0.29791981455918376, 5.0000000000000000, 10.000000000000000,
11515           4.0000000000000000, -0.099999999999999978 },
11516   { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
11517           4.0000000000000000, 0.0000000000000000 },
11518   { 3.6646308771236793, 5.0000000000000000, 10.000000000000000,
11519           4.0000000000000000, 0.10000000000000009 },
11520   { 15.133991837501521, 5.0000000000000000, 10.000000000000000,
11521           4.0000000000000000, 0.19999999999999996 },
11522   { 73.331330046144089, 5.0000000000000000, 10.000000000000000,
11523           4.0000000000000000, 0.30000000000000004 },
11524   { 441.01791167787133, 5.0000000000000000, 10.000000000000000,
11525           4.0000000000000000, 0.39999999999999991 },
11526   { 3583.9999999999991, 5.0000000000000000, 10.000000000000000,
11527           4.0000000000000000, 0.50000000000000000 },
11528   { 45299.530029296984, 5.0000000000000000, 10.000000000000000,
11529           4.0000000000000000, 0.60000000000000009 },
11530   { 1157231.0002427341, 5.0000000000000000, 10.000000000000000,
11531           4.0000000000000000, 0.69999999999999996 },
11532   { 107421875.00000016, 5.0000000000000000, 10.000000000000000,
11533           4.0000000000000000, 0.80000000000000004 },
11534   { 234999999999.99734, 5.0000000000000000, 10.000000000000000,
11535           4.0000000000000000, 0.89999999999999991 },
11536 };
11537 
11538 // Test function for a=5.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
11539 template <typename Tp>
test167()11540 void test167()
11541 {
11542   const Tp eps = std::numeric_limits<Tp>::epsilon();
11543   Tp max_abs_diff = -Tp(1);
11544   Tp max_abs_frac = -Tp(1);
11545   unsigned int num_datum = sizeof(data167)
11546                          / sizeof(testcase_hyperg<double>);
11547   for (unsigned int i = 0; i < num_datum; ++i)
11548     {
11549       const Tp f = std::tr1::hyperg(Tp(data167[i].a), Tp(data167[i].b),
11550                    Tp(data167[i].c), Tp(data167[i].x));
11551       const Tp f0 = data167[i].f0;
11552       const Tp diff = f - f0;
11553       if (std::abs(diff) > max_abs_diff)
11554         max_abs_diff = std::abs(diff);
11555       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11556         {
11557           const Tp frac = diff / f0;
11558           if (std::abs(frac) > max_abs_frac)
11559             max_abs_frac = std::abs(frac);
11560         }
11561     }
11562   VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
11563 }
11564 
11565 // Test data for a=5.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
11566 testcase_hyperg<double> data168[] = {
11567   { 0.0058530497315411210, 5.0000000000000000, 10.000000000000000,
11568           6.0000000000000000, -0.90000000000000002 },
11569   { 0.0088526869356855692, 5.0000000000000000, 10.000000000000000,
11570           6.0000000000000000, -0.80000000000000004 },
11571   { 0.013770987983443108, 5.0000000000000000, 10.000000000000000,
11572           6.0000000000000000, -0.69999999999999996 },
11573   { 0.022108932690960800, 5.0000000000000000, 10.000000000000000,
11574           6.0000000000000000, -0.59999999999999998 },
11575   { 0.036786236450921578, 5.0000000000000000, 10.000000000000000,
11576           6.0000000000000000, -0.50000000000000000 },
11577   { 0.063750669040426422, 5.0000000000000000, 10.000000000000000,
11578           6.0000000000000000, -0.40000000000000002 },
11579   { 0.11577228680714464, 5.0000000000000000, 10.000000000000000,
11580           6.0000000000000000, -0.30000000000000004 },
11581   { 0.22197573416125735, 5.0000000000000000, 10.000000000000000,
11582           6.0000000000000000, -0.19999999999999996 },
11583   { 0.45361312968415268, 5.0000000000000000, 10.000000000000000,
11584           6.0000000000000000, -0.099999999999999978 },
11585   { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
11586           6.0000000000000000, 0.0000000000000000 },
11587   { 2.4162889363082747, 5.0000000000000000, 10.000000000000000,
11588           6.0000000000000000, 0.10000000000000009 },
11589   { 6.5381564791240399, 5.0000000000000000, 10.000000000000000,
11590           6.0000000000000000, 0.19999999999999996 },
11591   { 20.415771011498428, 5.0000000000000000, 10.000000000000000,
11592           6.0000000000000000, 0.30000000000000004 },
11593   { 76.870682056629221, 5.0000000000000000, 10.000000000000000,
11594           6.0000000000000000, 0.39999999999999991 },
11595   { 373.58730158730162, 5.0000000000000000, 10.000000000000000,
11596           6.0000000000000000, 0.50000000000000000 },
11597   { 2626.2555803571477, 5.0000000000000000, 10.000000000000000,
11598           6.0000000000000000, 0.60000000000000009 },
11599   { 33060.960671081048, 5.0000000000000000, 10.000000000000000,
11600           6.0000000000000000, 0.69999999999999996 },
11601   { 1203521.8253968258, 5.0000000000000000, 10.000000000000000,
11602           6.0000000000000000, 0.80000000000000004 },
11603   { 584564285.71427989, 5.0000000000000000, 10.000000000000000,
11604           6.0000000000000000, 0.89999999999999991 },
11605 };
11606 
11607 // Test function for a=5.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
11608 template <typename Tp>
test168()11609 void test168()
11610 {
11611   const Tp eps = std::numeric_limits<Tp>::epsilon();
11612   Tp max_abs_diff = -Tp(1);
11613   Tp max_abs_frac = -Tp(1);
11614   unsigned int num_datum = sizeof(data168)
11615                          / sizeof(testcase_hyperg<double>);
11616   for (unsigned int i = 0; i < num_datum; ++i)
11617     {
11618       const Tp f = std::tr1::hyperg(Tp(data168[i].a), Tp(data168[i].b),
11619                    Tp(data168[i].c), Tp(data168[i].x));
11620       const Tp f0 = data168[i].f0;
11621       const Tp diff = f - f0;
11622       if (std::abs(diff) > max_abs_diff)
11623         max_abs_diff = std::abs(diff);
11624       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11625         {
11626           const Tp frac = diff / f0;
11627           if (std::abs(frac) > max_abs_frac)
11628             max_abs_frac = std::abs(frac);
11629         }
11630     }
11631   VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
11632 }
11633 
11634 // Test data for a=5.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
11635 testcase_hyperg<double> data169[] = {
11636   { 0.020248990107069400, 5.0000000000000000, 10.000000000000000,
11637           8.0000000000000000, -0.90000000000000002 },
11638   { 0.027876687750502421, 5.0000000000000000, 10.000000000000000,
11639           8.0000000000000000, -0.80000000000000004 },
11640   { 0.039154648888447781, 5.0000000000000000, 10.000000000000000,
11641           8.0000000000000000, -0.69999999999999996 },
11642   { 0.056251883506774923, 5.0000000000000000, 10.000000000000000,
11643           8.0000000000000000, -0.59999999999999998 },
11644   { 0.082914189910074432, 5.0000000000000000, 10.000000000000000,
11645           8.0000000000000000, -0.50000000000000000 },
11646   { 0.12585357817786477, 5.0000000000000000, 10.000000000000000,
11647           8.0000000000000000, -0.40000000000000002 },
11648   { 0.19761423206224929, 5.0000000000000000, 10.000000000000000,
11649           8.0000000000000000, -0.30000000000000004 },
11650   { 0.32280443863359243, 5.0000000000000000, 10.000000000000000,
11651           8.0000000000000000, -0.19999999999999996 },
11652   { 0.55250024062839465, 5.0000000000000000, 10.000000000000000,
11653           8.0000000000000000, -0.099999999999999978 },
11654   { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
11655           8.0000000000000000, 0.0000000000000000 },
11656   { 1.9374297986599267, 5.0000000000000000, 10.000000000000000,
11657           8.0000000000000000, 0.10000000000000009 },
11658   { 4.0849049886067696, 5.0000000000000000, 10.000000000000000,
11659           8.0000000000000000, 0.19999999999999996 },
11660   { 9.5926988633258983, 5.0000000000000000, 10.000000000000000,
11661           8.0000000000000000, 0.30000000000000004 },
11662   { 25.958314281359531, 5.0000000000000000, 10.000000000000000,
11663           8.0000000000000000, 0.39999999999999991 },
11664   { 85.333333333333300, 5.0000000000000000, 10.000000000000000,
11665           8.0000000000000000, 0.50000000000000000 },
11666   { 372.31445312500028, 5.0000000000000000, 10.000000000000000,
11667           8.0000000000000000, 0.60000000000000009 },
11668   { 2545.3436976070675, 5.0000000000000000, 10.000000000000000,
11669           8.0000000000000000, 0.69999999999999996 },
11670   { 39583.333333333343, 5.0000000000000000, 10.000000000000000,
11671           8.0000000000000000, 0.80000000000000004 },
11672   { 4599999.9999999627, 5.0000000000000000, 10.000000000000000,
11673           8.0000000000000000, 0.89999999999999991 },
11674 };
11675 
11676 // Test function for a=5.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
11677 template <typename Tp>
test169()11678 void test169()
11679 {
11680   const Tp eps = std::numeric_limits<Tp>::epsilon();
11681   Tp max_abs_diff = -Tp(1);
11682   Tp max_abs_frac = -Tp(1);
11683   unsigned int num_datum = sizeof(data169)
11684                          / sizeof(testcase_hyperg<double>);
11685   for (unsigned int i = 0; i < num_datum; ++i)
11686     {
11687       const Tp f = std::tr1::hyperg(Tp(data169[i].a), Tp(data169[i].b),
11688                    Tp(data169[i].c), Tp(data169[i].x));
11689       const Tp f0 = data169[i].f0;
11690       const Tp diff = f - f0;
11691       if (std::abs(diff) > max_abs_diff)
11692         max_abs_diff = std::abs(diff);
11693       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11694         {
11695           const Tp frac = diff / f0;
11696           if (std::abs(frac) > max_abs_frac)
11697             max_abs_frac = std::abs(frac);
11698         }
11699     }
11700   VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
11701 }
11702 
11703 // Test data for a=5.0000000000000000, b=10.000000000000000, c=10.000000000000000.
11704 testcase_hyperg<double> data170[] = {
11705   { 0.040386107340619266, 5.0000000000000000, 10.000000000000000,
11706           10.000000000000000, -0.90000000000000002 },
11707   { 0.052922149401344633, 5.0000000000000000, 10.000000000000000,
11708           10.000000000000000, -0.80000000000000004 },
11709   { 0.070429627772374270, 5.0000000000000000, 10.000000000000000,
11710           10.000000000000000, -0.69999999999999996 },
11711   { 0.095367431640624972, 5.0000000000000000, 10.000000000000000,
11712           10.000000000000000, -0.59999999999999998 },
11713   { 0.13168724279835387, 5.0000000000000000, 10.000000000000000,
11714           10.000000000000000, -0.50000000000000000 },
11715   { 0.18593443208187066, 5.0000000000000000, 10.000000000000000,
11716           10.000000000000000, -0.40000000000000002 },
11717   { 0.26932907434290437, 5.0000000000000000, 10.000000000000000,
11718           10.000000000000000, -0.30000000000000004 },
11719   { 0.40187757201646096, 5.0000000000000000, 10.000000000000000,
11720           10.000000000000000, -0.19999999999999996 },
11721   { 0.62092132305915493, 5.0000000000000000, 10.000000000000000,
11722           10.000000000000000, -0.099999999999999978 },
11723   { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
11724           10.000000000000000, 0.0000000000000000 },
11725   { 1.6935087808430296, 5.0000000000000000, 10.000000000000000,
11726           10.000000000000000, 0.10000000000000009 },
11727   { 3.0517578124999991, 5.0000000000000000, 10.000000000000000,
11728           10.000000000000000, 0.19999999999999996 },
11729   { 5.9499018266198629, 5.0000000000000000, 10.000000000000000,
11730           10.000000000000000, 0.30000000000000004 },
11731   { 12.860082304526737, 5.0000000000000000, 10.000000000000000,
11732           10.000000000000000, 0.39999999999999991 },
11733   { 32.000000000000000, 5.0000000000000000, 10.000000000000000,
11734           10.000000000000000, 0.50000000000000000 },
11735   { 97.656250000000114, 5.0000000000000000, 10.000000000000000,
11736           10.000000000000000, 0.60000000000000009 },
11737   { 411.52263374485580, 5.0000000000000000, 10.000000000000000,
11738           10.000000000000000, 0.69999999999999996 },
11739   { 3124.9999999999991, 5.0000000000000000, 10.000000000000000,
11740           10.000000000000000, 0.80000000000000004 },
11741   { 99999.999999999665, 5.0000000000000000, 10.000000000000000,
11742           10.000000000000000, 0.89999999999999991 },
11743 };
11744 
11745 // Test function for a=5.0000000000000000, b=10.000000000000000, c=10.000000000000000.
11746 template <typename Tp>
test170()11747 void test170()
11748 {
11749   const Tp eps = std::numeric_limits<Tp>::epsilon();
11750   Tp max_abs_diff = -Tp(1);
11751   Tp max_abs_frac = -Tp(1);
11752   unsigned int num_datum = sizeof(data170)
11753                          / sizeof(testcase_hyperg<double>);
11754   for (unsigned int i = 0; i < num_datum; ++i)
11755     {
11756       const Tp f = std::tr1::hyperg(Tp(data170[i].a), Tp(data170[i].b),
11757                    Tp(data170[i].c), Tp(data170[i].x));
11758       const Tp f0 = data170[i].f0;
11759       const Tp diff = f - f0;
11760       if (std::abs(diff) > max_abs_diff)
11761         max_abs_diff = std::abs(diff);
11762       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11763         {
11764           const Tp frac = diff / f0;
11765           if (std::abs(frac) > max_abs_frac)
11766             max_abs_frac = std::abs(frac);
11767         }
11768     }
11769   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11770 }
11771 
11772 // Test data for a=5.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
11773 testcase_hyperg<double> data171[] = {
11774   { -1.8650300348791041e-05, 5.0000000000000000, 20.000000000000000,
11775           2.0000000000000000, -0.90000000000000002 },
11776   { -3.6488008415183135e-05, 5.0000000000000000, 20.000000000000000,
11777           2.0000000000000000, -0.80000000000000004 },
11778   { -6.4614776410999025e-05, 5.0000000000000000, 20.000000000000000,
11779           2.0000000000000000, -0.69999999999999996 },
11780   { -8.4495207102575916e-05, 5.0000000000000000, 20.000000000000000,
11781           2.0000000000000000, -0.59999999999999998 },
11782   { 2.2276197023819217e-05, 5.0000000000000000, 20.000000000000000,
11783           2.0000000000000000, -0.50000000000000000 },
11784   { 0.00070736115111467578, 5.0000000000000000, 20.000000000000000,
11785           2.0000000000000000, -0.40000000000000002 },
11786   { 0.0027829732057272809, 5.0000000000000000, 20.000000000000000,
11787           2.0000000000000000, -0.30000000000000004 },
11788   { 0.0013283545664373570, 5.0000000000000000, 20.000000000000000,
11789           2.0000000000000000, -0.19999999999999996 },
11790   { -0.041767631015048733, 5.0000000000000000, 20.000000000000000,
11791           2.0000000000000000, -0.099999999999999978 },
11792   { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
11793           2.0000000000000000, 0.0000000000000000 },
11794   { 61.311496556100003, 5.0000000000000000, 20.000000000000000,
11795           2.0000000000000000, 0.10000000000000009 },
11796   { 2397.4420539085681, 5.0000000000000000, 20.000000000000000,
11797           2.0000000000000000, 0.19999999999999996 },
11798   { 103687.60998586559, 5.0000000000000000, 20.000000000000000,
11799           2.0000000000000000, 0.30000000000000004 },
11800   { 6247196.6451068865, 5.0000000000000000, 20.000000000000000,
11801           2.0000000000000000, 0.39999999999999991 },
11802   { 656408576.00000000, 5.0000000000000000, 20.000000000000000,
11803           2.0000000000000000, 0.50000000000000000 },
11804   { 165334768098.54715, 5.0000000000000000, 20.000000000000000,
11805           2.0000000000000000, 0.60000000000000009 },
11806   { 175097125520816.81, 5.0000000000000000, 20.000000000000000,
11807           2.0000000000000000, 0.69999999999999996 },
11808   { 2.6818275451660257e+18, 5.0000000000000000, 20.000000000000000,
11809           2.0000000000000000, 0.80000000000000004 },
11810   { 2.9794599999999321e+25, 5.0000000000000000, 20.000000000000000,
11811           2.0000000000000000, 0.89999999999999991 },
11812 };
11813 
11814 // Test function for a=5.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
11815 template <typename Tp>
test171()11816 void test171()
11817 {
11818   const Tp eps = std::numeric_limits<Tp>::epsilon();
11819   Tp max_abs_diff = -Tp(1);
11820   Tp max_abs_frac = -Tp(1);
11821   unsigned int num_datum = sizeof(data171)
11822                          / sizeof(testcase_hyperg<double>);
11823   for (unsigned int i = 0; i < num_datum; ++i)
11824     {
11825       const Tp f = std::tr1::hyperg(Tp(data171[i].a), Tp(data171[i].b),
11826                    Tp(data171[i].c), Tp(data171[i].x));
11827       const Tp f0 = data171[i].f0;
11828       const Tp diff = f - f0;
11829       if (std::abs(diff) > max_abs_diff)
11830         max_abs_diff = std::abs(diff);
11831       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11832         {
11833           const Tp frac = diff / f0;
11834           if (std::abs(frac) > max_abs_frac)
11835             max_abs_frac = std::abs(frac);
11836         }
11837     }
11838   VERIFY(max_abs_frac < Tp(5.0000000000000034e-10));
11839 }
11840 
11841 // Test data for a=5.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
11842 testcase_hyperg<double> data172[] = {
11843   { -3.6403884515183385e-06, 5.0000000000000000, 20.000000000000000,
11844           4.0000000000000000, -0.90000000000000002 },
11845   { -9.5873829247725586e-06, 5.0000000000000000, 20.000000000000000,
11846           4.0000000000000000, -0.80000000000000004 },
11847   { -2.6052245147354694e-05, 5.0000000000000000, 20.000000000000000,
11848           4.0000000000000000, -0.69999999999999996 },
11849   { -7.2378303598294010e-05, 5.0000000000000000, 20.000000000000000,
11850           4.0000000000000000, -0.59999999999999998 },
11851   { -0.00020048577321454082, 5.0000000000000000, 20.000000000000000,
11852           4.0000000000000000, -0.50000000000000000 },
11853   { -0.00051222704046236022, 5.0000000000000000, 20.000000000000000,
11854           4.0000000000000000, -0.40000000000000002 },
11855   { -0.00080950511491911315, 5.0000000000000000, 20.000000000000000,
11856           4.0000000000000000, -0.30000000000000004 },
11857   { 0.0043473422174314449, 5.0000000000000000, 20.000000000000000,
11858           4.0000000000000000, -0.19999999999999996 },
11859   { 0.081078342558623825, 5.0000000000000000, 20.000000000000000,
11860           4.0000000000000000, -0.099999999999999978 },
11861   { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
11862           4.0000000000000000, 0.0000000000000000 },
11863   { 12.794854084397739, 5.0000000000000000, 20.000000000000000,
11864           4.0000000000000000, 0.10000000000000009 },
11865   { 195.15639104739046, 5.0000000000000000, 20.000000000000000,
11866           4.0000000000000000, 0.19999999999999996 },
11867   { 3938.7991953190131, 5.0000000000000000, 20.000000000000000,
11868           4.0000000000000000, 0.30000000000000004 },
11869   { 118521.48653762060, 5.0000000000000000, 20.000000000000000,
11870           4.0000000000000000, 0.39999999999999991 },
11871   { 6291455.9999999972, 5.0000000000000000, 20.000000000000000,
11872           4.0000000000000000, 0.50000000000000000 },
11873   { 773070496.50699198, 5.0000000000000000, 20.000000000000000,
11874           4.0000000000000000, 0.60000000000000009 },
11875   { 363276452167.04102, 5.0000000000000000, 20.000000000000000,
11876           4.0000000000000000, 0.69999999999999996 },
11877   { 2002716064453133.0, 5.0000000000000000, 20.000000000000000,
11878           4.0000000000000000, 0.80000000000000004 },
11879   { 4.5999999999999109e+21, 5.0000000000000000, 20.000000000000000,
11880           4.0000000000000000, 0.89999999999999991 },
11881 };
11882 
11883 // Test function for a=5.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
11884 template <typename Tp>
test172()11885 void test172()
11886 {
11887   const Tp eps = std::numeric_limits<Tp>::epsilon();
11888   Tp max_abs_diff = -Tp(1);
11889   Tp max_abs_frac = -Tp(1);
11890   unsigned int num_datum = sizeof(data172)
11891                          / sizeof(testcase_hyperg<double>);
11892   for (unsigned int i = 0; i < num_datum; ++i)
11893     {
11894       const Tp f = std::tr1::hyperg(Tp(data172[i].a), Tp(data172[i].b),
11895                    Tp(data172[i].c), Tp(data172[i].x));
11896       const Tp f0 = data172[i].f0;
11897       const Tp diff = f - f0;
11898       if (std::abs(diff) > max_abs_diff)
11899         max_abs_diff = std::abs(diff);
11900       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11901         {
11902           const Tp frac = diff / f0;
11903           if (std::abs(frac) > max_abs_frac)
11904             max_abs_frac = std::abs(frac);
11905         }
11906     }
11907   VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
11908 }
11909 
11910 // Test data for a=5.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
11911 testcase_hyperg<double> data173[] = {
11912   { 0.00014313323624069244, 5.0000000000000000, 20.000000000000000,
11913           6.0000000000000000, -0.90000000000000002 },
11914   { 0.00025426183473140697, 5.0000000000000000, 20.000000000000000,
11915           6.0000000000000000, -0.80000000000000004 },
11916   { 0.00048255612836426809, 5.0000000000000000, 20.000000000000000,
11917           6.0000000000000000, -0.69999999999999996 },
11918   { 0.00099096904674788092, 5.0000000000000000, 20.000000000000000,
11919           6.0000000000000000, -0.59999999999999998 },
11920   { 0.0022347805521915607, 5.0000000000000000, 20.000000000000000,
11921           6.0000000000000000, -0.50000000000000000 },
11922   { 0.0056271390060292376, 5.0000000000000000, 20.000000000000000,
11923           6.0000000000000000, -0.40000000000000002 },
11924   { 0.016109059519227226, 5.0000000000000000, 20.000000000000000,
11925           6.0000000000000000, -0.30000000000000004 },
11926   { 0.053453465775608999, 5.0000000000000000, 20.000000000000000,
11927           6.0000000000000000, -0.19999999999999996 },
11928   { 0.20995202901839258, 5.0000000000000000, 20.000000000000000,
11929           6.0000000000000000, -0.099999999999999978 },
11930   { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
11931           6.0000000000000000, 0.0000000000000000 },
11932   { 5.9534372167648799, 5.0000000000000000, 20.000000000000000,
11933           6.0000000000000000, 0.10000000000000009 },
11934   { 46.157632071205875, 5.0000000000000000, 20.000000000000000,
11935           6.0000000000000000, 0.19999999999999996 },
11936   { 494.32074431164915, 5.0000000000000000, 20.000000000000000,
11937           6.0000000000000000, 0.30000000000000004 },
11938   { 7989.5277611775946, 5.0000000000000000, 20.000000000000000,
11939           6.0000000000000000, 0.39999999999999991 },
11940   { 224179.55830753347, 5.0000000000000000, 20.000000000000000,
11941           6.0000000000000000, 0.50000000000000000 },
11942   { 13848144.485282511, 5.0000000000000000, 20.000000000000000,
11943           6.0000000000000000, 0.60000000000000009 },
11944   { 2948587692.8891716, 5.0000000000000000, 20.000000000000000,
11945           6.0000000000000000, 0.69999999999999996 },
11946   { 5940513286161.6602, 5.0000000000000000, 20.000000000000000,
11947           6.0000000000000000, 0.80000000000000004 },
11948   { 2.8531757655945201e+18, 5.0000000000000000, 20.000000000000000,
11949           6.0000000000000000, 0.89999999999999991 },
11950 };
11951 
11952 // Test function for a=5.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
11953 template <typename Tp>
test173()11954 void test173()
11955 {
11956   const Tp eps = std::numeric_limits<Tp>::epsilon();
11957   Tp max_abs_diff = -Tp(1);
11958   Tp max_abs_frac = -Tp(1);
11959   unsigned int num_datum = sizeof(data173)
11960                          / sizeof(testcase_hyperg<double>);
11961   for (unsigned int i = 0; i < num_datum; ++i)
11962     {
11963       const Tp f = std::tr1::hyperg(Tp(data173[i].a), Tp(data173[i].b),
11964                    Tp(data173[i].c), Tp(data173[i].x));
11965       const Tp f0 = data173[i].f0;
11966       const Tp diff = f - f0;
11967       if (std::abs(diff) > max_abs_diff)
11968         max_abs_diff = std::abs(diff);
11969       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11970         {
11971           const Tp frac = diff / f0;
11972           if (std::abs(frac) > max_abs_frac)
11973             max_abs_frac = std::abs(frac);
11974         }
11975     }
11976   VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
11977 }
11978 
11979 // Test data for a=5.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
11980 testcase_hyperg<double> data174[] = {
11981   { 0.0012492049968742865, 5.0000000000000000, 20.000000000000000,
11982           8.0000000000000000, -0.90000000000000002 },
11983   { 0.0019931241968014451, 5.0000000000000000, 20.000000000000000,
11984           8.0000000000000000, -0.80000000000000004 },
11985   { 0.0033203386861411057, 5.0000000000000000, 20.000000000000000,
11986           8.0000000000000000, -0.69999999999999996 },
11987   { 0.0058191894509855282, 5.0000000000000000, 20.000000000000000,
11988           8.0000000000000000, -0.59999999999999998 },
11989   { 0.010830090368313866, 5.0000000000000000, 20.000000000000000,
11990           8.0000000000000000, -0.50000000000000000 },
11991   { 0.021653062305193163, 5.0000000000000000, 20.000000000000000,
11992           8.0000000000000000, -0.40000000000000002 },
11993   { 0.047180821280919084, 5.0000000000000000, 20.000000000000000,
11994           8.0000000000000000, -0.30000000000000004 },
11995   { 0.11405637279736180, 5.0000000000000000, 20.000000000000000,
11996           8.0000000000000000, -0.19999999999999996 },
11997   { 0.31275468794720990, 5.0000000000000000, 20.000000000000000,
11998           8.0000000000000000, -0.099999999999999978 },
11999   { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
12000           8.0000000000000000, 0.0000000000000000 },
12001   { 3.8598904658643969, 5.0000000000000000, 20.000000000000000,
12002           8.0000000000000000, 0.10000000000000009 },
12003   { 18.806301417906667, 5.0000000000000000, 20.000000000000000,
12004           8.0000000000000000, 0.19999999999999996 },
12005   { 122.77054465017432, 5.0000000000000000, 20.000000000000000,
12006           8.0000000000000000, 0.30000000000000004 },
12007   { 1168.4762146808946, 5.0000000000000000, 20.000000000000000,
12008           8.0000000000000000, 0.39999999999999991 },
12009   { 18437.511788521082, 5.0000000000000000, 20.000000000000000,
12010           8.0000000000000000, 0.50000000000000000 },
12011   { 597441.79669264762, 5.0000000000000000, 20.000000000000000,
12012           8.0000000000000000, 0.60000000000000009 },
12013   { 59390411.369227782, 5.0000000000000000, 20.000000000000000,
12014           8.0000000000000000, 0.69999999999999996 },
12015   { 44681668993.361603, 5.0000000000000000, 20.000000000000000,
12016           8.0000000000000000, 0.80000000000000004 },
12017   { 4559673269683164.0, 5.0000000000000000, 20.000000000000000,
12018           8.0000000000000000, 0.89999999999999991 },
12019 };
12020 
12021 // Test function for a=5.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
12022 template <typename Tp>
test174()12023 void test174()
12024 {
12025   const Tp eps = std::numeric_limits<Tp>::epsilon();
12026   Tp max_abs_diff = -Tp(1);
12027   Tp max_abs_frac = -Tp(1);
12028   unsigned int num_datum = sizeof(data174)
12029                          / sizeof(testcase_hyperg<double>);
12030   for (unsigned int i = 0; i < num_datum; ++i)
12031     {
12032       const Tp f = std::tr1::hyperg(Tp(data174[i].a), Tp(data174[i].b),
12033                    Tp(data174[i].c), Tp(data174[i].x));
12034       const Tp f0 = data174[i].f0;
12035       const Tp diff = f - f0;
12036       if (std::abs(diff) > max_abs_diff)
12037         max_abs_diff = std::abs(diff);
12038       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12039         {
12040           const Tp frac = diff / f0;
12041           if (std::abs(frac) > max_abs_frac)
12042             max_abs_frac = std::abs(frac);
12043         }
12044     }
12045   VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
12046 }
12047 
12048 // Test data for a=5.0000000000000000, b=20.000000000000000, c=10.000000000000000.
12049 testcase_hyperg<double> data175[] = {
12050   { 0.0038867957051371450, 5.0000000000000000, 20.000000000000000,
12051           10.000000000000000, -0.90000000000000002 },
12052   { 0.0058484892597364443, 5.0000000000000000, 20.000000000000000,
12053           10.000000000000000, -0.80000000000000004 },
12054   { 0.0090987656053757009, 5.0000000000000000, 20.000000000000000,
12055           10.000000000000000, -0.69999999999999996 },
12056   { 0.014714392537270733, 5.0000000000000000, 20.000000000000000,
12057           10.000000000000000, -0.59999999999999998 },
12058   { 0.024900404542056769, 5.0000000000000000, 20.000000000000000,
12059           10.000000000000000, -0.50000000000000000 },
12060   { 0.044460184663785055, 5.0000000000000000, 20.000000000000000,
12061           10.000000000000000, -0.40000000000000002 },
12062   { 0.084638849196356836, 5.0000000000000000, 20.000000000000000,
12063           10.000000000000000, -0.30000000000000004 },
12064   { 0.17409058241290998, 5.0000000000000000, 20.000000000000000,
12065           10.000000000000000, -0.19999999999999996 },
12066   { 0.39357055823580755, 5.0000000000000000, 20.000000000000000,
12067           10.000000000000000, -0.099999999999999978 },
12068   { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
12069           10.000000000000000, 0.0000000000000000 },
12070   { 2.9410794636226596, 5.0000000000000000, 20.000000000000000,
12071           10.000000000000000, 0.10000000000000009 },
12072   { 10.417226071414344, 5.0000000000000000, 20.000000000000000,
12073           10.000000000000000, 0.19999999999999996 },
12074   { 46.930585873140835, 5.0000000000000000, 20.000000000000000,
12075           10.000000000000000, 0.30000000000000004 },
12076   { 290.76717121814852, 5.0000000000000000, 20.000000000000000,
12077           10.000000000000000, 0.39999999999999991 },
12078   { 2788.1641083374830, 5.0000000000000000, 20.000000000000000,
12079           10.000000000000000, 0.50000000000000000 },
12080   { 50228.117718560752, 5.0000000000000000, 20.000000000000000,
12081           10.000000000000000, 0.60000000000000009 },
12082   { 2433042.3476752634, 5.0000000000000000, 20.000000000000000,
12083           10.000000000000000, 0.69999999999999996 },
12084   { 705345246.77141762, 5.0000000000000000, 20.000000000000000,
12085           10.000000000000000, 0.80000000000000004 },
12086   { 15652478868616.762, 5.0000000000000000, 20.000000000000000,
12087           10.000000000000000, 0.89999999999999991 },
12088 };
12089 
12090 // Test function for a=5.0000000000000000, b=20.000000000000000, c=10.000000000000000.
12091 template <typename Tp>
test175()12092 void test175()
12093 {
12094   const Tp eps = std::numeric_limits<Tp>::epsilon();
12095   Tp max_abs_diff = -Tp(1);
12096   Tp max_abs_frac = -Tp(1);
12097   unsigned int num_datum = sizeof(data175)
12098                          / sizeof(testcase_hyperg<double>);
12099   for (unsigned int i = 0; i < num_datum; ++i)
12100     {
12101       const Tp f = std::tr1::hyperg(Tp(data175[i].a), Tp(data175[i].b),
12102                    Tp(data175[i].c), Tp(data175[i].x));
12103       const Tp f0 = data175[i].f0;
12104       const Tp diff = f - f0;
12105       if (std::abs(diff) > max_abs_diff)
12106         max_abs_diff = std::abs(diff);
12107       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12108         {
12109           const Tp frac = diff / f0;
12110           if (std::abs(frac) > max_abs_frac)
12111             max_abs_frac = std::abs(frac);
12112         }
12113     }
12114   VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
12115 }
12116 
12117 // Test data for a=10.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
12118 testcase_hyperg<double> data176[] = {
12119   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12120           2.0000000000000000, -0.90000000000000002 },
12121   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12122           2.0000000000000000, -0.80000000000000004 },
12123   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12124           2.0000000000000000, -0.69999999999999996 },
12125   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12126           2.0000000000000000, -0.59999999999999998 },
12127   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12128           2.0000000000000000, -0.50000000000000000 },
12129   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12130           2.0000000000000000, -0.40000000000000002 },
12131   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12132           2.0000000000000000, -0.30000000000000004 },
12133   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12134           2.0000000000000000, -0.19999999999999996 },
12135   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12136           2.0000000000000000, -0.099999999999999978 },
12137   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12138           2.0000000000000000, 0.0000000000000000 },
12139   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12140           2.0000000000000000, 0.10000000000000009 },
12141   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12142           2.0000000000000000, 0.19999999999999996 },
12143   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12144           2.0000000000000000, 0.30000000000000004 },
12145   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12146           2.0000000000000000, 0.39999999999999991 },
12147   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12148           2.0000000000000000, 0.50000000000000000 },
12149   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12150           2.0000000000000000, 0.60000000000000009 },
12151   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12152           2.0000000000000000, 0.69999999999999996 },
12153   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12154           2.0000000000000000, 0.80000000000000004 },
12155   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12156           2.0000000000000000, 0.89999999999999991 },
12157 };
12158 
12159 // Test function for a=10.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
12160 template <typename Tp>
test176()12161 void test176()
12162 {
12163   const Tp eps = std::numeric_limits<Tp>::epsilon();
12164   Tp max_abs_diff = -Tp(1);
12165   Tp max_abs_frac = -Tp(1);
12166   unsigned int num_datum = sizeof(data176)
12167                          / sizeof(testcase_hyperg<double>);
12168   for (unsigned int i = 0; i < num_datum; ++i)
12169     {
12170       const Tp f = std::tr1::hyperg(Tp(data176[i].a), Tp(data176[i].b),
12171                    Tp(data176[i].c), Tp(data176[i].x));
12172       const Tp f0 = data176[i].f0;
12173       const Tp diff = f - f0;
12174       if (std::abs(diff) > max_abs_diff)
12175         max_abs_diff = std::abs(diff);
12176       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12177         {
12178           const Tp frac = diff / f0;
12179           if (std::abs(frac) > max_abs_frac)
12180             max_abs_frac = std::abs(frac);
12181         }
12182     }
12183   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12184 }
12185 
12186 // Test data for a=10.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
12187 testcase_hyperg<double> data177[] = {
12188   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12189           4.0000000000000000, -0.90000000000000002 },
12190   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12191           4.0000000000000000, -0.80000000000000004 },
12192   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12193           4.0000000000000000, -0.69999999999999996 },
12194   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12195           4.0000000000000000, -0.59999999999999998 },
12196   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12197           4.0000000000000000, -0.50000000000000000 },
12198   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12199           4.0000000000000000, -0.40000000000000002 },
12200   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12201           4.0000000000000000, -0.30000000000000004 },
12202   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12203           4.0000000000000000, -0.19999999999999996 },
12204   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12205           4.0000000000000000, -0.099999999999999978 },
12206   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12207           4.0000000000000000, 0.0000000000000000 },
12208   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12209           4.0000000000000000, 0.10000000000000009 },
12210   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12211           4.0000000000000000, 0.19999999999999996 },
12212   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12213           4.0000000000000000, 0.30000000000000004 },
12214   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12215           4.0000000000000000, 0.39999999999999991 },
12216   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12217           4.0000000000000000, 0.50000000000000000 },
12218   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12219           4.0000000000000000, 0.60000000000000009 },
12220   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12221           4.0000000000000000, 0.69999999999999996 },
12222   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12223           4.0000000000000000, 0.80000000000000004 },
12224   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12225           4.0000000000000000, 0.89999999999999991 },
12226 };
12227 
12228 // Test function for a=10.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
12229 template <typename Tp>
test177()12230 void test177()
12231 {
12232   const Tp eps = std::numeric_limits<Tp>::epsilon();
12233   Tp max_abs_diff = -Tp(1);
12234   Tp max_abs_frac = -Tp(1);
12235   unsigned int num_datum = sizeof(data177)
12236                          / sizeof(testcase_hyperg<double>);
12237   for (unsigned int i = 0; i < num_datum; ++i)
12238     {
12239       const Tp f = std::tr1::hyperg(Tp(data177[i].a), Tp(data177[i].b),
12240                    Tp(data177[i].c), Tp(data177[i].x));
12241       const Tp f0 = data177[i].f0;
12242       const Tp diff = f - f0;
12243       if (std::abs(diff) > max_abs_diff)
12244         max_abs_diff = std::abs(diff);
12245       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12246         {
12247           const Tp frac = diff / f0;
12248           if (std::abs(frac) > max_abs_frac)
12249             max_abs_frac = std::abs(frac);
12250         }
12251     }
12252   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12253 }
12254 
12255 // Test data for a=10.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
12256 testcase_hyperg<double> data178[] = {
12257   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12258           6.0000000000000000, -0.90000000000000002 },
12259   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12260           6.0000000000000000, -0.80000000000000004 },
12261   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12262           6.0000000000000000, -0.69999999999999996 },
12263   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12264           6.0000000000000000, -0.59999999999999998 },
12265   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12266           6.0000000000000000, -0.50000000000000000 },
12267   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12268           6.0000000000000000, -0.40000000000000002 },
12269   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12270           6.0000000000000000, -0.30000000000000004 },
12271   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12272           6.0000000000000000, -0.19999999999999996 },
12273   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12274           6.0000000000000000, -0.099999999999999978 },
12275   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12276           6.0000000000000000, 0.0000000000000000 },
12277   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12278           6.0000000000000000, 0.10000000000000009 },
12279   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12280           6.0000000000000000, 0.19999999999999996 },
12281   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12282           6.0000000000000000, 0.30000000000000004 },
12283   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12284           6.0000000000000000, 0.39999999999999991 },
12285   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12286           6.0000000000000000, 0.50000000000000000 },
12287   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12288           6.0000000000000000, 0.60000000000000009 },
12289   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12290           6.0000000000000000, 0.69999999999999996 },
12291   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12292           6.0000000000000000, 0.80000000000000004 },
12293   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12294           6.0000000000000000, 0.89999999999999991 },
12295 };
12296 
12297 // Test function for a=10.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
12298 template <typename Tp>
test178()12299 void test178()
12300 {
12301   const Tp eps = std::numeric_limits<Tp>::epsilon();
12302   Tp max_abs_diff = -Tp(1);
12303   Tp max_abs_frac = -Tp(1);
12304   unsigned int num_datum = sizeof(data178)
12305                          / sizeof(testcase_hyperg<double>);
12306   for (unsigned int i = 0; i < num_datum; ++i)
12307     {
12308       const Tp f = std::tr1::hyperg(Tp(data178[i].a), Tp(data178[i].b),
12309                    Tp(data178[i].c), Tp(data178[i].x));
12310       const Tp f0 = data178[i].f0;
12311       const Tp diff = f - f0;
12312       if (std::abs(diff) > max_abs_diff)
12313         max_abs_diff = std::abs(diff);
12314       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12315         {
12316           const Tp frac = diff / f0;
12317           if (std::abs(frac) > max_abs_frac)
12318             max_abs_frac = std::abs(frac);
12319         }
12320     }
12321   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12322 }
12323 
12324 // Test data for a=10.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
12325 testcase_hyperg<double> data179[] = {
12326   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12327           8.0000000000000000, -0.90000000000000002 },
12328   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12329           8.0000000000000000, -0.80000000000000004 },
12330   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12331           8.0000000000000000, -0.69999999999999996 },
12332   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12333           8.0000000000000000, -0.59999999999999998 },
12334   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12335           8.0000000000000000, -0.50000000000000000 },
12336   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12337           8.0000000000000000, -0.40000000000000002 },
12338   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12339           8.0000000000000000, -0.30000000000000004 },
12340   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12341           8.0000000000000000, -0.19999999999999996 },
12342   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12343           8.0000000000000000, -0.099999999999999978 },
12344   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12345           8.0000000000000000, 0.0000000000000000 },
12346   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12347           8.0000000000000000, 0.10000000000000009 },
12348   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12349           8.0000000000000000, 0.19999999999999996 },
12350   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12351           8.0000000000000000, 0.30000000000000004 },
12352   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12353           8.0000000000000000, 0.39999999999999991 },
12354   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12355           8.0000000000000000, 0.50000000000000000 },
12356   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12357           8.0000000000000000, 0.60000000000000009 },
12358   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12359           8.0000000000000000, 0.69999999999999996 },
12360   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12361           8.0000000000000000, 0.80000000000000004 },
12362   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12363           8.0000000000000000, 0.89999999999999991 },
12364 };
12365 
12366 // Test function for a=10.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
12367 template <typename Tp>
test179()12368 void test179()
12369 {
12370   const Tp eps = std::numeric_limits<Tp>::epsilon();
12371   Tp max_abs_diff = -Tp(1);
12372   Tp max_abs_frac = -Tp(1);
12373   unsigned int num_datum = sizeof(data179)
12374                          / sizeof(testcase_hyperg<double>);
12375   for (unsigned int i = 0; i < num_datum; ++i)
12376     {
12377       const Tp f = std::tr1::hyperg(Tp(data179[i].a), Tp(data179[i].b),
12378                    Tp(data179[i].c), Tp(data179[i].x));
12379       const Tp f0 = data179[i].f0;
12380       const Tp diff = f - f0;
12381       if (std::abs(diff) > max_abs_diff)
12382         max_abs_diff = std::abs(diff);
12383       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12384         {
12385           const Tp frac = diff / f0;
12386           if (std::abs(frac) > max_abs_frac)
12387             max_abs_frac = std::abs(frac);
12388         }
12389     }
12390   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12391 }
12392 
12393 // Test data for a=10.000000000000000, b=0.0000000000000000, c=10.000000000000000.
12394 testcase_hyperg<double> data180[] = {
12395   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12396           10.000000000000000, -0.90000000000000002 },
12397   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12398           10.000000000000000, -0.80000000000000004 },
12399   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12400           10.000000000000000, -0.69999999999999996 },
12401   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12402           10.000000000000000, -0.59999999999999998 },
12403   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12404           10.000000000000000, -0.50000000000000000 },
12405   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12406           10.000000000000000, -0.40000000000000002 },
12407   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12408           10.000000000000000, -0.30000000000000004 },
12409   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12410           10.000000000000000, -0.19999999999999996 },
12411   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12412           10.000000000000000, -0.099999999999999978 },
12413   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12414           10.000000000000000, 0.0000000000000000 },
12415   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12416           10.000000000000000, 0.10000000000000009 },
12417   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12418           10.000000000000000, 0.19999999999999996 },
12419   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12420           10.000000000000000, 0.30000000000000004 },
12421   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12422           10.000000000000000, 0.39999999999999991 },
12423   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12424           10.000000000000000, 0.50000000000000000 },
12425   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12426           10.000000000000000, 0.60000000000000009 },
12427   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12428           10.000000000000000, 0.69999999999999996 },
12429   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12430           10.000000000000000, 0.80000000000000004 },
12431   { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12432           10.000000000000000, 0.89999999999999991 },
12433 };
12434 
12435 // Test function for a=10.000000000000000, b=0.0000000000000000, c=10.000000000000000.
12436 template <typename Tp>
test180()12437 void test180()
12438 {
12439   const Tp eps = std::numeric_limits<Tp>::epsilon();
12440   Tp max_abs_diff = -Tp(1);
12441   Tp max_abs_frac = -Tp(1);
12442   unsigned int num_datum = sizeof(data180)
12443                          / sizeof(testcase_hyperg<double>);
12444   for (unsigned int i = 0; i < num_datum; ++i)
12445     {
12446       const Tp f = std::tr1::hyperg(Tp(data180[i].a), Tp(data180[i].b),
12447                    Tp(data180[i].c), Tp(data180[i].x));
12448       const Tp f0 = data180[i].f0;
12449       const Tp diff = f - f0;
12450       if (std::abs(diff) > max_abs_diff)
12451         max_abs_diff = std::abs(diff);
12452       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12453         {
12454           const Tp frac = diff / f0;
12455           if (std::abs(frac) > max_abs_frac)
12456             max_abs_frac = std::abs(frac);
12457         }
12458     }
12459   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12460 }
12461 
12462 // Test data for a=10.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
12463 testcase_hyperg<double> data181[] = {
12464   { 0.37727530159464628, 10.000000000000000, 0.50000000000000000,
12465           2.0000000000000000, -0.90000000000000002 },
12466   { 0.39816010922169010, 10.000000000000000, 0.50000000000000000,
12467           2.0000000000000000, -0.80000000000000004 },
12468   { 0.42283703041362453, 10.000000000000000, 0.50000000000000000,
12469           2.0000000000000000, -0.69999999999999996 },
12470   { 0.45255640448730505, 10.000000000000000, 0.50000000000000000,
12471           2.0000000000000000, -0.59999999999999998 },
12472   { 0.48919507154431141, 10.000000000000000, 0.50000000000000000,
12473           2.0000000000000000, -0.50000000000000000 },
12474   { 0.53569358917731880, 10.000000000000000, 0.50000000000000000,
12475           2.0000000000000000, -0.40000000000000002 },
12476   { 0.59689778897029566, 10.000000000000000, 0.50000000000000000,
12477           2.0000000000000000, -0.30000000000000004 },
12478   { 0.68128587569875731, 10.000000000000000, 0.50000000000000000,
12479           2.0000000000000000, -0.19999999999999996 },
12480   { 0.80478739308790359, 10.000000000000000, 0.50000000000000000,
12481           2.0000000000000000, -0.099999999999999978 },
12482   { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
12483           2.0000000000000000, 0.0000000000000000 },
12484   { 1.3408664196153621, 10.000000000000000, 0.50000000000000000,
12485           2.0000000000000000, 0.10000000000000009 },
12486   { 2.0175364359923860, 10.000000000000000, 0.50000000000000000,
12487           2.0000000000000000, 0.19999999999999996 },
12488   { 3.6011214553736646, 10.000000000000000, 0.50000000000000000,
12489           2.0000000000000000, 0.30000000000000004 },
12490   { 8.1799429939495312, 10.000000000000000, 0.50000000000000000,
12491           2.0000000000000000, 0.39999999999999991 },
12492   { 25.644834637536000, 10.000000000000000, 0.50000000000000000,
12493           2.0000000000000000, 0.50000000000000000 },
12494   { 123.13738891597615, 10.000000000000000, 0.50000000000000000,
12495           2.0000000000000000, 0.60000000000000009 },
12496   { 1088.7122410321333, 10.000000000000000, 0.50000000000000000,
12497           2.0000000000000000, 0.69999999999999996 },
12498   { 27358.291704709951, 10.000000000000000, 0.50000000000000000,
12499           2.0000000000000000, 0.80000000000000004 },
12500   { 8174369.0266731177, 10.000000000000000, 0.50000000000000000,
12501           2.0000000000000000, 0.89999999999999991 },
12502 };
12503 
12504 // Test function for a=10.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
12505 template <typename Tp>
test181()12506 void test181()
12507 {
12508   const Tp eps = std::numeric_limits<Tp>::epsilon();
12509   Tp max_abs_diff = -Tp(1);
12510   Tp max_abs_frac = -Tp(1);
12511   unsigned int num_datum = sizeof(data181)
12512                          / sizeof(testcase_hyperg<double>);
12513   for (unsigned int i = 0; i < num_datum; ++i)
12514     {
12515       const Tp f = std::tr1::hyperg(Tp(data181[i].a), Tp(data181[i].b),
12516                    Tp(data181[i].c), Tp(data181[i].x));
12517       const Tp f0 = data181[i].f0;
12518       const Tp diff = f - f0;
12519       if (std::abs(diff) > max_abs_diff)
12520         max_abs_diff = std::abs(diff);
12521       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12522         {
12523           const Tp frac = diff / f0;
12524           if (std::abs(frac) > max_abs_frac)
12525             max_abs_frac = std::abs(frac);
12526         }
12527     }
12528   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12529 }
12530 
12531 // Test data for a=10.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
12532 testcase_hyperg<double> data182[] = {
12533   { 0.53905528308450834, 10.000000000000000, 0.50000000000000000,
12534           4.0000000000000000, -0.90000000000000002 },
12535   { 0.56235533974376162, 10.000000000000000, 0.50000000000000000,
12536           4.0000000000000000, -0.80000000000000004 },
12537   { 0.58887657983263575, 10.000000000000000, 0.50000000000000000,
12538           4.0000000000000000, -0.69999999999999996 },
12539   { 0.61941227047262915, 10.000000000000000, 0.50000000000000000,
12540           4.0000000000000000, -0.59999999999999998 },
12541   { 0.65504896640793853, 10.000000000000000, 0.50000000000000000,
12542           4.0000000000000000, -0.50000000000000000 },
12543   { 0.69731666644529999, 10.000000000000000, 0.50000000000000000,
12544           4.0000000000000000, -0.40000000000000002 },
12545   { 0.74844073299399128, 10.000000000000000, 0.50000000000000000,
12546           4.0000000000000000, -0.30000000000000004 },
12547   { 0.81178446800105752, 10.000000000000000, 0.50000000000000000,
12548           4.0000000000000000, -0.19999999999999996 },
12549   { 0.89266981277598023, 10.000000000000000, 0.50000000000000000,
12550           4.0000000000000000, -0.099999999999999978 },
12551   { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
12552           4.0000000000000000, 0.0000000000000000 },
12553   { 1.1497248473106778, 10.000000000000000, 0.50000000000000000,
12554           4.0000000000000000, 0.10000000000000009 },
12555   { 1.3729717112654571, 10.000000000000000, 0.50000000000000000,
12556           4.0000000000000000, 0.19999999999999996 },
12557   { 1.7374982340374392, 10.000000000000000, 0.50000000000000000,
12558           4.0000000000000000, 0.30000000000000004 },
12559   { 2.4134479340960580, 10.000000000000000, 0.50000000000000000,
12560           4.0000000000000000, 0.39999999999999991 },
12561   { 3.9191255240471192, 10.000000000000000, 0.50000000000000000,
12562           4.0000000000000000, 0.50000000000000000 },
12563   { 8.3316373077761270, 10.000000000000000, 0.50000000000000000,
12564           4.0000000000000000, 0.60000000000000009 },
12565   { 28.323020339843335, 10.000000000000000, 0.50000000000000000,
12566           4.0000000000000000, 0.69999999999999996 },
12567   { 225.84286572747891, 10.000000000000000, 0.50000000000000000,
12568           4.0000000000000000, 0.80000000000000004 },
12569   { 12757.127591286655, 10.000000000000000, 0.50000000000000000,
12570           4.0000000000000000, 0.89999999999999991 },
12571 };
12572 
12573 // Test function for a=10.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
12574 template <typename Tp>
test182()12575 void test182()
12576 {
12577   const Tp eps = std::numeric_limits<Tp>::epsilon();
12578   Tp max_abs_diff = -Tp(1);
12579   Tp max_abs_frac = -Tp(1);
12580   unsigned int num_datum = sizeof(data182)
12581                          / sizeof(testcase_hyperg<double>);
12582   for (unsigned int i = 0; i < num_datum; ++i)
12583     {
12584       const Tp f = std::tr1::hyperg(Tp(data182[i].a), Tp(data182[i].b),
12585                    Tp(data182[i].c), Tp(data182[i].x));
12586       const Tp f0 = data182[i].f0;
12587       const Tp diff = f - f0;
12588       if (std::abs(diff) > max_abs_diff)
12589         max_abs_diff = std::abs(diff);
12590       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12591         {
12592           const Tp frac = diff / f0;
12593           if (std::abs(frac) > max_abs_frac)
12594             max_abs_frac = std::abs(frac);
12595         }
12596     }
12597   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12598 }
12599 
12600 // Test data for a=10.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
12601 testcase_hyperg<double> data183[] = {
12602   { 0.62672622092226071, 10.000000000000000, 0.50000000000000000,
12603           6.0000000000000000, -0.90000000000000002 },
12604   { 0.64931010269769829, 10.000000000000000, 0.50000000000000000,
12605           6.0000000000000000, -0.80000000000000004 },
12606   { 0.67448067519076316, 10.000000000000000, 0.50000000000000000,
12607           6.0000000000000000, -0.69999999999999996 },
12608   { 0.70276306239803676, 10.000000000000000, 0.50000000000000000,
12609           6.0000000000000000, -0.59999999999999998 },
12610   { 0.73484179773087555, 10.000000000000000, 0.50000000000000000,
12611           6.0000000000000000, -0.50000000000000000 },
12612   { 0.77162761412743897, 10.000000000000000, 0.50000000000000000,
12613           6.0000000000000000, -0.40000000000000002 },
12614   { 0.81436116844816531, 10.000000000000000, 0.50000000000000000,
12615           6.0000000000000000, -0.30000000000000004 },
12616   { 0.86477994787944557, 10.000000000000000, 0.50000000000000000,
12617           6.0000000000000000, -0.19999999999999996 },
12618   { 0.92539820516603888, 10.000000000000000, 0.50000000000000000,
12619           6.0000000000000000, -0.099999999999999978 },
12620   { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
12621           6.0000000000000000, 0.0000000000000000 },
12622   { 1.0945599448210315, 10.000000000000000, 0.50000000000000000,
12623           6.0000000000000000, 0.10000000000000009 },
12624   { 1.2190897395597264, 10.000000000000000, 0.50000000000000000,
12625           6.0000000000000000, 0.19999999999999996 },
12626   { 1.3916844336856475, 10.000000000000000, 0.50000000000000000,
12627           6.0000000000000000, 0.30000000000000004 },
12628   { 1.6484497630432013, 10.000000000000000, 0.50000000000000000,
12629           6.0000000000000000, 0.39999999999999991 },
12630   { 2.0717772717131155, 10.000000000000000, 0.50000000000000000,
12631           6.0000000000000000, 0.50000000000000000 },
12632   { 2.8893613630810924, 10.000000000000000, 0.50000000000000000,
12633           6.0000000000000000, 0.60000000000000009 },
12634   { 4.9459404075413529, 10.000000000000000, 0.50000000000000000,
12635           6.0000000000000000, 0.69999999999999996 },
12636   { 13.487394149998716, 10.000000000000000, 0.50000000000000000,
12637           6.0000000000000000, 0.80000000000000004 },
12638   { 136.57616044013972, 10.000000000000000, 0.50000000000000000,
12639           6.0000000000000000, 0.89999999999999991 },
12640 };
12641 
12642 // Test function for a=10.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
12643 template <typename Tp>
test183()12644 void test183()
12645 {
12646   const Tp eps = std::numeric_limits<Tp>::epsilon();
12647   Tp max_abs_diff = -Tp(1);
12648   Tp max_abs_frac = -Tp(1);
12649   unsigned int num_datum = sizeof(data183)
12650                          / sizeof(testcase_hyperg<double>);
12651   for (unsigned int i = 0; i < num_datum; ++i)
12652     {
12653       const Tp f = std::tr1::hyperg(Tp(data183[i].a), Tp(data183[i].b),
12654                    Tp(data183[i].c), Tp(data183[i].x));
12655       const Tp f0 = data183[i].f0;
12656       const Tp diff = f - f0;
12657       if (std::abs(diff) > max_abs_diff)
12658         max_abs_diff = std::abs(diff);
12659       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12660         {
12661           const Tp frac = diff / f0;
12662           if (std::abs(frac) > max_abs_frac)
12663             max_abs_frac = std::abs(frac);
12664         }
12665     }
12666   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12667 }
12668 
12669 // Test data for a=10.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
12670 testcase_hyperg<double> data184[] = {
12671   { 0.68421604440344341, 10.000000000000000, 0.50000000000000000,
12672           8.0000000000000000, -0.90000000000000002 },
12673   { 0.70548098055548891, 10.000000000000000, 0.50000000000000000,
12674           8.0000000000000000, -0.80000000000000004 },
12675   { 0.72884342311710348, 10.000000000000000, 0.50000000000000000,
12676           8.0000000000000000, -0.69999999999999996 },
12677   { 0.75466953437856243, 10.000000000000000, 0.50000000000000000,
12678           8.0000000000000000, -0.59999999999999998 },
12679   { 0.78342090924662600, 10.000000000000000, 0.50000000000000000,
12680           8.0000000000000000, -0.50000000000000000 },
12681   { 0.81568884278645049, 10.000000000000000, 0.50000000000000000,
12682           8.0000000000000000, -0.40000000000000002 },
12683   { 0.85224480241465206, 10.000000000000000, 0.50000000000000000,
12684           8.0000000000000000, -0.30000000000000004 },
12685   { 0.89411692571131696, 10.000000000000000, 0.50000000000000000,
12686           8.0000000000000000, -0.19999999999999996 },
12687   { 0.94270986892954756, 10.000000000000000, 0.50000000000000000,
12688           8.0000000000000000, -0.099999999999999978 },
12689   { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
12690           8.0000000000000000, 0.0000000000000000 },
12691   { 1.0688682849120232, 10.000000000000000, 0.50000000000000000,
12692           8.0000000000000000, 0.10000000000000009 },
12693   { 1.1537004376097553, 10.000000000000000, 0.50000000000000000,
12694           8.0000000000000000, 0.19999999999999996 },
12695   { 1.2615455028370031, 10.000000000000000, 0.50000000000000000,
12696           8.0000000000000000, 0.30000000000000004 },
12697   { 1.4045541456153436, 10.000000000000000, 0.50000000000000000,
12698           8.0000000000000000, 0.39999999999999991 },
12699   { 1.6057216489444517, 10.000000000000000, 0.50000000000000000,
12700           8.0000000000000000, 0.50000000000000000 },
12701   { 1.9146603020550739, 10.000000000000000, 0.50000000000000000,
12702           8.0000000000000000, 0.60000000000000009 },
12703   { 2.4617931307620298, 10.000000000000000, 0.50000000000000000,
12704           8.0000000000000000, 0.69999999999999996 },
12705   { 3.7267799624996498, 10.000000000000000, 0.50000000000000000,
12706           8.0000000000000000, 0.80000000000000004 },
12707   { 9.3880118036248401, 10.000000000000000, 0.50000000000000000,
12708           8.0000000000000000, 0.89999999999999991 },
12709 };
12710 
12711 // Test function for a=10.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
12712 template <typename Tp>
test184()12713 void test184()
12714 {
12715   const Tp eps = std::numeric_limits<Tp>::epsilon();
12716   Tp max_abs_diff = -Tp(1);
12717   Tp max_abs_frac = -Tp(1);
12718   unsigned int num_datum = sizeof(data184)
12719                          / sizeof(testcase_hyperg<double>);
12720   for (unsigned int i = 0; i < num_datum; ++i)
12721     {
12722       const Tp f = std::tr1::hyperg(Tp(data184[i].a), Tp(data184[i].b),
12723                    Tp(data184[i].c), Tp(data184[i].x));
12724       const Tp f0 = data184[i].f0;
12725       const Tp diff = f - f0;
12726       if (std::abs(diff) > max_abs_diff)
12727         max_abs_diff = std::abs(diff);
12728       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12729         {
12730           const Tp frac = diff / f0;
12731           if (std::abs(frac) > max_abs_frac)
12732             max_abs_frac = std::abs(frac);
12733         }
12734     }
12735   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12736 }
12737 
12738 // Test data for a=10.000000000000000, b=0.50000000000000000, c=10.000000000000000.
12739 testcase_hyperg<double> data185[] = {
12740   { 0.72547625011001171, 10.000000000000000, 0.50000000000000000,
12741           10.000000000000000, -0.90000000000000002 },
12742   { 0.74535599249992990, 10.000000000000000, 0.50000000000000000,
12743           10.000000000000000, -0.80000000000000004 },
12744   { 0.76696498884737041, 10.000000000000000, 0.50000000000000000,
12745           10.000000000000000, -0.69999999999999996 },
12746   { 0.79056941504209477, 10.000000000000000, 0.50000000000000000,
12747           10.000000000000000, -0.59999999999999998 },
12748   { 0.81649658092772603, 10.000000000000000, 0.50000000000000000,
12749           10.000000000000000, -0.50000000000000000 },
12750   { 0.84515425472851657, 10.000000000000000, 0.50000000000000000,
12751           10.000000000000000, -0.40000000000000002 },
12752   { 0.87705801930702920, 10.000000000000000, 0.50000000000000000,
12753           10.000000000000000, -0.30000000000000004 },
12754   { 0.91287092917527690, 10.000000000000000, 0.50000000000000000,
12755           10.000000000000000, -0.19999999999999996 },
12756   { 0.95346258924559224, 10.000000000000000, 0.50000000000000000,
12757           10.000000000000000, -0.099999999999999978 },
12758   { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
12759           10.000000000000000, 0.0000000000000000 },
12760   { 1.0540925533894598, 10.000000000000000, 0.50000000000000000,
12761           10.000000000000000, 0.10000000000000009 },
12762   { 1.1180339887498949, 10.000000000000000, 0.50000000000000000,
12763           10.000000000000000, 0.19999999999999996 },
12764   { 1.1952286093343938, 10.000000000000000, 0.50000000000000000,
12765           10.000000000000000, 0.30000000000000004 },
12766   { 1.2909944487358056, 10.000000000000000, 0.50000000000000000,
12767           10.000000000000000, 0.39999999999999991 },
12768   { 1.4142135623730949, 10.000000000000000, 0.50000000000000000,
12769           10.000000000000000, 0.50000000000000000 },
12770   { 1.5811388300841900, 10.000000000000000, 0.50000000000000000,
12771           10.000000000000000, 0.60000000000000009 },
12772   { 1.8257418583505536, 10.000000000000000, 0.50000000000000000,
12773           10.000000000000000, 0.69999999999999996 },
12774   { 2.2360679774997898, 10.000000000000000, 0.50000000000000000,
12775           10.000000000000000, 0.80000000000000004 },
12776   { 3.1622776601683782, 10.000000000000000, 0.50000000000000000,
12777           10.000000000000000, 0.89999999999999991 },
12778 };
12779 
12780 // Test function for a=10.000000000000000, b=0.50000000000000000, c=10.000000000000000.
12781 template <typename Tp>
test185()12782 void test185()
12783 {
12784   const Tp eps = std::numeric_limits<Tp>::epsilon();
12785   Tp max_abs_diff = -Tp(1);
12786   Tp max_abs_frac = -Tp(1);
12787   unsigned int num_datum = sizeof(data185)
12788                          / sizeof(testcase_hyperg<double>);
12789   for (unsigned int i = 0; i < num_datum; ++i)
12790     {
12791       const Tp f = std::tr1::hyperg(Tp(data185[i].a), Tp(data185[i].b),
12792                    Tp(data185[i].c), Tp(data185[i].x));
12793       const Tp f0 = data185[i].f0;
12794       const Tp diff = f - f0;
12795       if (std::abs(diff) > max_abs_diff)
12796         max_abs_diff = std::abs(diff);
12797       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12798         {
12799           const Tp frac = diff / f0;
12800           if (std::abs(frac) > max_abs_frac)
12801             max_abs_frac = std::abs(frac);
12802         }
12803     }
12804   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12805 }
12806 
12807 // Test data for a=10.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
12808 testcase_hyperg<double> data186[] = {
12809   { 0.12307420104127871, 10.000000000000000, 1.0000000000000000,
12810           2.0000000000000000, -0.90000000000000002 },
12811   { 0.13818870041457423, 10.000000000000000, 1.0000000000000000,
12812           2.0000000000000000, -0.80000000000000004 },
12813   { 0.15739165631811691, 10.000000000000000, 1.0000000000000000,
12814           2.0000000000000000, -0.69999999999999996 },
12815   { 0.18249038606882068, 10.000000000000000, 1.0000000000000000,
12816           2.0000000000000000, -0.59999999999999998 },
12817   { 0.21644171225027786, 10.000000000000000, 1.0000000000000000,
12818           2.0000000000000000, -0.50000000000000000 },
12819   { 0.26433326159804160, 10.000000000000000, 1.0000000000000000,
12820           2.0000000000000000, -0.40000000000000002 },
12821   { 0.33544459430654533, 10.000000000000000, 1.0000000000000000,
12822           2.0000000000000000, -0.30000000000000004 },
12823   { 0.44788516696232517, 10.000000000000000, 1.0000000000000000,
12824           2.0000000000000000, -0.19999999999999996 },
12825   { 0.63989153514168362, 10.000000000000000, 1.0000000000000000,
12826           2.0000000000000000, -0.099999999999999978 },
12827   { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
12828           2.0000000000000000, 0.0000000000000000 },
12829   { 1.7568608796813312, 10.000000000000000, 1.0000000000000000,
12830           2.0000000000000000, 0.10000000000000009 },
12831   { 3.5836558871799027, 10.000000000000000, 1.0000000000000000,
12832           2.0000000000000000, 0.19999999999999996 },
12833   { 8.8077526749963226, 10.000000000000000, 1.0000000000000000,
12834           2.0000000000000000, 0.30000000000000004 },
12835   { 27.285841702089190, 10.000000000000000, 1.0000000000000000,
12836           2.0000000000000000, 0.39999999999999991 },
12837   { 113.55555555555557, 10.000000000000000, 1.0000000000000000,
12838           2.0000000000000000, 0.50000000000000000 },
12839   { 706.24023437500091, 10.000000000000000, 1.0000000000000000,
12840           2.0000000000000000, 0.60000000000000009 },
12841   { 8064.1687976651992, 10.000000000000000, 1.0000000000000000,
12842           2.0000000000000000, 0.69999999999999996 },
12843   { 271267.22222222196, 10.000000000000000, 1.0000000000000000,
12844           2.0000000000000000, 0.80000000000000004 },
12845   { 123456789.99999890, 10.000000000000000, 1.0000000000000000,
12846           2.0000000000000000, 0.89999999999999991 },
12847 };
12848 
12849 // Test function for a=10.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
12850 template <typename Tp>
test186()12851 void test186()
12852 {
12853   const Tp eps = std::numeric_limits<Tp>::epsilon();
12854   Tp max_abs_diff = -Tp(1);
12855   Tp max_abs_frac = -Tp(1);
12856   unsigned int num_datum = sizeof(data186)
12857                          / sizeof(testcase_hyperg<double>);
12858   for (unsigned int i = 0; i < num_datum; ++i)
12859     {
12860       const Tp f = std::tr1::hyperg(Tp(data186[i].a), Tp(data186[i].b),
12861                    Tp(data186[i].c), Tp(data186[i].x));
12862       const Tp f0 = data186[i].f0;
12863       const Tp diff = f - f0;
12864       if (std::abs(diff) > max_abs_diff)
12865         max_abs_diff = std::abs(diff);
12866       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12867         {
12868           const Tp frac = diff / f0;
12869           if (std::abs(frac) > max_abs_frac)
12870             max_abs_frac = std::abs(frac);
12871         }
12872     }
12873   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12874 }
12875 
12876 // Test data for a=10.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
12877 testcase_hyperg<double> data187[] = {
12878   { 0.28363728383055758, 10.000000000000000, 1.0000000000000000,
12879           4.0000000000000000, -0.90000000000000002 },
12880   { 0.30933003169808387, 10.000000000000000, 1.0000000000000000,
12881           4.0000000000000000, -0.80000000000000004 },
12882   { 0.33998437757128797, 10.000000000000000, 1.0000000000000000,
12883           4.0000000000000000, -0.69999999999999996 },
12884   { 0.37713553224291119, 10.000000000000000, 1.0000000000000000,
12885           4.0000000000000000, -0.59999999999999998 },
12886   { 0.42299736538419658, 10.000000000000000, 1.0000000000000000,
12887           4.0000000000000000, -0.50000000000000000 },
12888   { 0.48086597727600106, 10.000000000000000, 1.0000000000000000,
12889           4.0000000000000000, -0.40000000000000002 },
12890   { 0.55583495759293045, 10.000000000000000, 1.0000000000000000,
12891           4.0000000000000000, -0.30000000000000004 },
12892   { 0.65612850114039667, 10.000000000000000, 1.0000000000000000,
12893           4.0000000000000000, -0.19999999999999996 },
12894   { 0.79573668772968120, 10.000000000000000, 1.0000000000000000,
12895           4.0000000000000000, -0.099999999999999978 },
12896   { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
12897           4.0000000000000000, 0.0000000000000000 },
12898   { 1.3184712058058303, 10.000000000000000, 1.0000000000000000,
12899           4.0000000000000000, 0.10000000000000009 },
12900   { 1.8576958065941214, 10.000000000000000, 1.0000000000000000,
12901           4.0000000000000000, 0.19999999999999996 },
12902   { 2.8759509651764228, 10.000000000000000, 1.0000000000000000,
12903           4.0000000000000000, 0.30000000000000004 },
12904   { 5.1046225531822182, 10.000000000000000, 1.0000000000000000,
12905           4.0000000000000000, 0.39999999999999991 },
12906   { 11.095238095238095, 10.000000000000000, 1.0000000000000000,
12907           4.0000000000000000, 0.50000000000000000 },
12908   { 32.797154017857174, 10.000000000000000, 1.0000000000000000,
12909           4.0000000000000000, 0.60000000000000009 },
12910   { 158.01935680536477, 10.000000000000000, 1.0000000000000000,
12911           4.0000000000000000, 0.69999999999999996 },
12912   { 1815.9523809523814, 10.000000000000000, 1.0000000000000000,
12913           4.0000000000000000, 0.80000000000000004 },
12914   { 163302.14285714156, 10.000000000000000, 1.0000000000000000,
12915           4.0000000000000000, 0.89999999999999991 },
12916 };
12917 
12918 // Test function for a=10.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
12919 template <typename Tp>
test187()12920 void test187()
12921 {
12922   const Tp eps = std::numeric_limits<Tp>::epsilon();
12923   Tp max_abs_diff = -Tp(1);
12924   Tp max_abs_frac = -Tp(1);
12925   unsigned int num_datum = sizeof(data187)
12926                          / sizeof(testcase_hyperg<double>);
12927   for (unsigned int i = 0; i < num_datum; ++i)
12928     {
12929       const Tp f = std::tr1::hyperg(Tp(data187[i].a), Tp(data187[i].b),
12930                    Tp(data187[i].c), Tp(data187[i].x));
12931       const Tp f0 = data187[i].f0;
12932       const Tp diff = f - f0;
12933       if (std::abs(diff) > max_abs_diff)
12934         max_abs_diff = std::abs(diff);
12935       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12936         {
12937           const Tp frac = diff / f0;
12938           if (std::abs(frac) > max_abs_frac)
12939             max_abs_frac = std::abs(frac);
12940         }
12941     }
12942   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12943 }
12944 
12945 // Test data for a=10.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
12946 testcase_hyperg<double> data188[] = {
12947   { 0.39006633302741794, 10.000000000000000, 1.0000000000000000,
12948           6.0000000000000000, -0.90000000000000002 },
12949   { 0.41898885698103294, 10.000000000000000, 1.0000000000000000,
12950           6.0000000000000000, -0.80000000000000004 },
12951   { 0.45245557983812590, 10.000000000000000, 1.0000000000000000,
12952           6.0000000000000000, -0.69999999999999996 },
12953   { 0.49160548618861633, 10.000000000000000, 1.0000000000000000,
12954           6.0000000000000000, -0.59999999999999998 },
12955   { 0.53798419230517980, 10.000000000000000, 1.0000000000000000,
12956           6.0000000000000000, -0.50000000000000000 },
12957   { 0.59373881442067344, 10.000000000000000, 1.0000000000000000,
12958           6.0000000000000000, -0.40000000000000002 },
12959   { 0.66193391357076115, 10.000000000000000, 1.0000000000000000,
12960           6.0000000000000000, -0.30000000000000004 },
12961   { 0.74708402736952129, 10.000000000000000, 1.0000000000000000,
12962           6.0000000000000000, -0.19999999999999996 },
12963   { 0.85609281019430605, 10.000000000000000, 1.0000000000000000,
12964           6.0000000000000000, -0.099999999999999978 },
12965   { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
12966           6.0000000000000000, 0.0000000000000000 },
12967   { 1.1974451135148187, 10.000000000000000, 1.0000000000000000,
12968           6.0000000000000000, 0.10000000000000009 },
12969   { 1.4820886036706347, 10.000000000000000, 1.0000000000000000,
12970           6.0000000000000000, 0.19999999999999996 },
12971   { 1.9201183180477521, 10.000000000000000, 1.0000000000000000,
12972           6.0000000000000000, 0.30000000000000004 },
12973   { 2.6569338297733336, 10.000000000000000, 1.0000000000000000,
12974           6.0000000000000000, 0.39999999999999991 },
12975   { 4.0634920634920650, 10.000000000000000, 1.0000000000000000,
12976           6.0000000000000000, 0.50000000000000000 },
12977   { 7.3102678571428568, 10.000000000000000, 1.0000000000000000,
12978           6.0000000000000000, 0.60000000000000009 },
12979   { 17.512574302697733, 10.000000000000000, 1.0000000000000000,
12980           6.0000000000000000, 0.69999999999999996 },
12981   { 74.206349206349131, 10.000000000000000, 1.0000000000000000,
12982           6.0000000000000000, 0.80000000000000004 },
12983   { 1342.8571428571363, 10.000000000000000, 1.0000000000000000,
12984           6.0000000000000000, 0.89999999999999991 },
12985 };
12986 
12987 // Test function for a=10.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
12988 template <typename Tp>
test188()12989 void test188()
12990 {
12991   const Tp eps = std::numeric_limits<Tp>::epsilon();
12992   Tp max_abs_diff = -Tp(1);
12993   Tp max_abs_frac = -Tp(1);
12994   unsigned int num_datum = sizeof(data188)
12995                          / sizeof(testcase_hyperg<double>);
12996   for (unsigned int i = 0; i < num_datum; ++i)
12997     {
12998       const Tp f = std::tr1::hyperg(Tp(data188[i].a), Tp(data188[i].b),
12999                    Tp(data188[i].c), Tp(data188[i].x));
13000       const Tp f0 = data188[i].f0;
13001       const Tp diff = f - f0;
13002       if (std::abs(diff) > max_abs_diff)
13003         max_abs_diff = std::abs(diff);
13004       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13005         {
13006           const Tp frac = diff / f0;
13007           if (std::abs(frac) > max_abs_frac)
13008             max_abs_frac = std::abs(frac);
13009         }
13010     }
13011   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13012 }
13013 
13014 // Test data for a=10.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
13015 testcase_hyperg<double> data189[] = {
13016   { 0.46726928123633193, 10.000000000000000, 1.0000000000000000,
13017           8.0000000000000000, -0.90000000000000002 },
13018   { 0.49687547629934464, 10.000000000000000, 1.0000000000000000,
13019           8.0000000000000000, -0.80000000000000004 },
13020   { 0.53045208856322235, 10.000000000000000, 1.0000000000000000,
13021           8.0000000000000000, -0.69999999999999996 },
13022   { 0.56884765624999978, 10.000000000000000, 1.0000000000000000,
13023           8.0000000000000000, -0.59999999999999998 },
13024   { 0.61316872427983526, 10.000000000000000, 1.0000000000000000,
13025           8.0000000000000000, -0.50000000000000000 },
13026   { 0.66488500161969544, 10.000000000000000, 1.0000000000000000,
13027           8.0000000000000000, -0.40000000000000002 },
13028   { 0.72598998634501577, 10.000000000000000, 1.0000000000000000,
13029           8.0000000000000000, -0.30000000000000004 },
13030   { 0.79925411522633782, 10.000000000000000, 1.0000000000000000,
13031           8.0000000000000000, -0.19999999999999996 },
13032   { 0.88863845062192193, 10.000000000000000, 1.0000000000000000,
13033           8.0000000000000000, -0.099999999999999978 },
13034   { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
13035           8.0000000000000000, 0.0000000000000000 },
13036   { 1.1423563481176653, 10.000000000000000, 1.0000000000000000,
13037           8.0000000000000000, 0.10000000000000009 },
13038   { 1.3302951388888888, 10.000000000000000, 1.0000000000000000,
13039           8.0000000000000000, 0.19999999999999996 },
13040   { 1.5889212827988335, 10.000000000000000, 1.0000000000000000,
13041           8.0000000000000000, 0.30000000000000004 },
13042   { 1.9650205761316870, 10.000000000000000, 1.0000000000000000,
13043           8.0000000000000000, 0.39999999999999991 },
13044   { 2.5555555555555549, 10.000000000000000, 1.0000000000000000,
13045           8.0000000000000000, 0.50000000000000000 },
13046   { 3.5937500000000013, 10.000000000000000, 1.0000000000000000,
13047           8.0000000000000000, 0.60000000000000009 },
13048   { 5.7818930041152203, 10.000000000000000, 1.0000000000000000,
13049           8.0000000000000000, 0.69999999999999996 },
13050   { 12.222222222222220, 10.000000000000000, 1.0000000000000000,
13051           8.0000000000000000, 0.80000000000000004 },
13052   { 54.999999999999780, 10.000000000000000, 1.0000000000000000,
13053           8.0000000000000000, 0.89999999999999991 },
13054 };
13055 
13056 // Test function for a=10.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
13057 template <typename Tp>
test189()13058 void test189()
13059 {
13060   const Tp eps = std::numeric_limits<Tp>::epsilon();
13061   Tp max_abs_diff = -Tp(1);
13062   Tp max_abs_frac = -Tp(1);
13063   unsigned int num_datum = sizeof(data189)
13064                          / sizeof(testcase_hyperg<double>);
13065   for (unsigned int i = 0; i < num_datum; ++i)
13066     {
13067       const Tp f = std::tr1::hyperg(Tp(data189[i].a), Tp(data189[i].b),
13068                    Tp(data189[i].c), Tp(data189[i].x));
13069       const Tp f0 = data189[i].f0;
13070       const Tp diff = f - f0;
13071       if (std::abs(diff) > max_abs_diff)
13072         max_abs_diff = std::abs(diff);
13073       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13074         {
13075           const Tp frac = diff / f0;
13076           if (std::abs(frac) > max_abs_frac)
13077             max_abs_frac = std::abs(frac);
13078         }
13079     }
13080   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13081 }
13082 
13083 // Test data for a=10.000000000000000, b=1.0000000000000000, c=10.000000000000000.
13084 testcase_hyperg<double> data190[] = {
13085   { 0.52631578947368429, 10.000000000000000, 1.0000000000000000,
13086           10.000000000000000, -0.90000000000000002 },
13087   { 0.55555555555555558, 10.000000000000000, 1.0000000000000000,
13088           10.000000000000000, -0.80000000000000004 },
13089   { 0.58823529411764708, 10.000000000000000, 1.0000000000000000,
13090           10.000000000000000, -0.69999999999999996 },
13091   { 0.62500000000000000, 10.000000000000000, 1.0000000000000000,
13092           10.000000000000000, -0.59999999999999998 },
13093   { 0.66666666666666663, 10.000000000000000, 1.0000000000000000,
13094           10.000000000000000, -0.50000000000000000 },
13095   { 0.71428571428571430, 10.000000000000000, 1.0000000000000000,
13096           10.000000000000000, -0.40000000000000002 },
13097   { 0.76923076923076927, 10.000000000000000, 1.0000000000000000,
13098           10.000000000000000, -0.30000000000000004 },
13099   { 0.83333333333333337, 10.000000000000000, 1.0000000000000000,
13100           10.000000000000000, -0.19999999999999996 },
13101   { 0.90909090909090906, 10.000000000000000, 1.0000000000000000,
13102           10.000000000000000, -0.099999999999999978 },
13103   { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
13104           10.000000000000000, 0.0000000000000000 },
13105   { 1.1111111111111112, 10.000000000000000, 1.0000000000000000,
13106           10.000000000000000, 0.10000000000000009 },
13107   { 1.2500000000000000, 10.000000000000000, 1.0000000000000000,
13108           10.000000000000000, 0.19999999999999996 },
13109   { 1.4285714285714286, 10.000000000000000, 1.0000000000000000,
13110           10.000000000000000, 0.30000000000000004 },
13111   { 1.6666666666666663, 10.000000000000000, 1.0000000000000000,
13112           10.000000000000000, 0.39999999999999991 },
13113   { 2.0000000000000000, 10.000000000000000, 1.0000000000000000,
13114           10.000000000000000, 0.50000000000000000 },
13115   { 2.5000000000000004, 10.000000000000000, 1.0000000000000000,
13116           10.000000000000000, 0.60000000000000009 },
13117   { 3.3333333333333330, 10.000000000000000, 1.0000000000000000,
13118           10.000000000000000, 0.69999999999999996 },
13119   { 5.0000000000000009, 10.000000000000000, 1.0000000000000000,
13120           10.000000000000000, 0.80000000000000004 },
13121   { 9.9999999999999929, 10.000000000000000, 1.0000000000000000,
13122           10.000000000000000, 0.89999999999999991 },
13123 };
13124 
13125 // Test function for a=10.000000000000000, b=1.0000000000000000, c=10.000000000000000.
13126 template <typename Tp>
test190()13127 void test190()
13128 {
13129   const Tp eps = std::numeric_limits<Tp>::epsilon();
13130   Tp max_abs_diff = -Tp(1);
13131   Tp max_abs_frac = -Tp(1);
13132   unsigned int num_datum = sizeof(data190)
13133                          / sizeof(testcase_hyperg<double>);
13134   for (unsigned int i = 0; i < num_datum; ++i)
13135     {
13136       const Tp f = std::tr1::hyperg(Tp(data190[i].a), Tp(data190[i].b),
13137                    Tp(data190[i].c), Tp(data190[i].x));
13138       const Tp f0 = data190[i].f0;
13139       const Tp diff = f - f0;
13140       if (std::abs(diff) > max_abs_diff)
13141         max_abs_diff = std::abs(diff);
13142       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13143         {
13144           const Tp frac = diff / f0;
13145           if (std::abs(frac) > max_abs_frac)
13146             max_abs_frac = std::abs(frac);
13147         }
13148     }
13149   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13150 }
13151 
13152 // Test data for a=10.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
13153 testcase_hyperg<double> data191[] = {
13154   { 0.0016310376661280216, 10.000000000000000, 2.0000000000000000,
13155           2.0000000000000000, -0.90000000000000002 },
13156   { 0.0028007538972582421, 10.000000000000000, 2.0000000000000000,
13157           2.0000000000000000, -0.80000000000000004 },
13158   { 0.0049603324681551939, 10.000000000000000, 2.0000000000000000,
13159           2.0000000000000000, -0.69999999999999996 },
13160   { 0.0090949470177292789, 10.000000000000000, 2.0000000000000000,
13161           2.0000000000000000, -0.59999999999999998 },
13162   { 0.017341529915832606, 10.000000000000000, 2.0000000000000000,
13163           2.0000000000000000, -0.50000000000000000 },
13164   { 0.034571613033607777, 10.000000000000000, 2.0000000000000000,
13165           2.0000000000000000, -0.40000000000000002 },
13166   { 0.072538150286405714, 10.000000000000000, 2.0000000000000000,
13167           2.0000000000000000, -0.30000000000000004 },
13168   { 0.16150558288984579, 10.000000000000000, 2.0000000000000000,
13169           2.0000000000000000, -0.19999999999999996 },
13170   { 0.38554328942953148, 10.000000000000000, 2.0000000000000000,
13171           2.0000000000000000, -0.099999999999999978 },
13172   { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
13173           2.0000000000000000, 0.0000000000000000 },
13174   { 2.8679719907924444, 10.000000000000000, 2.0000000000000000,
13175           2.0000000000000000, 0.10000000000000009 },
13176   { 9.3132257461547816, 10.000000000000000, 2.0000000000000000,
13177           2.0000000000000000, 0.19999999999999996 },
13178   { 35.401331746414378, 10.000000000000000, 2.0000000000000000,
13179           2.0000000000000000, 0.30000000000000004 },
13180   { 165.38171687920172, 10.000000000000000, 2.0000000000000000,
13181           2.0000000000000000, 0.39999999999999991 },
13182   { 1024.0000000000000, 10.000000000000000, 2.0000000000000000,
13183           2.0000000000000000, 0.50000000000000000 },
13184   { 9536.7431640625200, 10.000000000000000, 2.0000000000000000,
13185           2.0000000000000000, 0.60000000000000009 },
13186   { 169350.87808430271, 10.000000000000000, 2.0000000000000000,
13187           2.0000000000000000, 0.69999999999999996 },
13188   { 9765624.9999999944, 10.000000000000000, 2.0000000000000000,
13189           2.0000000000000000, 0.80000000000000004 },
13190   { 9999999999.9999332, 10.000000000000000, 2.0000000000000000,
13191           2.0000000000000000, 0.89999999999999991 },
13192 };
13193 
13194 // Test function for a=10.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
13195 template <typename Tp>
test191()13196 void test191()
13197 {
13198   const Tp eps = std::numeric_limits<Tp>::epsilon();
13199   Tp max_abs_diff = -Tp(1);
13200   Tp max_abs_frac = -Tp(1);
13201   unsigned int num_datum = sizeof(data191)
13202                          / sizeof(testcase_hyperg<double>);
13203   for (unsigned int i = 0; i < num_datum; ++i)
13204     {
13205       const Tp f = std::tr1::hyperg(Tp(data191[i].a), Tp(data191[i].b),
13206                    Tp(data191[i].c), Tp(data191[i].x));
13207       const Tp f0 = data191[i].f0;
13208       const Tp diff = f - f0;
13209       if (std::abs(diff) > max_abs_diff)
13210         max_abs_diff = std::abs(diff);
13211       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13212         {
13213           const Tp frac = diff / f0;
13214           if (std::abs(frac) > max_abs_frac)
13215             max_abs_frac = std::abs(frac);
13216         }
13217     }
13218   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13219 }
13220 
13221 // Test data for a=10.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
13222 testcase_hyperg<double> data192[] = {
13223   { 0.071191280690193509, 10.000000000000000, 2.0000000000000000,
13224           4.0000000000000000, -0.90000000000000002 },
13225   { 0.085646504654238079, 10.000000000000000, 2.0000000000000000,
13226           4.0000000000000000, -0.80000000000000004 },
13227   { 0.10478215656371073, 10.000000000000000, 2.0000000000000000,
13228           4.0000000000000000, -0.69999999999999996 },
13229   { 0.13074816337653575, 10.000000000000000, 2.0000000000000000,
13230           4.0000000000000000, -0.59999999999999998 },
13231   { 0.16701141666848116, 10.000000000000000, 2.0000000000000000,
13232           4.0000000000000000, -0.50000000000000000 },
13233   { 0.21939323375313971, 10.000000000000000, 2.0000000000000000,
13234           4.0000000000000000, -0.40000000000000002 },
13235   { 0.29813515331786627, 10.000000000000000, 2.0000000000000000,
13236           4.0000000000000000, -0.30000000000000004 },
13237   { 0.42225974638874386, 10.000000000000000, 2.0000000000000000,
13238           4.0000000000000000, -0.19999999999999996 },
13239   { 0.62942145962174867, 10.000000000000000, 2.0000000000000000,
13240           4.0000000000000000, -0.099999999999999978 },
13241   { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
13242           4.0000000000000000, 0.0000000000000000 },
13243   { 1.7218685262373197, 10.000000000000000, 2.0000000000000000,
13244           4.0000000000000000, 0.10000000000000009 },
13245   { 3.2855760483514689, 10.000000000000000, 2.0000000000000000,
13246           4.0000000000000000, 0.19999999999999996 },
13247   { 7.1616652508907093, 10.000000000000000, 2.0000000000000000,
13248           4.0000000000000000, 0.30000000000000004 },
13249   { 18.612326808485907, 10.000000000000000, 2.0000000000000000,
13250           4.0000000000000000, 0.39999999999999991 },
13251   { 61.476190476190474, 10.000000000000000, 2.0000000000000000,
13252           4.0000000000000000, 0.50000000000000000 },
13253   { 286.27580915178623, 10.000000000000000, 2.0000000000000000,
13254           4.0000000000000000, 0.60000000000000009 },
13255   { 2274.9441142102296, 10.000000000000000, 2.0000000000000000,
13256           4.0000000000000000, 0.69999999999999996 },
13257   { 47229.761904761865, 10.000000000000000, 2.0000000000000000,
13258           4.0000000000000000, 0.80000000000000004 },
13259   { 9961460.7142856438, 10.000000000000000, 2.0000000000000000,
13260           4.0000000000000000, 0.89999999999999991 },
13261 };
13262 
13263 // Test function for a=10.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
13264 template <typename Tp>
test192()13265 void test192()
13266 {
13267   const Tp eps = std::numeric_limits<Tp>::epsilon();
13268   Tp max_abs_diff = -Tp(1);
13269   Tp max_abs_frac = -Tp(1);
13270   unsigned int num_datum = sizeof(data192)
13271                          / sizeof(testcase_hyperg<double>);
13272   for (unsigned int i = 0; i < num_datum; ++i)
13273     {
13274       const Tp f = std::tr1::hyperg(Tp(data192[i].a), Tp(data192[i].b),
13275                    Tp(data192[i].c), Tp(data192[i].x));
13276       const Tp f0 = data192[i].f0;
13277       const Tp diff = f - f0;
13278       if (std::abs(diff) > max_abs_diff)
13279         max_abs_diff = std::abs(diff);
13280       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13281         {
13282           const Tp frac = diff / f0;
13283           if (std::abs(frac) > max_abs_frac)
13284             max_abs_frac = std::abs(frac);
13285         }
13286     }
13287   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13288 }
13289 
13290 // Test data for a=10.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
13291 testcase_hyperg<double> data193[] = {
13292   { 0.14747230019381052, 10.000000000000000, 2.0000000000000000,
13293           6.0000000000000000, -0.90000000000000002 },
13294   { 0.17073600100690603, 10.000000000000000, 2.0000000000000000,
13295           6.0000000000000000, -0.80000000000000004 },
13296   { 0.19982795745135354, 10.000000000000000, 2.0000000000000000,
13297           6.0000000000000000, -0.69999999999999996 },
13298   { 0.23681776864188067, 10.000000000000000, 2.0000000000000000,
13299           6.0000000000000000, -0.59999999999999998 },
13300   { 0.28475624360398022, 10.000000000000000, 2.0000000000000000,
13301           6.0000000000000000, -0.50000000000000000 },
13302   { 0.34827500743063144, 10.000000000000000, 2.0000000000000000,
13303           6.0000000000000000, -0.40000000000000002 },
13304   { 0.43464829159684681, 10.000000000000000, 2.0000000000000000,
13305           6.0000000000000000, -0.30000000000000004 },
13306   { 0.55576053438064787, 10.000000000000000, 2.0000000000000000,
13307           6.0000000000000000, -0.19999999999999996 },
13308   { 0.73195020913445485, 10.000000000000000, 2.0000000000000000,
13309           6.0000000000000000, -0.099999999999999978 },
13310   { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
13311           6.0000000000000000, 0.0000000000000000 },
13312   { 1.4310223867822929, 10.000000000000000, 2.0000000000000000,
13313           6.0000000000000000, 0.10000000000000009 },
13314   { 2.1742563399057540, 10.000000000000000, 2.0000000000000000,
13315           6.0000000000000000, 0.19999999999999996 },
13316   { 3.5769231236256043, 10.000000000000000, 2.0000000000000000,
13317           6.0000000000000000, 0.30000000000000004 },
13318   { 6.5620441134844363, 10.000000000000000, 2.0000000000000000,
13319           6.0000000000000000, 0.39999999999999991 },
13320   { 14.063492063492063, 10.000000000000000, 2.0000000000000000,
13321           6.0000000000000000, 0.50000000000000000 },
13322   { 38.085937500000036, 10.000000000000000, 2.0000000000000000,
13323           6.0000000000000000, 0.60000000000000009 },
13324   { 150.92973632068282, 10.000000000000000, 2.0000000000000000,
13325           6.0000000000000000, 0.69999999999999996 },
13326   { 1212.3015873015852, 10.000000000000000, 2.0000000000000000,
13327           6.0000000000000000, 0.80000000000000004 },
13328   { 55107.142857142389, 10.000000000000000, 2.0000000000000000,
13329           6.0000000000000000, 0.89999999999999991 },
13330 };
13331 
13332 // Test function for a=10.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
13333 template <typename Tp>
test193()13334 void test193()
13335 {
13336   const Tp eps = std::numeric_limits<Tp>::epsilon();
13337   Tp max_abs_diff = -Tp(1);
13338   Tp max_abs_frac = -Tp(1);
13339   unsigned int num_datum = sizeof(data193)
13340                          / sizeof(testcase_hyperg<double>);
13341   for (unsigned int i = 0; i < num_datum; ++i)
13342     {
13343       const Tp f = std::tr1::hyperg(Tp(data193[i].a), Tp(data193[i].b),
13344                    Tp(data193[i].c), Tp(data193[i].x));
13345       const Tp f0 = data193[i].f0;
13346       const Tp diff = f - f0;
13347       if (std::abs(diff) > max_abs_diff)
13348         max_abs_diff = std::abs(diff);
13349       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13350         {
13351           const Tp frac = diff / f0;
13352           if (std::abs(frac) > max_abs_frac)
13353             max_abs_frac = std::abs(frac);
13354         }
13355     }
13356   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13357 }
13358 
13359 // Test data for a=10.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
13360 testcase_hyperg<double> data194[] = {
13361   { 0.21658059714090588, 10.000000000000000, 2.0000000000000000,
13362           8.0000000000000000, -0.90000000000000002 },
13363   { 0.24513539602702844, 10.000000000000000, 2.0000000000000000,
13364           8.0000000000000000, -0.80000000000000004 },
13365   { 0.27967018274845046, 10.000000000000000, 2.0000000000000000,
13366           8.0000000000000000, -0.69999999999999996 },
13367   { 0.32196044921874994, 10.000000000000000, 2.0000000000000000,
13368           8.0000000000000000, -0.59999999999999998 },
13369   { 0.37448559670781900, 10.000000000000000, 2.0000000000000000,
13370           8.0000000000000000, -0.50000000000000000 },
13371   { 0.44078856032208796, 10.000000000000000, 2.0000000000000000,
13372           8.0000000000000000, -0.40000000000000002 },
13373   { 0.52606701446027815, 10.000000000000000, 2.0000000000000000,
13374           8.0000000000000000, -0.30000000000000004 },
13375   { 0.63818158436214001, 10.000000000000000, 2.0000000000000000,
13376           8.0000000000000000, -0.19999999999999996 },
13377   { 0.78944971882612769, 10.000000000000000, 2.0000000000000000,
13378           8.0000000000000000, -0.099999999999999978 },
13379   { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
13380           8.0000000000000000, 0.0000000000000000 },
13381   { 1.3044251384443430, 10.000000000000000, 2.0000000000000000,
13382           8.0000000000000000, 0.10000000000000009 },
13383   { 1.7659505208333335, 10.000000000000000, 2.0000000000000000,
13384           8.0000000000000000, 0.19999999999999996 },
13385   { 2.5093710953769270, 10.000000000000000, 2.0000000000000000,
13386           8.0000000000000000, 0.30000000000000004 },
13387   { 3.8065843621399158, 10.000000000000000, 2.0000000000000000,
13388           8.0000000000000000, 0.39999999999999991 },
13389   { 6.3333333333333313, 10.000000000000000, 2.0000000000000000,
13390           8.0000000000000000, 0.50000000000000000 },
13391   { 12.109375000000004, 10.000000000000000, 2.0000000000000000,
13392           8.0000000000000000, 0.60000000000000009 },
13393   { 29.115226337448540, 10.000000000000000, 2.0000000000000000,
13394           8.0000000000000000, 0.69999999999999996 },
13395   { 108.33333333333330, 10.000000000000000, 2.0000000000000000,
13396           8.0000000000000000, 0.80000000000000004 },
13397   { 1224.9999999999923, 10.000000000000000, 2.0000000000000000,
13398           8.0000000000000000, 0.89999999999999991 },
13399 };
13400 
13401 // Test function for a=10.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
13402 template <typename Tp>
test194()13403 void test194()
13404 {
13405   const Tp eps = std::numeric_limits<Tp>::epsilon();
13406   Tp max_abs_diff = -Tp(1);
13407   Tp max_abs_frac = -Tp(1);
13408   unsigned int num_datum = sizeof(data194)
13409                          / sizeof(testcase_hyperg<double>);
13410   for (unsigned int i = 0; i < num_datum; ++i)
13411     {
13412       const Tp f = std::tr1::hyperg(Tp(data194[i].a), Tp(data194[i].b),
13413                    Tp(data194[i].c), Tp(data194[i].x));
13414       const Tp f0 = data194[i].f0;
13415       const Tp diff = f - f0;
13416       if (std::abs(diff) > max_abs_diff)
13417         max_abs_diff = std::abs(diff);
13418       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13419         {
13420           const Tp frac = diff / f0;
13421           if (std::abs(frac) > max_abs_frac)
13422             max_abs_frac = std::abs(frac);
13423         }
13424     }
13425   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13426 }
13427 
13428 // Test data for a=10.000000000000000, b=2.0000000000000000, c=10.000000000000000.
13429 testcase_hyperg<double> data195[] = {
13430   { 0.27700831024930750, 10.000000000000000, 2.0000000000000000,
13431           10.000000000000000, -0.90000000000000002 },
13432   { 0.30864197530864196, 10.000000000000000, 2.0000000000000000,
13433           10.000000000000000, -0.80000000000000004 },
13434   { 0.34602076124567477, 10.000000000000000, 2.0000000000000000,
13435           10.000000000000000, -0.69999999999999996 },
13436   { 0.39062499999999994, 10.000000000000000, 2.0000000000000000,
13437           10.000000000000000, -0.59999999999999998 },
13438   { 0.44444444444444442, 10.000000000000000, 2.0000000000000000,
13439           10.000000000000000, -0.50000000000000000 },
13440   { 0.51020408163265307, 10.000000000000000, 2.0000000000000000,
13441           10.000000000000000, -0.40000000000000002 },
13442   { 0.59171597633136097, 10.000000000000000, 2.0000000000000000,
13443           10.000000000000000, -0.30000000000000004 },
13444   { 0.69444444444444453, 10.000000000000000, 2.0000000000000000,
13445           10.000000000000000, -0.19999999999999996 },
13446   { 0.82644628099173545, 10.000000000000000, 2.0000000000000000,
13447           10.000000000000000, -0.099999999999999978 },
13448   { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
13449           10.000000000000000, 0.0000000000000000 },
13450   { 1.2345679012345681, 10.000000000000000, 2.0000000000000000,
13451           10.000000000000000, 0.10000000000000009 },
13452   { 1.5624999999999998, 10.000000000000000, 2.0000000000000000,
13453           10.000000000000000, 0.19999999999999996 },
13454   { 2.0408163265306127, 10.000000000000000, 2.0000000000000000,
13455           10.000000000000000, 0.30000000000000004 },
13456   { 2.7777777777777768, 10.000000000000000, 2.0000000000000000,
13457           10.000000000000000, 0.39999999999999991 },
13458   { 4.0000000000000000, 10.000000000000000, 2.0000000000000000,
13459           10.000000000000000, 0.50000000000000000 },
13460   { 6.2500000000000036, 10.000000000000000, 2.0000000000000000,
13461           10.000000000000000, 0.60000000000000009 },
13462   { 11.111111111111109, 10.000000000000000, 2.0000000000000000,
13463           10.000000000000000, 0.69999999999999996 },
13464   { 25.000000000000007, 10.000000000000000, 2.0000000000000000,
13465           10.000000000000000, 0.80000000000000004 },
13466   { 99.999999999999872, 10.000000000000000, 2.0000000000000000,
13467           10.000000000000000, 0.89999999999999991 },
13468 };
13469 
13470 // Test function for a=10.000000000000000, b=2.0000000000000000, c=10.000000000000000.
13471 template <typename Tp>
test195()13472 void test195()
13473 {
13474   const Tp eps = std::numeric_limits<Tp>::epsilon();
13475   Tp max_abs_diff = -Tp(1);
13476   Tp max_abs_frac = -Tp(1);
13477   unsigned int num_datum = sizeof(data195)
13478                          / sizeof(testcase_hyperg<double>);
13479   for (unsigned int i = 0; i < num_datum; ++i)
13480     {
13481       const Tp f = std::tr1::hyperg(Tp(data195[i].a), Tp(data195[i].b),
13482                    Tp(data195[i].c), Tp(data195[i].x));
13483       const Tp f0 = data195[i].f0;
13484       const Tp diff = f - f0;
13485       if (std::abs(diff) > max_abs_diff)
13486         max_abs_diff = std::abs(diff);
13487       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13488         {
13489           const Tp frac = diff / f0;
13490           if (std::abs(frac) > max_abs_frac)
13491             max_abs_frac = std::abs(frac);
13492         }
13493     }
13494   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13495 }
13496 
13497 // Test data for a=10.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
13498 testcase_hyperg<double> data196[] = {
13499   { 0.00063586451658060152, 10.000000000000000, 5.0000000000000000,
13500           2.0000000000000000, -0.90000000000000002 },
13501   { 0.0010334743461762443, 10.000000000000000, 5.0000000000000000,
13502           2.0000000000000000, -0.80000000000000004 },
13503   { 0.0015326246054669515, 10.000000000000000, 5.0000000000000000,
13504           2.0000000000000000, -0.69999999999999996 },
13505   { 0.0019007018181583387, 10.000000000000000, 5.0000000000000000,
13506           2.0000000000000000, -0.59999999999999998 },
13507   { 0.0012845577715431577, 10.000000000000000, 5.0000000000000000,
13508           2.0000000000000000, -0.50000000000000000 },
13509   { -0.0027213806178058826, 10.000000000000000, 5.0000000000000000,
13510           2.0000000000000000, -0.40000000000000002 },
13511   { -0.015121744574954068, 10.000000000000000, 5.0000000000000000,
13512           2.0000000000000000, -0.30000000000000004 },
13513   { -0.036637840562974443, 10.000000000000000, 5.0000000000000000,
13514           2.0000000000000000, -0.19999999999999996 },
13515   { 0.019117849062621491, 10.000000000000000, 5.0000000000000000,
13516           2.0000000000000000, -0.099999999999999978 },
13517   { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
13518           2.0000000000000000, 0.0000000000000000 },
13519   { 9.8116901852350615, 10.000000000000000, 5.0000000000000000,
13520           2.0000000000000000, 0.10000000000000009 },
13521   { 84.255589172244044, 10.000000000000000, 5.0000000000000000,
13522           2.0000000000000000, 0.19999999999999996 },
13523   { 773.87517619421294, 10.000000000000000, 5.0000000000000000,
13524           2.0000000000000000, 0.30000000000000004 },
13525   { 8556.9725363053585, 10.000000000000000, 5.0000000000000000,
13526           2.0000000000000000, 0.39999999999999991 },
13527   { 129023.99999999996, 10.000000000000000, 5.0000000000000000,
13528           2.0000000000000000, 0.50000000000000000 },
13529   { 3174543.3807373112, 10.000000000000000, 5.0000000000000000,
13530           2.0000000000000000, 0.60000000000000009 },
13531   { 175133896.95814410, 10.000000000000000, 5.0000000000000000,
13532           2.0000000000000000, 0.69999999999999996 },
13533   { 43564453125.000061, 10.000000000000000, 5.0000000000000000,
13534           2.0000000000000000, 0.80000000000000004 },
13535   { 446859999999993.50, 10.000000000000000, 5.0000000000000000,
13536           2.0000000000000000, 0.89999999999999991 },
13537 };
13538 
13539 // Test function for a=10.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
13540 template <typename Tp>
test196()13541 void test196()
13542 {
13543   const Tp eps = std::numeric_limits<Tp>::epsilon();
13544   Tp max_abs_diff = -Tp(1);
13545   Tp max_abs_frac = -Tp(1);
13546   unsigned int num_datum = sizeof(data196)
13547                          / sizeof(testcase_hyperg<double>);
13548   for (unsigned int i = 0; i < num_datum; ++i)
13549     {
13550       const Tp f = std::tr1::hyperg(Tp(data196[i].a), Tp(data196[i].b),
13551                    Tp(data196[i].c), Tp(data196[i].x));
13552       const Tp f0 = data196[i].f0;
13553       const Tp diff = f - f0;
13554       if (std::abs(diff) > max_abs_diff)
13555         max_abs_diff = std::abs(diff);
13556       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13557         {
13558           const Tp frac = diff / f0;
13559           if (std::abs(frac) > max_abs_frac)
13560             max_abs_frac = std::abs(frac);
13561         }
13562     }
13563   VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
13564 }
13565 
13566 // Test data for a=10.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
13567 testcase_hyperg<double> data197[] = {
13568   { -0.00030045430691819899, 10.000000000000000, 5.0000000000000000,
13569           4.0000000000000000, -0.90000000000000002 },
13570   { -0.00031119487747328581, 10.000000000000000, 5.0000000000000000,
13571           4.0000000000000000, -0.80000000000000004 },
13572   { -0.00014589213141649274, 10.000000000000000, 5.0000000000000000,
13573           4.0000000000000000, -0.69999999999999996 },
13574   { 0.00056843418860809121, 10.000000000000000, 5.0000000000000000,
13575           4.0000000000000000, -0.59999999999999998 },
13576   { 0.0028902549859721725, 10.000000000000000, 5.0000000000000000,
13577           4.0000000000000000, -0.50000000000000000 },
13578   { 0.0098776037238877470, 10.000000000000000, 5.0000000000000000,
13579           4.0000000000000000, -0.40000000000000002 },
13580   { 0.030689217428863914, 10.000000000000000, 5.0000000000000000,
13581           4.0000000000000000, -0.30000000000000004 },
13582   { 0.094211590019076599, 10.000000000000000, 5.0000000000000000,
13583           4.0000000000000000, -0.19999999999999996 },
13584   { 0.29791981455918376, 10.000000000000000, 5.0000000000000000,
13585           4.0000000000000000, -0.099999999999999978 },
13586   { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
13587           4.0000000000000000, 0.0000000000000000 },
13588   { 3.6646308771236793, 10.000000000000000, 5.0000000000000000,
13589           4.0000000000000000, 0.10000000000000009 },
13590   { 15.133991837501521, 10.000000000000000, 5.0000000000000000,
13591           4.0000000000000000, 0.19999999999999996 },
13592   { 73.331330046144089, 10.000000000000000, 5.0000000000000000,
13593           4.0000000000000000, 0.30000000000000004 },
13594   { 441.01791167787133, 10.000000000000000, 5.0000000000000000,
13595           4.0000000000000000, 0.39999999999999991 },
13596   { 3583.9999999999991, 10.000000000000000, 5.0000000000000000,
13597           4.0000000000000000, 0.50000000000000000 },
13598   { 45299.530029296984, 10.000000000000000, 5.0000000000000000,
13599           4.0000000000000000, 0.60000000000000009 },
13600   { 1157231.0002427341, 10.000000000000000, 5.0000000000000000,
13601           4.0000000000000000, 0.69999999999999996 },
13602   { 107421875.00000016, 10.000000000000000, 5.0000000000000000,
13603           4.0000000000000000, 0.80000000000000004 },
13604   { 234999999999.99734, 10.000000000000000, 5.0000000000000000,
13605           4.0000000000000000, 0.89999999999999991 },
13606 };
13607 
13608 // Test function for a=10.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
13609 template <typename Tp>
test197()13610 void test197()
13611 {
13612   const Tp eps = std::numeric_limits<Tp>::epsilon();
13613   Tp max_abs_diff = -Tp(1);
13614   Tp max_abs_frac = -Tp(1);
13615   unsigned int num_datum = sizeof(data197)
13616                          / sizeof(testcase_hyperg<double>);
13617   for (unsigned int i = 0; i < num_datum; ++i)
13618     {
13619       const Tp f = std::tr1::hyperg(Tp(data197[i].a), Tp(data197[i].b),
13620                    Tp(data197[i].c), Tp(data197[i].x));
13621       const Tp f0 = data197[i].f0;
13622       const Tp diff = f - f0;
13623       if (std::abs(diff) > max_abs_diff)
13624         max_abs_diff = std::abs(diff);
13625       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13626         {
13627           const Tp frac = diff / f0;
13628           if (std::abs(frac) > max_abs_frac)
13629             max_abs_frac = std::abs(frac);
13630         }
13631     }
13632   VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
13633 }
13634 
13635 // Test data for a=10.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
13636 testcase_hyperg<double> data198[] = {
13637   { 0.0058530497315411210, 10.000000000000000, 5.0000000000000000,
13638           6.0000000000000000, -0.90000000000000002 },
13639   { 0.0088526869356855692, 10.000000000000000, 5.0000000000000000,
13640           6.0000000000000000, -0.80000000000000004 },
13641   { 0.013770987983443108, 10.000000000000000, 5.0000000000000000,
13642           6.0000000000000000, -0.69999999999999996 },
13643   { 0.022108932690960800, 10.000000000000000, 5.0000000000000000,
13644           6.0000000000000000, -0.59999999999999998 },
13645   { 0.036786236450921578, 10.000000000000000, 5.0000000000000000,
13646           6.0000000000000000, -0.50000000000000000 },
13647   { 0.063750669040426422, 10.000000000000000, 5.0000000000000000,
13648           6.0000000000000000, -0.40000000000000002 },
13649   { 0.11577228680714464, 10.000000000000000, 5.0000000000000000,
13650           6.0000000000000000, -0.30000000000000004 },
13651   { 0.22197573416125735, 10.000000000000000, 5.0000000000000000,
13652           6.0000000000000000, -0.19999999999999996 },
13653   { 0.45361312968415268, 10.000000000000000, 5.0000000000000000,
13654           6.0000000000000000, -0.099999999999999978 },
13655   { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
13656           6.0000000000000000, 0.0000000000000000 },
13657   { 2.4162889363082747, 10.000000000000000, 5.0000000000000000,
13658           6.0000000000000000, 0.10000000000000009 },
13659   { 6.5381564791240399, 10.000000000000000, 5.0000000000000000,
13660           6.0000000000000000, 0.19999999999999996 },
13661   { 20.415771011498428, 10.000000000000000, 5.0000000000000000,
13662           6.0000000000000000, 0.30000000000000004 },
13663   { 76.870682056629221, 10.000000000000000, 5.0000000000000000,
13664           6.0000000000000000, 0.39999999999999991 },
13665   { 373.58730158730162, 10.000000000000000, 5.0000000000000000,
13666           6.0000000000000000, 0.50000000000000000 },
13667   { 2626.2555803571477, 10.000000000000000, 5.0000000000000000,
13668           6.0000000000000000, 0.60000000000000009 },
13669   { 33060.960671081048, 10.000000000000000, 5.0000000000000000,
13670           6.0000000000000000, 0.69999999999999996 },
13671   { 1203521.8253968258, 10.000000000000000, 5.0000000000000000,
13672           6.0000000000000000, 0.80000000000000004 },
13673   { 584564285.71427989, 10.000000000000000, 5.0000000000000000,
13674           6.0000000000000000, 0.89999999999999991 },
13675 };
13676 
13677 // Test function for a=10.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
13678 template <typename Tp>
test198()13679 void test198()
13680 {
13681   const Tp eps = std::numeric_limits<Tp>::epsilon();
13682   Tp max_abs_diff = -Tp(1);
13683   Tp max_abs_frac = -Tp(1);
13684   unsigned int num_datum = sizeof(data198)
13685                          / sizeof(testcase_hyperg<double>);
13686   for (unsigned int i = 0; i < num_datum; ++i)
13687     {
13688       const Tp f = std::tr1::hyperg(Tp(data198[i].a), Tp(data198[i].b),
13689                    Tp(data198[i].c), Tp(data198[i].x));
13690       const Tp f0 = data198[i].f0;
13691       const Tp diff = f - f0;
13692       if (std::abs(diff) > max_abs_diff)
13693         max_abs_diff = std::abs(diff);
13694       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13695         {
13696           const Tp frac = diff / f0;
13697           if (std::abs(frac) > max_abs_frac)
13698             max_abs_frac = std::abs(frac);
13699         }
13700     }
13701   VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
13702 }
13703 
13704 // Test data for a=10.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
13705 testcase_hyperg<double> data199[] = {
13706   { 0.020248990107069400, 10.000000000000000, 5.0000000000000000,
13707           8.0000000000000000, -0.90000000000000002 },
13708   { 0.027876687750502421, 10.000000000000000, 5.0000000000000000,
13709           8.0000000000000000, -0.80000000000000004 },
13710   { 0.039154648888447781, 10.000000000000000, 5.0000000000000000,
13711           8.0000000000000000, -0.69999999999999996 },
13712   { 0.056251883506774923, 10.000000000000000, 5.0000000000000000,
13713           8.0000000000000000, -0.59999999999999998 },
13714   { 0.082914189910074432, 10.000000000000000, 5.0000000000000000,
13715           8.0000000000000000, -0.50000000000000000 },
13716   { 0.12585357817786477, 10.000000000000000, 5.0000000000000000,
13717           8.0000000000000000, -0.40000000000000002 },
13718   { 0.19761423206224929, 10.000000000000000, 5.0000000000000000,
13719           8.0000000000000000, -0.30000000000000004 },
13720   { 0.32280443863359243, 10.000000000000000, 5.0000000000000000,
13721           8.0000000000000000, -0.19999999999999996 },
13722   { 0.55250024062839465, 10.000000000000000, 5.0000000000000000,
13723           8.0000000000000000, -0.099999999999999978 },
13724   { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
13725           8.0000000000000000, 0.0000000000000000 },
13726   { 1.9374297986599267, 10.000000000000000, 5.0000000000000000,
13727           8.0000000000000000, 0.10000000000000009 },
13728   { 4.0849049886067696, 10.000000000000000, 5.0000000000000000,
13729           8.0000000000000000, 0.19999999999999996 },
13730   { 9.5926988633258983, 10.000000000000000, 5.0000000000000000,
13731           8.0000000000000000, 0.30000000000000004 },
13732   { 25.958314281359531, 10.000000000000000, 5.0000000000000000,
13733           8.0000000000000000, 0.39999999999999991 },
13734   { 85.333333333333300, 10.000000000000000, 5.0000000000000000,
13735           8.0000000000000000, 0.50000000000000000 },
13736   { 372.31445312500028, 10.000000000000000, 5.0000000000000000,
13737           8.0000000000000000, 0.60000000000000009 },
13738   { 2545.3436976070675, 10.000000000000000, 5.0000000000000000,
13739           8.0000000000000000, 0.69999999999999996 },
13740   { 39583.333333333343, 10.000000000000000, 5.0000000000000000,
13741           8.0000000000000000, 0.80000000000000004 },
13742   { 4599999.9999999627, 10.000000000000000, 5.0000000000000000,
13743           8.0000000000000000, 0.89999999999999991 },
13744 };
13745 
13746 // Test function for a=10.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
13747 template <typename Tp>
test199()13748 void test199()
13749 {
13750   const Tp eps = std::numeric_limits<Tp>::epsilon();
13751   Tp max_abs_diff = -Tp(1);
13752   Tp max_abs_frac = -Tp(1);
13753   unsigned int num_datum = sizeof(data199)
13754                          / sizeof(testcase_hyperg<double>);
13755   for (unsigned int i = 0; i < num_datum; ++i)
13756     {
13757       const Tp f = std::tr1::hyperg(Tp(data199[i].a), Tp(data199[i].b),
13758                    Tp(data199[i].c), Tp(data199[i].x));
13759       const Tp f0 = data199[i].f0;
13760       const Tp diff = f - f0;
13761       if (std::abs(diff) > max_abs_diff)
13762         max_abs_diff = std::abs(diff);
13763       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13764         {
13765           const Tp frac = diff / f0;
13766           if (std::abs(frac) > max_abs_frac)
13767             max_abs_frac = std::abs(frac);
13768         }
13769     }
13770   VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
13771 }
13772 
13773 // Test data for a=10.000000000000000, b=5.0000000000000000, c=10.000000000000000.
13774 testcase_hyperg<double> data200[] = {
13775   { 0.040386107340619266, 10.000000000000000, 5.0000000000000000,
13776           10.000000000000000, -0.90000000000000002 },
13777   { 0.052922149401344633, 10.000000000000000, 5.0000000000000000,
13778           10.000000000000000, -0.80000000000000004 },
13779   { 0.070429627772374270, 10.000000000000000, 5.0000000000000000,
13780           10.000000000000000, -0.69999999999999996 },
13781   { 0.095367431640624972, 10.000000000000000, 5.0000000000000000,
13782           10.000000000000000, -0.59999999999999998 },
13783   { 0.13168724279835387, 10.000000000000000, 5.0000000000000000,
13784           10.000000000000000, -0.50000000000000000 },
13785   { 0.18593443208187066, 10.000000000000000, 5.0000000000000000,
13786           10.000000000000000, -0.40000000000000002 },
13787   { 0.26932907434290437, 10.000000000000000, 5.0000000000000000,
13788           10.000000000000000, -0.30000000000000004 },
13789   { 0.40187757201646096, 10.000000000000000, 5.0000000000000000,
13790           10.000000000000000, -0.19999999999999996 },
13791   { 0.62092132305915493, 10.000000000000000, 5.0000000000000000,
13792           10.000000000000000, -0.099999999999999978 },
13793   { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
13794           10.000000000000000, 0.0000000000000000 },
13795   { 1.6935087808430296, 10.000000000000000, 5.0000000000000000,
13796           10.000000000000000, 0.10000000000000009 },
13797   { 3.0517578124999991, 10.000000000000000, 5.0000000000000000,
13798           10.000000000000000, 0.19999999999999996 },
13799   { 5.9499018266198629, 10.000000000000000, 5.0000000000000000,
13800           10.000000000000000, 0.30000000000000004 },
13801   { 12.860082304526737, 10.000000000000000, 5.0000000000000000,
13802           10.000000000000000, 0.39999999999999991 },
13803   { 32.000000000000000, 10.000000000000000, 5.0000000000000000,
13804           10.000000000000000, 0.50000000000000000 },
13805   { 97.656250000000114, 10.000000000000000, 5.0000000000000000,
13806           10.000000000000000, 0.60000000000000009 },
13807   { 411.52263374485580, 10.000000000000000, 5.0000000000000000,
13808           10.000000000000000, 0.69999999999999996 },
13809   { 3124.9999999999991, 10.000000000000000, 5.0000000000000000,
13810           10.000000000000000, 0.80000000000000004 },
13811   { 99999.999999999665, 10.000000000000000, 5.0000000000000000,
13812           10.000000000000000, 0.89999999999999991 },
13813 };
13814 
13815 // Test function for a=10.000000000000000, b=5.0000000000000000, c=10.000000000000000.
13816 template <typename Tp>
test200()13817 void test200()
13818 {
13819   const Tp eps = std::numeric_limits<Tp>::epsilon();
13820   Tp max_abs_diff = -Tp(1);
13821   Tp max_abs_frac = -Tp(1);
13822   unsigned int num_datum = sizeof(data200)
13823                          / sizeof(testcase_hyperg<double>);
13824   for (unsigned int i = 0; i < num_datum; ++i)
13825     {
13826       const Tp f = std::tr1::hyperg(Tp(data200[i].a), Tp(data200[i].b),
13827                    Tp(data200[i].c), Tp(data200[i].x));
13828       const Tp f0 = data200[i].f0;
13829       const Tp diff = f - f0;
13830       if (std::abs(diff) > max_abs_diff)
13831         max_abs_diff = std::abs(diff);
13832       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13833         {
13834           const Tp frac = diff / f0;
13835           if (std::abs(frac) > max_abs_frac)
13836             max_abs_frac = std::abs(frac);
13837         }
13838     }
13839   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13840 }
13841 
13842 // Test data for a=10.000000000000000, b=10.000000000000000, c=2.0000000000000000.
13843 testcase_hyperg<double> data201[] = {
13844   { 2.3388730079478623e-05, 10.000000000000000, 10.000000000000000,
13845           2.0000000000000000, -0.90000000000000002 },
13846   { -2.3204970759807341e-05, 10.000000000000000, 10.000000000000000,
13847           2.0000000000000000, -0.80000000000000004 },
13848   { -0.00016219730505520291, 10.000000000000000, 10.000000000000000,
13849           2.0000000000000000, -0.69999999999999996 },
13850   { -0.00044366962360925706, 10.000000000000000, 10.000000000000000,
13851           2.0000000000000000, -0.59999999999999998 },
13852   { -0.00071863577205454770, 10.000000000000000, 10.000000000000000,
13853           2.0000000000000000, -0.50000000000000000 },
13854   { 4.4378596544453810e-05, 10.000000000000000, 10.000000000000000,
13855           2.0000000000000000, -0.40000000000000002 },
13856   { 0.0044446568070623570, 10.000000000000000, 10.000000000000000,
13857           2.0000000000000000, -0.30000000000000004 },
13858   { 0.0071045155183571103, 10.000000000000000, 10.000000000000000,
13859           2.0000000000000000, -0.19999999999999996 },
13860   { -0.049961558159890146, 10.000000000000000, 10.000000000000000,
13861           2.0000000000000000, -0.099999999999999978 },
13862   { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
13863           2.0000000000000000, 0.0000000000000000 },
13864   { 51.305449964107403, 10.000000000000000, 10.000000000000000,
13865           2.0000000000000000, 0.10000000000000009 },
13866   { 1435.9545414461309, 10.000000000000000, 10.000000000000000,
13867           2.0000000000000000, 0.19999999999999996 },
13868   { 39657.913058984115, 10.000000000000000, 10.000000000000000,
13869           2.0000000000000000, 0.30000000000000004 },
13870   { 1346016.4468570501, 10.000000000000000, 10.000000000000000,
13871           2.0000000000000000, 0.39999999999999991 },
13872   { 68086556.444444403, 10.000000000000000, 10.000000000000000,
13873           2.0000000000000000, 0.50000000000000000 },
13874   { 6646235808.7301531, 10.000000000000000, 10.000000000000000,
13875           2.0000000000000000, 0.60000000000000009 },
13876   { 1954852335479.9702, 10.000000000000000, 10.000000000000000,
13877           2.0000000000000000, 0.69999999999999996 },
13878   { 4573796225043418.0, 10.000000000000000, 10.000000000000000,
13879           2.0000000000000000, 0.80000000000000004 },
13880   { 1.8280190368899683e+21, 10.000000000000000, 10.000000000000000,
13881           2.0000000000000000, 0.89999999999999991 },
13882 };
13883 
13884 // Test function for a=10.000000000000000, b=10.000000000000000, c=2.0000000000000000.
13885 template <typename Tp>
test201()13886 void test201()
13887 {
13888   const Tp eps = std::numeric_limits<Tp>::epsilon();
13889   Tp max_abs_diff = -Tp(1);
13890   Tp max_abs_frac = -Tp(1);
13891   unsigned int num_datum = sizeof(data201)
13892                          / sizeof(testcase_hyperg<double>);
13893   for (unsigned int i = 0; i < num_datum; ++i)
13894     {
13895       const Tp f = std::tr1::hyperg(Tp(data201[i].a), Tp(data201[i].b),
13896                    Tp(data201[i].c), Tp(data201[i].x));
13897       const Tp f0 = data201[i].f0;
13898       const Tp diff = f - f0;
13899       if (std::abs(diff) > max_abs_diff)
13900         max_abs_diff = std::abs(diff);
13901       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13902         {
13903           const Tp frac = diff / f0;
13904           if (std::abs(frac) > max_abs_frac)
13905             max_abs_frac = std::abs(frac);
13906         }
13907     }
13908   VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
13909 }
13910 
13911 // Test data for a=10.000000000000000, b=10.000000000000000, c=4.0000000000000000.
13912 testcase_hyperg<double> data202[] = {
13913   { 1.3504013648882651e-05, 10.000000000000000, 10.000000000000000,
13914           4.0000000000000000, -0.90000000000000002 },
13915   { 3.1753432098404372e-05, 10.000000000000000, 10.000000000000000,
13916           4.0000000000000000, -0.80000000000000004 },
13917   { 6.2032098207659688e-05, 10.000000000000000, 10.000000000000000,
13918           4.0000000000000000, -0.69999999999999996 },
13919   { 8.8747213942768282e-05, 10.000000000000000, 10.000000000000000,
13920           4.0000000000000000, -0.59999999999999998 },
13921   { 1.0478094697243911e-05, 10.000000000000000, 10.000000000000000,
13922           4.0000000000000000, -0.50000000000000000 },
13923   { -0.00055998751006011325, 10.000000000000000, 10.000000000000000,
13924           4.0000000000000000, -0.40000000000000002 },
13925   { -0.0024718654966577563, 10.000000000000000, 10.000000000000000,
13926           4.0000000000000000, -0.30000000000000004 },
13927   { -0.0027000264053619817, 10.000000000000000, 10.000000000000000,
13928           4.0000000000000000, -0.19999999999999996 },
13929   { 0.066515394406810674, 10.000000000000000, 10.000000000000000,
13930           4.0000000000000000, -0.099999999999999978 },
13931   { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
13932           4.0000000000000000, 0.0000000000000000 },
13933   { 11.579200866389527, 10.000000000000000, 10.000000000000000,
13934           4.0000000000000000, 0.10000000000000009 },
13935   { 137.50750548795256, 10.000000000000000, 10.000000000000000,
13936           4.0000000000000000, 0.19999999999999996 },
13937   { 1901.3196072993419, 10.000000000000000, 10.000000000000000,
13938           4.0000000000000000, 0.30000000000000004 },
13939   { 34210.659507137796, 10.000000000000000, 10.000000000000000,
13940           4.0000000000000000, 0.39999999999999991 },
13941   { 920588.19047619053, 10.000000000000000, 10.000000000000000,
13942           4.0000000000000000, 0.50000000000000000 },
13943   { 45876220.933028772, 10.000000000000000, 10.000000000000000,
13944           4.0000000000000000, 0.60000000000000009 },
13945   { 6234608574.0963297, 10.000000000000000, 10.000000000000000,
13946           4.0000000000000000, 0.69999999999999996 },
13947   { 5445391090029.7783, 10.000000000000000, 10.000000000000000,
13948           4.0000000000000000, 0.80000000000000004 },
13949   { 4.6508713107142163e+17, 10.000000000000000, 10.000000000000000,
13950           4.0000000000000000, 0.89999999999999991 },
13951 };
13952 
13953 // Test function for a=10.000000000000000, b=10.000000000000000, c=4.0000000000000000.
13954 template <typename Tp>
test202()13955 void test202()
13956 {
13957   const Tp eps = std::numeric_limits<Tp>::epsilon();
13958   Tp max_abs_diff = -Tp(1);
13959   Tp max_abs_frac = -Tp(1);
13960   unsigned int num_datum = sizeof(data202)
13961                          / sizeof(testcase_hyperg<double>);
13962   for (unsigned int i = 0; i < num_datum; ++i)
13963     {
13964       const Tp f = std::tr1::hyperg(Tp(data202[i].a), Tp(data202[i].b),
13965                    Tp(data202[i].c), Tp(data202[i].x));
13966       const Tp f0 = data202[i].f0;
13967       const Tp diff = f - f0;
13968       if (std::abs(diff) > max_abs_diff)
13969         max_abs_diff = std::abs(diff);
13970       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13971         {
13972           const Tp frac = diff / f0;
13973           if (std::abs(frac) > max_abs_frac)
13974             max_abs_frac = std::abs(frac);
13975         }
13976     }
13977   VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
13978 }
13979 
13980 // Test data for a=10.000000000000000, b=10.000000000000000, c=6.0000000000000000.
13981 testcase_hyperg<double> data203[] = {
13982   { -2.6846726901567720e-05, 10.000000000000000, 10.000000000000000,
13983           6.0000000000000000, -0.90000000000000002 },
13984   { -4.7817237144207266e-05, 10.000000000000000, 10.000000000000000,
13985           6.0000000000000000, -0.80000000000000004 },
13986   { -7.2908121941975601e-05, 10.000000000000000, 10.000000000000000,
13987           6.0000000000000000, -0.69999999999999996 },
13988   { -6.0427853197480476e-05, 10.000000000000000, 10.000000000000000,
13989           6.0000000000000000, -0.59999999999999998 },
13990   { 0.00020559720946645182, 10.000000000000000, 10.000000000000000,
13991           6.0000000000000000, -0.50000000000000000 },
13992   { 0.0017056910683365828, 10.000000000000000, 10.000000000000000,
13993           6.0000000000000000, -0.40000000000000002 },
13994   { 0.0088037230970526795, 10.000000000000000, 10.000000000000000,
13995           6.0000000000000000, -0.30000000000000004 },
13996   { 0.041510819735141674, 10.000000000000000, 10.000000000000000,
13997           6.0000000000000000, -0.19999999999999996 },
13998   { 0.19754880805677258, 10.000000000000000, 10.000000000000000,
13999           6.0000000000000000, -0.099999999999999978 },
14000   { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
14001           6.0000000000000000, 0.0000000000000000 },
14002   { 5.6130947302779246, 10.000000000000000, 10.000000000000000,
14003           6.0000000000000000, 0.10000000000000009 },
14004   { 36.475357196722442, 10.000000000000000, 10.000000000000000,
14005           6.0000000000000000, 0.19999999999999996 },
14006   { 289.29483001400672, 10.000000000000000, 10.000000000000000,
14007           6.0000000000000000, 0.30000000000000004 },
14008   { 3010.8676549536503, 10.000000000000000, 10.000000000000000,
14009           6.0000000000000000, 0.39999999999999991 },
14010   { 45844.317460317419, 10.000000000000000, 10.000000000000000,
14011           6.0000000000000000, 0.50000000000000000 },
14012   { 1221852.6431492427, 10.000000000000000, 10.000000000000000,
14013           6.0000000000000000, 0.60000000000000009 },
14014   { 79585968.928968787, 10.000000000000000, 10.000000000000000,
14015           6.0000000000000000, 0.69999999999999996 },
14016   { 26733475942.460335, 10.000000000000000, 10.000000000000000,
14017           6.0000000000000000, 0.80000000000000004 },
14018   { 500206428571421.19, 10.000000000000000, 10.000000000000000,
14019           6.0000000000000000, 0.89999999999999991 },
14020 };
14021 
14022 // Test function for a=10.000000000000000, b=10.000000000000000, c=6.0000000000000000.
14023 template <typename Tp>
test203()14024 void test203()
14025 {
14026   const Tp eps = std::numeric_limits<Tp>::epsilon();
14027   Tp max_abs_diff = -Tp(1);
14028   Tp max_abs_frac = -Tp(1);
14029   unsigned int num_datum = sizeof(data203)
14030                          / sizeof(testcase_hyperg<double>);
14031   for (unsigned int i = 0; i < num_datum; ++i)
14032     {
14033       const Tp f = std::tr1::hyperg(Tp(data203[i].a), Tp(data203[i].b),
14034                    Tp(data203[i].c), Tp(data203[i].x));
14035       const Tp f0 = data203[i].f0;
14036       const Tp diff = f - f0;
14037       if (std::abs(diff) > max_abs_diff)
14038         max_abs_diff = std::abs(diff);
14039       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14040         {
14041           const Tp frac = diff / f0;
14042           if (std::abs(frac) > max_abs_frac)
14043             max_abs_frac = std::abs(frac);
14044         }
14045     }
14046   VERIFY(max_abs_frac < Tp(2.5000000000000017e-10));
14047 }
14048 
14049 // Test data for a=10.000000000000000, b=10.000000000000000, c=8.0000000000000000.
14050 testcase_hyperg<double> data204[] = {
14051   { 0.00025866179054245944, 10.000000000000000, 10.000000000000000,
14052           8.0000000000000000, -0.90000000000000002 },
14053   { 0.00053402577739214288, 10.000000000000000, 10.000000000000000,
14054           8.0000000000000000, -0.80000000000000004 },
14055   { 0.0011390075227240345, 10.000000000000000, 10.000000000000000,
14056           8.0000000000000000, -0.69999999999999996 },
14057   { 0.0025224267119483192, 10.000000000000000, 10.000000000000000,
14058           8.0000000000000000, -0.59999999999999998 },
14059   { 0.0058340332124251467, 10.000000000000000, 10.000000000000000,
14060           8.0000000000000000, -0.50000000000000000 },
14061   { 0.014189256143045285, 10.000000000000000, 10.000000000000000,
14062           8.0000000000000000, -0.40000000000000002 },
14063   { 0.036590990011337567, 10.000000000000000, 10.000000000000000,
14064           8.0000000000000000, -0.30000000000000004 },
14065   { 0.10106560781146992, 10.000000000000000, 10.000000000000000,
14066           8.0000000000000000, -0.19999999999999996 },
14067   { 0.30278778538531409, 10.000000000000000, 10.000000000000000,
14068           8.0000000000000000, -0.099999999999999978 },
14069   { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
14070           8.0000000000000000, 0.0000000000000000 },
14071   { 3.7187249990350599, 10.000000000000000, 10.000000000000000,
14072           8.0000000000000000, 0.10000000000000009 },
14073   { 16.023275545901704, 10.000000000000000, 10.000000000000000,
14074           8.0000000000000000, 0.19999999999999996 },
14075   { 83.265377219882822, 10.000000000000000, 10.000000000000000,
14076           8.0000000000000000, 0.30000000000000004 },
14077   { 553.31413918843987, 10.000000000000000, 10.000000000000000,
14078           8.0000000000000000, 0.39999999999999991 },
14079   { 5148.4444444444416, 10.000000000000000, 10.000000000000000,
14080           8.0000000000000000, 0.50000000000000000 },
14081   { 78082.084655761908, 10.000000000000000, 10.000000000000000,
14082           8.0000000000000000, 0.60000000000000009 },
14083   { 2565874.8781353114, 10.000000000000000, 10.000000000000000,
14084           8.0000000000000000, 0.69999999999999996 },
14085   { 346137152.77777809, 10.000000000000000, 10.000000000000000,
14086           8.0000000000000000, 0.80000000000000004 },
14087   { 1472499999999.9834, 10.000000000000000, 10.000000000000000,
14088           8.0000000000000000, 0.89999999999999991 },
14089 };
14090 
14091 // Test function for a=10.000000000000000, b=10.000000000000000, c=8.0000000000000000.
14092 template <typename Tp>
test204()14093 void test204()
14094 {
14095   const Tp eps = std::numeric_limits<Tp>::epsilon();
14096   Tp max_abs_diff = -Tp(1);
14097   Tp max_abs_frac = -Tp(1);
14098   unsigned int num_datum = sizeof(data204)
14099                          / sizeof(testcase_hyperg<double>);
14100   for (unsigned int i = 0; i < num_datum; ++i)
14101     {
14102       const Tp f = std::tr1::hyperg(Tp(data204[i].a), Tp(data204[i].b),
14103                    Tp(data204[i].c), Tp(data204[i].x));
14104       const Tp f0 = data204[i].f0;
14105       const Tp diff = f - f0;
14106       if (std::abs(diff) > max_abs_diff)
14107         max_abs_diff = std::abs(diff);
14108       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14109         {
14110           const Tp frac = diff / f0;
14111           if (std::abs(frac) > max_abs_frac)
14112             max_abs_frac = std::abs(frac);
14113         }
14114     }
14115   VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
14116 }
14117 
14118 // Test data for a=10.000000000000000, b=10.000000000000000, c=10.000000000000000.
14119 testcase_hyperg<double> data205[] = {
14120   { 0.0016310376661280216, 10.000000000000000, 10.000000000000000,
14121           10.000000000000000, -0.90000000000000002 },
14122   { 0.0028007538972582421, 10.000000000000000, 10.000000000000000,
14123           10.000000000000000, -0.80000000000000004 },
14124   { 0.0049603324681551939, 10.000000000000000, 10.000000000000000,
14125           10.000000000000000, -0.69999999999999996 },
14126   { 0.0090949470177292789, 10.000000000000000, 10.000000000000000,
14127           10.000000000000000, -0.59999999999999998 },
14128   { 0.017341529915832606, 10.000000000000000, 10.000000000000000,
14129           10.000000000000000, -0.50000000000000000 },
14130   { 0.034571613033607777, 10.000000000000000, 10.000000000000000,
14131           10.000000000000000, -0.40000000000000002 },
14132   { 0.072538150286405714, 10.000000000000000, 10.000000000000000,
14133           10.000000000000000, -0.30000000000000004 },
14134   { 0.16150558288984579, 10.000000000000000, 10.000000000000000,
14135           10.000000000000000, -0.19999999999999996 },
14136   { 0.38554328942953148, 10.000000000000000, 10.000000000000000,
14137           10.000000000000000, -0.099999999999999978 },
14138   { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
14139           10.000000000000000, 0.0000000000000000 },
14140   { 2.8679719907924444, 10.000000000000000, 10.000000000000000,
14141           10.000000000000000, 0.10000000000000009 },
14142   { 9.3132257461547816, 10.000000000000000, 10.000000000000000,
14143           10.000000000000000, 0.19999999999999996 },
14144   { 35.401331746414378, 10.000000000000000, 10.000000000000000,
14145           10.000000000000000, 0.30000000000000004 },
14146   { 165.38171687920172, 10.000000000000000, 10.000000000000000,
14147           10.000000000000000, 0.39999999999999991 },
14148   { 1024.0000000000000, 10.000000000000000, 10.000000000000000,
14149           10.000000000000000, 0.50000000000000000 },
14150   { 9536.7431640625200, 10.000000000000000, 10.000000000000000,
14151           10.000000000000000, 0.60000000000000009 },
14152   { 169350.87808430271, 10.000000000000000, 10.000000000000000,
14153           10.000000000000000, 0.69999999999999996 },
14154   { 9765624.9999999944, 10.000000000000000, 10.000000000000000,
14155           10.000000000000000, 0.80000000000000004 },
14156   { 9999999999.9999332, 10.000000000000000, 10.000000000000000,
14157           10.000000000000000, 0.89999999999999991 },
14158 };
14159 
14160 // Test function for a=10.000000000000000, b=10.000000000000000, c=10.000000000000000.
14161 template <typename Tp>
test205()14162 void test205()
14163 {
14164   const Tp eps = std::numeric_limits<Tp>::epsilon();
14165   Tp max_abs_diff = -Tp(1);
14166   Tp max_abs_frac = -Tp(1);
14167   unsigned int num_datum = sizeof(data205)
14168                          / sizeof(testcase_hyperg<double>);
14169   for (unsigned int i = 0; i < num_datum; ++i)
14170     {
14171       const Tp f = std::tr1::hyperg(Tp(data205[i].a), Tp(data205[i].b),
14172                    Tp(data205[i].c), Tp(data205[i].x));
14173       const Tp f0 = data205[i].f0;
14174       const Tp diff = f - f0;
14175       if (std::abs(diff) > max_abs_diff)
14176         max_abs_diff = std::abs(diff);
14177       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14178         {
14179           const Tp frac = diff / f0;
14180           if (std::abs(frac) > max_abs_frac)
14181             max_abs_frac = std::abs(frac);
14182         }
14183     }
14184   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14185 }
14186 
14187 // Test data for a=10.000000000000000, b=20.000000000000000, c=2.0000000000000000.
14188 testcase_hyperg<double> data206[] = {
14189   { -2.1776535308707967e-07, 10.000000000000000, 20.000000000000000,
14190           2.0000000000000000, -0.90000000000000002 },
14191   { -2.9128833151427998e-06, 10.000000000000000, 20.000000000000000,
14192           2.0000000000000000, -0.80000000000000004 },
14193   { -9.4755553429035093e-06, 10.000000000000000, 20.000000000000000,
14194           2.0000000000000000, -0.69999999999999996 },
14195   { -1.2844297353813116e-05, 10.000000000000000, 20.000000000000000,
14196           2.0000000000000000, -0.59999999999999998 },
14197   { 3.6576965483568809e-05, 10.000000000000000, 20.000000000000000,
14198           2.0000000000000000, -0.50000000000000000 },
14199   { 0.00020847453890692649, 10.000000000000000, 20.000000000000000,
14200           2.0000000000000000, -0.40000000000000002 },
14201   { -0.00022868510398174632, 10.000000000000000, 20.000000000000000,
14202           2.0000000000000000, -0.30000000000000004 },
14203   { -0.0021855513841942732, 10.000000000000000, 20.000000000000000,
14204           2.0000000000000000, -0.19999999999999996 },
14205   { 0.014662111759334634, 10.000000000000000, 20.000000000000000,
14206           2.0000000000000000, -0.099999999999999978 },
14207   { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
14208           2.0000000000000000, 0.0000000000000000 },
14209   { 746.44776348798098, 10.000000000000000, 20.000000000000000,
14210           2.0000000000000000, 0.10000000000000009 },
14211   { 136080.48445225612, 10.000000000000000, 20.000000000000000,
14212           2.0000000000000000, 0.19999999999999996 },
14213   { 23094279.597826406, 10.000000000000000, 20.000000000000000,
14214           2.0000000000000000, 0.30000000000000004 },
14215   { 5315913395.5545301, 10.000000000000000, 20.000000000000000,
14216           2.0000000000000000, 0.39999999999999991 },
14217   { 2261935718399.9990, 10.000000000000000, 20.000000000000000,
14218           2.0000000000000000, 0.50000000000000000 },
14219   { 2669150854828235.0, 10.000000000000000, 20.000000000000000,
14220           2.0000000000000000, 0.60000000000000009 },
14221   { 1.7499363099365994e+19, 10.000000000000000, 20.000000000000000,
14222           2.0000000000000000, 0.69999999999999996 },
14223   { 2.8881518494606140e+24, 10.000000000000000, 20.000000000000000,
14224           2.0000000000000000, 0.80000000000000004 },
14225   { 1.4165513933661626e+33, 10.000000000000000, 20.000000000000000,
14226           2.0000000000000000, 0.89999999999999991 },
14227 };
14228 
14229 // Test function for a=10.000000000000000, b=20.000000000000000, c=2.0000000000000000.
14230 template <typename Tp>
test206()14231 void test206()
14232 {
14233   const Tp eps = std::numeric_limits<Tp>::epsilon();
14234   Tp max_abs_diff = -Tp(1);
14235   Tp max_abs_frac = -Tp(1);
14236   unsigned int num_datum = sizeof(data206)
14237                          / sizeof(testcase_hyperg<double>);
14238   for (unsigned int i = 0; i < num_datum; ++i)
14239     {
14240       const Tp f = std::tr1::hyperg(Tp(data206[i].a), Tp(data206[i].b),
14241                    Tp(data206[i].c), Tp(data206[i].x));
14242       const Tp f0 = data206[i].f0;
14243       const Tp diff = f - f0;
14244       if (std::abs(diff) > max_abs_diff)
14245         max_abs_diff = std::abs(diff);
14246       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14247         {
14248           const Tp frac = diff / f0;
14249           if (std::abs(frac) > max_abs_frac)
14250             max_abs_frac = std::abs(frac);
14251         }
14252     }
14253   VERIFY(max_abs_frac < Tp(1.0000000000000005e-08));
14254 }
14255 
14256 // Test data for a=10.000000000000000, b=20.000000000000000, c=4.0000000000000000.
14257 testcase_hyperg<double> data207[] = {
14258   { 1.7149006973860441e-07, 10.000000000000000, 20.000000000000000,
14259           4.0000000000000000, -0.90000000000000002 },
14260   { 3.2399324904088936e-07, 10.000000000000000, 20.000000000000000,
14261           4.0000000000000000, -0.80000000000000004 },
14262   { 1.6015317712089860e-07, 10.000000000000000, 20.000000000000000,
14263           4.0000000000000000, -0.69999999999999996 },
14264   { -2.0500917204199595e-06, 10.000000000000000, 20.000000000000000,
14265           4.0000000000000000, -0.59999999999999998 },
14266   { -1.0175546788599472e-05, 10.000000000000000, 20.000000000000000,
14267           4.0000000000000000, -0.50000000000000000 },
14268   { -1.1720101988202453e-05, 10.000000000000000, 20.000000000000000,
14269           4.0000000000000000, -0.40000000000000002 },
14270   { 0.00014199637113974185, 10.000000000000000, 20.000000000000000,
14271           4.0000000000000000, -0.30000000000000004 },
14272   { 0.00021263363640642297, 10.000000000000000, 20.000000000000000,
14273           4.0000000000000000, -0.19999999999999996 },
14274   { -0.0072649256698441751, 10.000000000000000, 20.000000000000000,
14275           4.0000000000000000, -0.099999999999999978 },
14276   { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
14277           4.0000000000000000, 0.0000000000000000 },
14278   { 90.430293772869618, 10.000000000000000, 20.000000000000000,
14279           4.0000000000000000, 0.10000000000000009 },
14280   { 6248.1455940292308, 10.000000000000000, 20.000000000000000,
14281           4.0000000000000000, 0.19999999999999996 },
14282   { 501143.39852548984, 10.000000000000000, 20.000000000000000,
14283           4.0000000000000000, 0.30000000000000004 },
14284   { 58852027.356439680, 10.000000000000000, 20.000000000000000,
14285           4.0000000000000000, 0.39999999999999991 },
14286   { 12942923093.333330, 10.000000000000000, 20.000000000000000,
14287           4.0000000000000000, 0.50000000000000000 },
14288   { 7618073993853.6592, 10.000000000000000, 20.000000000000000,
14289           4.0000000000000000, 0.60000000000000009 },
14290   { 22630251562549288., 10.000000000000000, 20.000000000000000,
14291           4.0000000000000000, 0.69999999999999996 },
14292   { 1.3708372433980356e+21, 10.000000000000000, 20.000000000000000,
14293           4.0000000000000000, 0.80000000000000004 },
14294   { 1.4154113619999653e+29, 10.000000000000000, 20.000000000000000,
14295           4.0000000000000000, 0.89999999999999991 },
14296 };
14297 
14298 // Test function for a=10.000000000000000, b=20.000000000000000, c=4.0000000000000000.
14299 template <typename Tp>
test207()14300 void test207()
14301 {
14302   const Tp eps = std::numeric_limits<Tp>::epsilon();
14303   Tp max_abs_diff = -Tp(1);
14304   Tp max_abs_frac = -Tp(1);
14305   unsigned int num_datum = sizeof(data207)
14306                          / sizeof(testcase_hyperg<double>);
14307   for (unsigned int i = 0; i < num_datum; ++i)
14308     {
14309       const Tp f = std::tr1::hyperg(Tp(data207[i].a), Tp(data207[i].b),
14310                    Tp(data207[i].c), Tp(data207[i].x));
14311       const Tp f0 = data207[i].f0;
14312       const Tp diff = f - f0;
14313       if (std::abs(diff) > max_abs_diff)
14314         max_abs_diff = std::abs(diff);
14315       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14316         {
14317           const Tp frac = diff / f0;
14318           if (std::abs(frac) > max_abs_frac)
14319             max_abs_frac = std::abs(frac);
14320         }
14321     }
14322   VERIFY(max_abs_frac < Tp(5.0000000000000024e-08));
14323 }
14324 
14325 // Test data for a=10.000000000000000, b=20.000000000000000, c=6.0000000000000000.
14326 testcase_hyperg<double> data208[] = {
14327   { -1.6667473370780257e-08, 10.000000000000000, 20.000000000000000,
14328           6.0000000000000000, -0.90000000000000002 },
14329   { 8.6214844067774863e-08, 10.000000000000000, 20.000000000000000,
14330           6.0000000000000000, -0.80000000000000004 },
14331   { 5.7778331238835108e-07, 10.000000000000000, 20.000000000000000,
14332           6.0000000000000000, -0.69999999999999996 },
14333   { 2.1911400500362969e-06, 10.000000000000000, 20.000000000000000,
14334           6.0000000000000000, -0.59999999999999998 },
14335   { 4.7440049217100417e-06, 10.000000000000000, 20.000000000000000,
14336           6.0000000000000000, -0.50000000000000000 },
14337   { -1.0564233314924258e-05, 10.000000000000000, 20.000000000000000,
14338           6.0000000000000000, -0.40000000000000002 },
14339   { -0.00017990026051856349, 10.000000000000000, 20.000000000000000,
14340           6.0000000000000000, -0.30000000000000004 },
14341   { -0.00027618146288744351, 10.000000000000000, 20.000000000000000,
14342           6.0000000000000000, -0.19999999999999996 },
14343   { 0.030606019577723392, 10.000000000000000, 20.000000000000000,
14344           6.0000000000000000, -0.099999999999999978 },
14345   { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
14346           6.0000000000000000, 0.0000000000000000 },
14347   { 27.832854169493341, 10.000000000000000, 20.000000000000000,
14348           6.0000000000000000, 0.10000000000000009 },
14349   { 874.00624088575228, 10.000000000000000, 20.000000000000000,
14350           6.0000000000000000, 0.19999999999999996 },
14351   { 36049.199340831554, 10.000000000000000, 20.000000000000000,
14352           6.0000000000000000, 0.30000000000000004 },
14353   { 2270967.7298624986, 10.000000000000000, 20.000000000000000,
14354           6.0000000000000000, 0.39999999999999991 },
14355   { 266979100.44444439, 10.000000000000000, 20.000000000000000,
14356           6.0000000000000000, 0.50000000000000000 },
14357   { 80311224337.493027, 10.000000000000000, 20.000000000000000,
14358           6.0000000000000000, 0.60000000000000009 },
14359   { 110111693103799.72, 10.000000000000000, 20.000000000000000,
14360           6.0000000000000000, 0.69999999999999996 },
14361   { 2.4838871426052618e+18, 10.000000000000000, 20.000000000000000,
14362           6.0000000000000000, 0.80000000000000004 },
14363   { 5.4626349999998603e+25, 10.000000000000000, 20.000000000000000,
14364           6.0000000000000000, 0.89999999999999991 },
14365 };
14366 
14367 // Test function for a=10.000000000000000, b=20.000000000000000, c=6.0000000000000000.
14368 template <typename Tp>
test208()14369 void test208()
14370 {
14371   const Tp eps = std::numeric_limits<Tp>::epsilon();
14372   Tp max_abs_diff = -Tp(1);
14373   Tp max_abs_frac = -Tp(1);
14374   unsigned int num_datum = sizeof(data208)
14375                          / sizeof(testcase_hyperg<double>);
14376   for (unsigned int i = 0; i < num_datum; ++i)
14377     {
14378       const Tp f = std::tr1::hyperg(Tp(data208[i].a), Tp(data208[i].b),
14379                    Tp(data208[i].c), Tp(data208[i].x));
14380       const Tp f0 = data208[i].f0;
14381       const Tp diff = f - f0;
14382       if (std::abs(diff) > max_abs_diff)
14383         max_abs_diff = std::abs(diff);
14384       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14385         {
14386           const Tp frac = diff / f0;
14387           if (std::abs(frac) > max_abs_frac)
14388             max_abs_frac = std::abs(frac);
14389         }
14390     }
14391   VERIFY(max_abs_frac < Tp(5.0000000000000019e-07));
14392 }
14393 
14394 // Test data for a=10.000000000000000, b=20.000000000000000, c=8.0000000000000000.
14395 testcase_hyperg<double> data209[] = {
14396   { -1.5843795893321480e-07, 10.000000000000000, 20.000000000000000,
14397           8.0000000000000000, -0.90000000000000002 },
14398   { -5.4877275994033766e-07, 10.000000000000000, 20.000000000000000,
14399           8.0000000000000000, -0.80000000000000004 },
14400   { -1.7169507967745992e-06, 10.000000000000000, 20.000000000000000,
14401           8.0000000000000000, -0.69999999999999996 },
14402   { -4.5236439748752000e-06, 10.000000000000000, 20.000000000000000,
14403           8.0000000000000000, -0.59999999999999998 },
14404   { -5.5690492560325806e-06, 10.000000000000000, 20.000000000000000,
14405           8.0000000000000000, -0.50000000000000000 },
14406   { 5.6914115606934911e-05, 10.000000000000000, 20.000000000000000,
14407           8.0000000000000000, -0.40000000000000002 },
14408   { 0.00082507252097519922, 10.000000000000000, 20.000000000000000,
14409           8.0000000000000000, -0.30000000000000004 },
14410   { 0.0085739249288229857, 10.000000000000000, 20.000000000000000,
14411           8.0000000000000000, -0.19999999999999996 },
14412   { 0.088244357683754757, 10.000000000000000, 20.000000000000000,
14413           8.0000000000000000, -0.099999999999999978 },
14414   { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
14415           8.0000000000000000, 0.0000000000000000 },
14416   { 13.387208440156897, 10.000000000000000, 20.000000000000000,
14417           8.0000000000000000, 0.10000000000000009 },
14418   { 226.77895441155110, 10.000000000000000, 20.000000000000000,
14419           8.0000000000000000, 0.19999999999999996 },
14420   { 5281.5716482686785, 10.000000000000000, 20.000000000000000,
14421           8.0000000000000000, 0.30000000000000004 },
14422   { 189431.77762850464, 10.000000000000000, 20.000000000000000,
14423           8.0000000000000000, 0.39999999999999991 },
14424   { 12408149.333333332, 10.000000000000000, 20.000000000000000,
14425           8.0000000000000000, 0.50000000000000000 },
14426   { 1966782292.5839682, 10.000000000000000, 20.000000000000000,
14427           8.0000000000000000, 0.60000000000000009 },
14428   { 1274123112205.7495, 10.000000000000000, 20.000000000000000,
14429           8.0000000000000000, 0.69999999999999996 },
14430   { 10903676350911508., 10.000000000000000, 20.000000000000000,
14431           8.0000000000000000, 0.80000000000000004 },
14432   { 5.1849999999998819e+22, 10.000000000000000, 20.000000000000000,
14433           8.0000000000000000, 0.89999999999999991 },
14434 };
14435 
14436 // Test function for a=10.000000000000000, b=20.000000000000000, c=8.0000000000000000.
14437 template <typename Tp>
test209()14438 void test209()
14439 {
14440   const Tp eps = std::numeric_limits<Tp>::epsilon();
14441   Tp max_abs_diff = -Tp(1);
14442   Tp max_abs_frac = -Tp(1);
14443   unsigned int num_datum = sizeof(data209)
14444                          / sizeof(testcase_hyperg<double>);
14445   for (unsigned int i = 0; i < num_datum; ++i)
14446     {
14447       const Tp f = std::tr1::hyperg(Tp(data209[i].a), Tp(data209[i].b),
14448                    Tp(data209[i].c), Tp(data209[i].x));
14449       const Tp f0 = data209[i].f0;
14450       const Tp diff = f - f0;
14451       if (std::abs(diff) > max_abs_diff)
14452         max_abs_diff = std::abs(diff);
14453       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14454         {
14455           const Tp frac = diff / f0;
14456           if (std::abs(frac) > max_abs_frac)
14457             max_abs_frac = std::abs(frac);
14458         }
14459     }
14460   VERIFY(max_abs_frac < Tp(2.5000000000000012e-08));
14461 }
14462 
14463 // Test data for a=10.000000000000000, b=20.000000000000000, c=10.000000000000000.
14464 testcase_hyperg<double> data210[] = {
14465   { 2.6602838683283435e-06, 10.000000000000000, 20.000000000000000,
14466           10.000000000000000, -0.90000000000000002 },
14467   { 7.8442223930072316e-06, 10.000000000000000, 20.000000000000000,
14468           10.000000000000000, -0.80000000000000004 },
14469   { 2.4604898194634598e-05, 10.000000000000000, 20.000000000000000,
14470           10.000000000000000, -0.69999999999999996 },
14471   { 8.2718061255302686e-05, 10.000000000000000, 20.000000000000000,
14472           10.000000000000000, -0.59999999999999998 },
14473   { 0.00030072865982171723, 10.000000000000000, 20.000000000000000,
14474           10.000000000000000, -0.50000000000000000 },
14475   { 0.0011951964277455193, 10.000000000000000, 20.000000000000000,
14476           10.000000000000000, -0.40000000000000002 },
14477   { 0.0052617832469731814, 10.000000000000000, 20.000000000000000,
14478           10.000000000000000, -0.30000000000000004 },
14479   { 0.026084053304588847, 10.000000000000000, 20.000000000000000,
14480           10.000000000000000, -0.19999999999999996 },
14481   { 0.14864362802414346, 10.000000000000000, 20.000000000000000,
14482           10.000000000000000, -0.099999999999999978 },
14483   { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
14484           10.000000000000000, 0.0000000000000000 },
14485   { 8.2252633399699757, 10.000000000000000, 20.000000000000000,
14486           10.000000000000000, 0.10000000000000009 },
14487   { 86.736173798840269, 10.000000000000000, 20.000000000000000,
14488           10.000000000000000, 0.19999999999999996 },
14489   { 1253.2542894196865, 10.000000000000000, 20.000000000000000,
14490           10.000000000000000, 0.30000000000000004 },
14491   { 27351.112277912434, 10.000000000000000, 20.000000000000000,
14492           10.000000000000000, 0.39999999999999991 },
14493   { 1048576.0000000000, 10.000000000000000, 20.000000000000000,
14494           10.000000000000000, 0.50000000000000000 },
14495   { 90949470.177293226, 10.000000000000000, 20.000000000000000,
14496           10.000000000000000, 0.60000000000000009 },
14497   { 28679719907.924358, 10.000000000000000, 20.000000000000000,
14498           10.000000000000000, 0.69999999999999996 },
14499   { 95367431640624.906, 10.000000000000000, 20.000000000000000,
14500           10.000000000000000, 0.80000000000000004 },
14501   { 9.9999999999998657e+19, 10.000000000000000, 20.000000000000000,
14502           10.000000000000000, 0.89999999999999991 },
14503 };
14504 
14505 // Test function for a=10.000000000000000, b=20.000000000000000, c=10.000000000000000.
14506 template <typename Tp>
test210()14507 void test210()
14508 {
14509   const Tp eps = std::numeric_limits<Tp>::epsilon();
14510   Tp max_abs_diff = -Tp(1);
14511   Tp max_abs_frac = -Tp(1);
14512   unsigned int num_datum = sizeof(data210)
14513                          / sizeof(testcase_hyperg<double>);
14514   for (unsigned int i = 0; i < num_datum; ++i)
14515     {
14516       const Tp f = std::tr1::hyperg(Tp(data210[i].a), Tp(data210[i].b),
14517                    Tp(data210[i].c), Tp(data210[i].x));
14518       const Tp f0 = data210[i].f0;
14519       const Tp diff = f - f0;
14520       if (std::abs(diff) > max_abs_diff)
14521         max_abs_diff = std::abs(diff);
14522       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14523         {
14524           const Tp frac = diff / f0;
14525           if (std::abs(frac) > max_abs_frac)
14526             max_abs_frac = std::abs(frac);
14527         }
14528     }
14529   VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
14530 }
14531 
14532 // Test data for a=20.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
14533 testcase_hyperg<double> data211[] = {
14534   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14535           2.0000000000000000, -0.90000000000000002 },
14536   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14537           2.0000000000000000, -0.80000000000000004 },
14538   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14539           2.0000000000000000, -0.69999999999999996 },
14540   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14541           2.0000000000000000, -0.59999999999999998 },
14542   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14543           2.0000000000000000, -0.50000000000000000 },
14544   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14545           2.0000000000000000, -0.40000000000000002 },
14546   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14547           2.0000000000000000, -0.30000000000000004 },
14548   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14549           2.0000000000000000, -0.19999999999999996 },
14550   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14551           2.0000000000000000, -0.099999999999999978 },
14552   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14553           2.0000000000000000, 0.0000000000000000 },
14554   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14555           2.0000000000000000, 0.10000000000000009 },
14556   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14557           2.0000000000000000, 0.19999999999999996 },
14558   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14559           2.0000000000000000, 0.30000000000000004 },
14560   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14561           2.0000000000000000, 0.39999999999999991 },
14562   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14563           2.0000000000000000, 0.50000000000000000 },
14564   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14565           2.0000000000000000, 0.60000000000000009 },
14566   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14567           2.0000000000000000, 0.69999999999999996 },
14568   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14569           2.0000000000000000, 0.80000000000000004 },
14570   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14571           2.0000000000000000, 0.89999999999999991 },
14572 };
14573 
14574 // Test function for a=20.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
14575 template <typename Tp>
test211()14576 void test211()
14577 {
14578   const Tp eps = std::numeric_limits<Tp>::epsilon();
14579   Tp max_abs_diff = -Tp(1);
14580   Tp max_abs_frac = -Tp(1);
14581   unsigned int num_datum = sizeof(data211)
14582                          / sizeof(testcase_hyperg<double>);
14583   for (unsigned int i = 0; i < num_datum; ++i)
14584     {
14585       const Tp f = std::tr1::hyperg(Tp(data211[i].a), Tp(data211[i].b),
14586                    Tp(data211[i].c), Tp(data211[i].x));
14587       const Tp f0 = data211[i].f0;
14588       const Tp diff = f - f0;
14589       if (std::abs(diff) > max_abs_diff)
14590         max_abs_diff = std::abs(diff);
14591       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14592         {
14593           const Tp frac = diff / f0;
14594           if (std::abs(frac) > max_abs_frac)
14595             max_abs_frac = std::abs(frac);
14596         }
14597     }
14598   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14599 }
14600 
14601 // Test data for a=20.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
14602 testcase_hyperg<double> data212[] = {
14603   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14604           4.0000000000000000, -0.90000000000000002 },
14605   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14606           4.0000000000000000, -0.80000000000000004 },
14607   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14608           4.0000000000000000, -0.69999999999999996 },
14609   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14610           4.0000000000000000, -0.59999999999999998 },
14611   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14612           4.0000000000000000, -0.50000000000000000 },
14613   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14614           4.0000000000000000, -0.40000000000000002 },
14615   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14616           4.0000000000000000, -0.30000000000000004 },
14617   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14618           4.0000000000000000, -0.19999999999999996 },
14619   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14620           4.0000000000000000, -0.099999999999999978 },
14621   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14622           4.0000000000000000, 0.0000000000000000 },
14623   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14624           4.0000000000000000, 0.10000000000000009 },
14625   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14626           4.0000000000000000, 0.19999999999999996 },
14627   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14628           4.0000000000000000, 0.30000000000000004 },
14629   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14630           4.0000000000000000, 0.39999999999999991 },
14631   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14632           4.0000000000000000, 0.50000000000000000 },
14633   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14634           4.0000000000000000, 0.60000000000000009 },
14635   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14636           4.0000000000000000, 0.69999999999999996 },
14637   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14638           4.0000000000000000, 0.80000000000000004 },
14639   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14640           4.0000000000000000, 0.89999999999999991 },
14641 };
14642 
14643 // Test function for a=20.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
14644 template <typename Tp>
test212()14645 void test212()
14646 {
14647   const Tp eps = std::numeric_limits<Tp>::epsilon();
14648   Tp max_abs_diff = -Tp(1);
14649   Tp max_abs_frac = -Tp(1);
14650   unsigned int num_datum = sizeof(data212)
14651                          / sizeof(testcase_hyperg<double>);
14652   for (unsigned int i = 0; i < num_datum; ++i)
14653     {
14654       const Tp f = std::tr1::hyperg(Tp(data212[i].a), Tp(data212[i].b),
14655                    Tp(data212[i].c), Tp(data212[i].x));
14656       const Tp f0 = data212[i].f0;
14657       const Tp diff = f - f0;
14658       if (std::abs(diff) > max_abs_diff)
14659         max_abs_diff = std::abs(diff);
14660       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14661         {
14662           const Tp frac = diff / f0;
14663           if (std::abs(frac) > max_abs_frac)
14664             max_abs_frac = std::abs(frac);
14665         }
14666     }
14667   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14668 }
14669 
14670 // Test data for a=20.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
14671 testcase_hyperg<double> data213[] = {
14672   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14673           6.0000000000000000, -0.90000000000000002 },
14674   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14675           6.0000000000000000, -0.80000000000000004 },
14676   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14677           6.0000000000000000, -0.69999999999999996 },
14678   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14679           6.0000000000000000, -0.59999999999999998 },
14680   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14681           6.0000000000000000, -0.50000000000000000 },
14682   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14683           6.0000000000000000, -0.40000000000000002 },
14684   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14685           6.0000000000000000, -0.30000000000000004 },
14686   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14687           6.0000000000000000, -0.19999999999999996 },
14688   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14689           6.0000000000000000, -0.099999999999999978 },
14690   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14691           6.0000000000000000, 0.0000000000000000 },
14692   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14693           6.0000000000000000, 0.10000000000000009 },
14694   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14695           6.0000000000000000, 0.19999999999999996 },
14696   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14697           6.0000000000000000, 0.30000000000000004 },
14698   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14699           6.0000000000000000, 0.39999999999999991 },
14700   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14701           6.0000000000000000, 0.50000000000000000 },
14702   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14703           6.0000000000000000, 0.60000000000000009 },
14704   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14705           6.0000000000000000, 0.69999999999999996 },
14706   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14707           6.0000000000000000, 0.80000000000000004 },
14708   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14709           6.0000000000000000, 0.89999999999999991 },
14710 };
14711 
14712 // Test function for a=20.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
14713 template <typename Tp>
test213()14714 void test213()
14715 {
14716   const Tp eps = std::numeric_limits<Tp>::epsilon();
14717   Tp max_abs_diff = -Tp(1);
14718   Tp max_abs_frac = -Tp(1);
14719   unsigned int num_datum = sizeof(data213)
14720                          / sizeof(testcase_hyperg<double>);
14721   for (unsigned int i = 0; i < num_datum; ++i)
14722     {
14723       const Tp f = std::tr1::hyperg(Tp(data213[i].a), Tp(data213[i].b),
14724                    Tp(data213[i].c), Tp(data213[i].x));
14725       const Tp f0 = data213[i].f0;
14726       const Tp diff = f - f0;
14727       if (std::abs(diff) > max_abs_diff)
14728         max_abs_diff = std::abs(diff);
14729       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14730         {
14731           const Tp frac = diff / f0;
14732           if (std::abs(frac) > max_abs_frac)
14733             max_abs_frac = std::abs(frac);
14734         }
14735     }
14736   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14737 }
14738 
14739 // Test data for a=20.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
14740 testcase_hyperg<double> data214[] = {
14741   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14742           8.0000000000000000, -0.90000000000000002 },
14743   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14744           8.0000000000000000, -0.80000000000000004 },
14745   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14746           8.0000000000000000, -0.69999999999999996 },
14747   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14748           8.0000000000000000, -0.59999999999999998 },
14749   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14750           8.0000000000000000, -0.50000000000000000 },
14751   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14752           8.0000000000000000, -0.40000000000000002 },
14753   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14754           8.0000000000000000, -0.30000000000000004 },
14755   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14756           8.0000000000000000, -0.19999999999999996 },
14757   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14758           8.0000000000000000, -0.099999999999999978 },
14759   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14760           8.0000000000000000, 0.0000000000000000 },
14761   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14762           8.0000000000000000, 0.10000000000000009 },
14763   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14764           8.0000000000000000, 0.19999999999999996 },
14765   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14766           8.0000000000000000, 0.30000000000000004 },
14767   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14768           8.0000000000000000, 0.39999999999999991 },
14769   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14770           8.0000000000000000, 0.50000000000000000 },
14771   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14772           8.0000000000000000, 0.60000000000000009 },
14773   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14774           8.0000000000000000, 0.69999999999999996 },
14775   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14776           8.0000000000000000, 0.80000000000000004 },
14777   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14778           8.0000000000000000, 0.89999999999999991 },
14779 };
14780 
14781 // Test function for a=20.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
14782 template <typename Tp>
test214()14783 void test214()
14784 {
14785   const Tp eps = std::numeric_limits<Tp>::epsilon();
14786   Tp max_abs_diff = -Tp(1);
14787   Tp max_abs_frac = -Tp(1);
14788   unsigned int num_datum = sizeof(data214)
14789                          / sizeof(testcase_hyperg<double>);
14790   for (unsigned int i = 0; i < num_datum; ++i)
14791     {
14792       const Tp f = std::tr1::hyperg(Tp(data214[i].a), Tp(data214[i].b),
14793                    Tp(data214[i].c), Tp(data214[i].x));
14794       const Tp f0 = data214[i].f0;
14795       const Tp diff = f - f0;
14796       if (std::abs(diff) > max_abs_diff)
14797         max_abs_diff = std::abs(diff);
14798       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14799         {
14800           const Tp frac = diff / f0;
14801           if (std::abs(frac) > max_abs_frac)
14802             max_abs_frac = std::abs(frac);
14803         }
14804     }
14805   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14806 }
14807 
14808 // Test data for a=20.000000000000000, b=0.0000000000000000, c=10.000000000000000.
14809 testcase_hyperg<double> data215[] = {
14810   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14811           10.000000000000000, -0.90000000000000002 },
14812   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14813           10.000000000000000, -0.80000000000000004 },
14814   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14815           10.000000000000000, -0.69999999999999996 },
14816   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14817           10.000000000000000, -0.59999999999999998 },
14818   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14819           10.000000000000000, -0.50000000000000000 },
14820   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14821           10.000000000000000, -0.40000000000000002 },
14822   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14823           10.000000000000000, -0.30000000000000004 },
14824   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14825           10.000000000000000, -0.19999999999999996 },
14826   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14827           10.000000000000000, -0.099999999999999978 },
14828   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14829           10.000000000000000, 0.0000000000000000 },
14830   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14831           10.000000000000000, 0.10000000000000009 },
14832   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14833           10.000000000000000, 0.19999999999999996 },
14834   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14835           10.000000000000000, 0.30000000000000004 },
14836   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14837           10.000000000000000, 0.39999999999999991 },
14838   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14839           10.000000000000000, 0.50000000000000000 },
14840   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14841           10.000000000000000, 0.60000000000000009 },
14842   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14843           10.000000000000000, 0.69999999999999996 },
14844   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14845           10.000000000000000, 0.80000000000000004 },
14846   { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14847           10.000000000000000, 0.89999999999999991 },
14848 };
14849 
14850 // Test function for a=20.000000000000000, b=0.0000000000000000, c=10.000000000000000.
14851 template <typename Tp>
test215()14852 void test215()
14853 {
14854   const Tp eps = std::numeric_limits<Tp>::epsilon();
14855   Tp max_abs_diff = -Tp(1);
14856   Tp max_abs_frac = -Tp(1);
14857   unsigned int num_datum = sizeof(data215)
14858                          / sizeof(testcase_hyperg<double>);
14859   for (unsigned int i = 0; i < num_datum; ++i)
14860     {
14861       const Tp f = std::tr1::hyperg(Tp(data215[i].a), Tp(data215[i].b),
14862                    Tp(data215[i].c), Tp(data215[i].x));
14863       const Tp f0 = data215[i].f0;
14864       const Tp diff = f - f0;
14865       if (std::abs(diff) > max_abs_diff)
14866         max_abs_diff = std::abs(diff);
14867       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14868         {
14869           const Tp frac = diff / f0;
14870           if (std::abs(frac) > max_abs_frac)
14871             max_abs_frac = std::abs(frac);
14872         }
14873     }
14874   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14875 }
14876 
14877 // Test data for a=20.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
14878 testcase_hyperg<double> data216[] = {
14879   { 0.26690449940521566, 20.000000000000000, 0.50000000000000000,
14880           2.0000000000000000, -0.90000000000000002 },
14881   { 0.28252302866181805, 20.000000000000000, 0.50000000000000000,
14882           2.0000000000000000, -0.80000000000000004 },
14883   { 0.30123616141153819, 20.000000000000000, 0.50000000000000000,
14884           2.0000000000000000, -0.69999999999999996 },
14885   { 0.32421384687602628, 20.000000000000000, 0.50000000000000000,
14886           2.0000000000000000, -0.59999999999999998 },
14887   { 0.35334630811776752, 20.000000000000000, 0.50000000000000000,
14888           2.0000000000000000, -0.50000000000000000 },
14889   { 0.39191793127467034, 20.000000000000000, 0.50000000000000000,
14890           2.0000000000000000, -0.40000000000000002 },
14891   { 0.44620488618129206, 20.000000000000000, 0.50000000000000000,
14892           2.0000000000000000, -0.30000000000000004 },
14893   { 0.52980896919265685, 20.000000000000000, 0.50000000000000000,
14894           2.0000000000000000, -0.19999999999999996 },
14895   { 0.67754711477562357, 20.000000000000000, 0.50000000000000000,
14896           2.0000000000000000, -0.099999999999999978 },
14897   { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
14898           2.0000000000000000, 0.0000000000000000 },
14899   { 1.9567557771780317, 20.000000000000000, 0.50000000000000000,
14900           2.0000000000000000, 0.10000000000000009 },
14901   { 6.1816042148333086, 20.000000000000000, 0.50000000000000000,
14902           2.0000000000000000, 0.19999999999999996 },
14903   { 35.653088618561227, 20.000000000000000, 0.50000000000000000,
14904           2.0000000000000000, 0.30000000000000004 },
14905   { 377.51482843179906, 20.000000000000000, 0.50000000000000000,
14906           2.0000000000000000, 0.39999999999999991 },
14907   { 7645.8816551195359, 20.000000000000000, 0.50000000000000000,
14908           2.0000000000000000, 0.50000000000000000 },
14909   { 354791.74537980522, 20.000000000000000, 0.50000000000000000,
14910           2.0000000000000000, 0.60000000000000009 },
14911   { 57009889.966638684, 20.000000000000000, 0.50000000000000000,
14912           2.0000000000000000, 0.69999999999999996 },
14913   { 83771357024.863937, 20.000000000000000, 0.50000000000000000,
14914           2.0000000000000000, 0.80000000000000004 },
14915   { 25866972896376408., 20.000000000000000, 0.50000000000000000,
14916           2.0000000000000000, 0.89999999999999991 },
14917 };
14918 
14919 // Test function for a=20.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
14920 template <typename Tp>
test216()14921 void test216()
14922 {
14923   const Tp eps = std::numeric_limits<Tp>::epsilon();
14924   Tp max_abs_diff = -Tp(1);
14925   Tp max_abs_frac = -Tp(1);
14926   unsigned int num_datum = sizeof(data216)
14927                          / sizeof(testcase_hyperg<double>);
14928   for (unsigned int i = 0; i < num_datum; ++i)
14929     {
14930       const Tp f = std::tr1::hyperg(Tp(data216[i].a), Tp(data216[i].b),
14931                    Tp(data216[i].c), Tp(data216[i].x));
14932       const Tp f0 = data216[i].f0;
14933       const Tp diff = f - f0;
14934       if (std::abs(diff) > max_abs_diff)
14935         max_abs_diff = std::abs(diff);
14936       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14937         {
14938           const Tp frac = diff / f0;
14939           if (std::abs(frac) > max_abs_frac)
14940             max_abs_frac = std::abs(frac);
14941         }
14942     }
14943   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14944 }
14945 
14946 // Test data for a=20.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
14947 testcase_hyperg<double> data217[] = {
14948   { 0.40342659436153405, 20.000000000000000, 0.50000000000000000,
14949           4.0000000000000000, -0.90000000000000002 },
14950   { 0.42420571192034318, 20.000000000000000, 0.50000000000000000,
14951           4.0000000000000000, -0.80000000000000004 },
14952   { 0.44852768286073008, 20.000000000000000, 0.50000000000000000,
14953           4.0000000000000000, -0.69999999999999996 },
14954   { 0.47751245808592863, 20.000000000000000, 0.50000000000000000,
14955           4.0000000000000000, -0.59999999999999998 },
14956   { 0.51283632632707754, 20.000000000000000, 0.50000000000000000,
14957           4.0000000000000000, -0.50000000000000000 },
14958   { 0.55713468814894307, 20.000000000000000, 0.50000000000000000,
14959           4.0000000000000000, -0.40000000000000002 },
14960   { 0.61481320817757312, 20.000000000000000, 0.50000000000000000,
14961           4.0000000000000000, -0.30000000000000004 },
14962   { 0.69383483410097202, 20.000000000000000, 0.50000000000000000,
14963           4.0000000000000000, -0.19999999999999996 },
14964   { 0.81012002526006033, 20.000000000000000, 0.50000000000000000,
14965           4.0000000000000000, -0.099999999999999978 },
14966   { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
14967           4.0000000000000000, 0.0000000000000000 },
14968   { 1.3622225506603911, 20.000000000000000, 0.50000000000000000,
14969           4.0000000000000000, 0.10000000000000009 },
14970   { 2.2349513086109001, 20.000000000000000, 0.50000000000000000,
14971           4.0000000000000000, 0.19999999999999996 },
14972   { 5.1864917536761723, 20.000000000000000, 0.50000000000000000,
14973           4.0000000000000000, 0.30000000000000004 },
14974   { 21.020560423779411, 20.000000000000000, 0.50000000000000000,
14975           4.0000000000000000, 0.39999999999999991 },
14976   { 175.19649997100612, 20.000000000000000, 0.50000000000000000,
14977           4.0000000000000000, 0.50000000000000000 },
14978   { 3467.1587803688708, 20.000000000000000, 0.50000000000000000,
14979           4.0000000000000000, 0.60000000000000009 },
14980   { 225003.88683445856, 20.000000000000000, 0.50000000000000000,
14981           4.0000000000000000, 0.69999999999999996 },
14982   { 110837674.65652709, 20.000000000000000, 0.50000000000000000,
14983           4.0000000000000000, 0.80000000000000004 },
14984   { 6688966964170.6807, 20.000000000000000, 0.50000000000000000,
14985           4.0000000000000000, 0.89999999999999991 },
14986 };
14987 
14988 // Test function for a=20.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
14989 template <typename Tp>
test217()14990 void test217()
14991 {
14992   const Tp eps = std::numeric_limits<Tp>::epsilon();
14993   Tp max_abs_diff = -Tp(1);
14994   Tp max_abs_frac = -Tp(1);
14995   unsigned int num_datum = sizeof(data217)
14996                          / sizeof(testcase_hyperg<double>);
14997   for (unsigned int i = 0; i < num_datum; ++i)
14998     {
14999       const Tp f = std::tr1::hyperg(Tp(data217[i].a), Tp(data217[i].b),
15000                    Tp(data217[i].c), Tp(data217[i].x));
15001       const Tp f0 = data217[i].f0;
15002       const Tp diff = f - f0;
15003       if (std::abs(diff) > max_abs_diff)
15004         max_abs_diff = std::abs(diff);
15005       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15006         {
15007           const Tp frac = diff / f0;
15008           if (std::abs(frac) > max_abs_frac)
15009             max_abs_frac = std::abs(frac);
15010         }
15011     }
15012   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15013 }
15014 
15015 // Test data for a=20.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
15016 testcase_hyperg<double> data218[] = {
15017   { 0.48716309885816761, 20.000000000000000, 0.50000000000000000,
15018           6.0000000000000000, -0.90000000000000002 },
15019   { 0.50965859152542281, 20.000000000000000, 0.50000000000000000,
15020           6.0000000000000000, -0.80000000000000004 },
15021   { 0.53554809210658971, 20.000000000000000, 0.50000000000000000,
15022           6.0000000000000000, -0.69999999999999996 },
15023   { 0.56576689207507136, 20.000000000000000, 0.50000000000000000,
15024           6.0000000000000000, -0.59999999999999998 },
15025   { 0.60164849637133688, 20.000000000000000, 0.50000000000000000,
15026           6.0000000000000000, -0.50000000000000000 },
15027   { 0.64516711595404375, 20.000000000000000, 0.50000000000000000,
15028           6.0000000000000000, -0.40000000000000002 },
15029   { 0.69938278735493542, 20.000000000000000, 0.50000000000000000,
15030           6.0000000000000000, -0.30000000000000004 },
15031   { 0.76931621518401860, 20.000000000000000, 0.50000000000000000,
15032           6.0000000000000000, -0.19999999999999996 },
15033   { 0.86381808725530695, 20.000000000000000, 0.50000000000000000,
15034           6.0000000000000000, -0.099999999999999978 },
15035   { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
15036           6.0000000000000000, 0.0000000000000000 },
15037   { 1.2152051956815531, 20.000000000000000, 0.50000000000000000,
15038           6.0000000000000000, 0.10000000000000009 },
15039   { 1.6052546785425543, 20.000000000000000, 0.50000000000000000,
15040           6.0000000000000000, 0.19999999999999996 },
15041   { 2.4765586046012635, 20.000000000000000, 0.50000000000000000,
15042           6.0000000000000000, 0.30000000000000004 },
15043   { 5.1564492216997486, 20.000000000000000, 0.50000000000000000,
15044           6.0000000000000000, 0.39999999999999991 },
15045   { 18.446158392136365, 20.000000000000000, 0.50000000000000000,
15046           6.0000000000000000, 0.50000000000000000 },
15047   { 150.44577670123971, 20.000000000000000, 0.50000000000000000,
15048           6.0000000000000000, 0.60000000000000009 },
15049   { 3862.6317400115768, 20.000000000000000, 0.50000000000000000,
15050           6.0000000000000000, 0.69999999999999996 },
15051   { 632428.34833625401, 20.000000000000000, 0.50000000000000000,
15052           6.0000000000000000, 0.80000000000000004 },
15053   { 7426927663.3808765, 20.000000000000000, 0.50000000000000000,
15054           6.0000000000000000, 0.89999999999999991 },
15055 };
15056 
15057 // Test function for a=20.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
15058 template <typename Tp>
test218()15059 void test218()
15060 {
15061   const Tp eps = std::numeric_limits<Tp>::epsilon();
15062   Tp max_abs_diff = -Tp(1);
15063   Tp max_abs_frac = -Tp(1);
15064   unsigned int num_datum = sizeof(data218)
15065                          / sizeof(testcase_hyperg<double>);
15066   for (unsigned int i = 0; i < num_datum; ++i)
15067     {
15068       const Tp f = std::tr1::hyperg(Tp(data218[i].a), Tp(data218[i].b),
15069                    Tp(data218[i].c), Tp(data218[i].x));
15070       const Tp f0 = data218[i].f0;
15071       const Tp diff = f - f0;
15072       if (std::abs(diff) > max_abs_diff)
15073         max_abs_diff = std::abs(diff);
15074       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15075         {
15076           const Tp frac = diff / f0;
15077           if (std::abs(frac) > max_abs_frac)
15078             max_abs_frac = std::abs(frac);
15079         }
15080     }
15081   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15082 }
15083 
15084 // Test data for a=20.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
15085 testcase_hyperg<double> data219[] = {
15086   { 0.54703266209548362, 20.000000000000000, 0.50000000000000000,
15087           8.0000000000000000, -0.90000000000000002 },
15088   { 0.56997321774144971, 20.000000000000000, 0.50000000000000000,
15089           8.0000000000000000, -0.80000000000000004 },
15090   { 0.59603026159654970, 20.000000000000000, 0.50000000000000000,
15091           8.0000000000000000, -0.69999999999999996 },
15092   { 0.62596978851120511, 20.000000000000000, 0.50000000000000000,
15093           8.0000000000000000, -0.59999999999999998 },
15094   { 0.66084565876898926, 20.000000000000000, 0.50000000000000000,
15095           8.0000000000000000, -0.50000000000000000 },
15096   { 0.70215256667232839, 20.000000000000000, 0.50000000000000000,
15097           8.0000000000000000, -0.40000000000000002 },
15098   { 0.75208916592008568, 20.000000000000000, 0.50000000000000000,
15099           8.0000000000000000, -0.30000000000000004 },
15100   { 0.81403631111658648, 20.000000000000000, 0.50000000000000000,
15101           8.0000000000000000, -0.19999999999999996 },
15102   { 0.89348608489854608, 20.000000000000000, 0.50000000000000000,
15103           8.0000000000000000, -0.099999999999999978 },
15104   { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
15105           8.0000000000000000, 0.0000000000000000 },
15106   { 1.1517793185139173, 20.000000000000000, 0.50000000000000000,
15107           8.0000000000000000, 0.10000000000000009 },
15108   { 1.3878110313656598, 20.000000000000000, 0.50000000000000000,
15109           8.0000000000000000, 0.19999999999999996 },
15110   { 1.8061071794572381, 20.000000000000000, 0.50000000000000000,
15111           8.0000000000000000, 0.30000000000000004 },
15112   { 2.7148594517859586, 20.000000000000000, 0.50000000000000000,
15113           8.0000000000000000, 0.39999999999999991 },
15114   { 5.4529435709049361, 20.000000000000000, 0.50000000000000000,
15115           8.0000000000000000, 0.50000000000000000 },
15116   { 19.487310275377109, 20.000000000000000, 0.50000000000000000,
15117           8.0000000000000000, 0.60000000000000009 },
15118   { 191.69079165937470, 20.000000000000000, 0.50000000000000000,
15119           8.0000000000000000, 0.69999999999999996 },
15120   { 10218.543981792311, 20.000000000000000, 0.50000000000000000,
15121           8.0000000000000000, 0.80000000000000004 },
15122   { 23160836.646583911, 20.000000000000000, 0.50000000000000000,
15123           8.0000000000000000, 0.89999999999999991 },
15124 };
15125 
15126 // Test function for a=20.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
15127 template <typename Tp>
test219()15128 void test219()
15129 {
15130   const Tp eps = std::numeric_limits<Tp>::epsilon();
15131   Tp max_abs_diff = -Tp(1);
15132   Tp max_abs_frac = -Tp(1);
15133   unsigned int num_datum = sizeof(data219)
15134                          / sizeof(testcase_hyperg<double>);
15135   for (unsigned int i = 0; i < num_datum; ++i)
15136     {
15137       const Tp f = std::tr1::hyperg(Tp(data219[i].a), Tp(data219[i].b),
15138                    Tp(data219[i].c), Tp(data219[i].x));
15139       const Tp f0 = data219[i].f0;
15140       const Tp diff = f - f0;
15141       if (std::abs(diff) > max_abs_diff)
15142         max_abs_diff = std::abs(diff);
15143       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15144         {
15145           const Tp frac = diff / f0;
15146           if (std::abs(frac) > max_abs_frac)
15147             max_abs_frac = std::abs(frac);
15148         }
15149     }
15150   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15151 }
15152 
15153 // Test data for a=20.000000000000000, b=0.50000000000000000, c=10.000000000000000.
15154 testcase_hyperg<double> data220[] = {
15155   { 0.59292067298616002, 20.000000000000000, 0.50000000000000000,
15156           10.000000000000000, -0.90000000000000002 },
15157   { 0.61572496720679915, 20.000000000000000, 0.50000000000000000,
15158           10.000000000000000, -0.80000000000000004 },
15159   { 0.64135339122875623, 20.000000000000000, 0.50000000000000000,
15160           10.000000000000000, -0.69999999999999996 },
15161   { 0.67043457419280483, 20.000000000000000, 0.50000000000000000,
15162           10.000000000000000, -0.59999999999999998 },
15163   { 0.70380956268170980, 20.000000000000000, 0.50000000000000000,
15164           10.000000000000000, -0.50000000000000000 },
15165   { 0.74263251901495231, 20.000000000000000, 0.50000000000000000,
15166           10.000000000000000, -0.40000000000000002 },
15167   { 0.78853555445528278, 20.000000000000000, 0.50000000000000000,
15168           10.000000000000000, -0.30000000000000004 },
15169   { 0.84391122775673766, 20.000000000000000, 0.50000000000000000,
15170           10.000000000000000, -0.19999999999999996 },
15171   { 0.91242401018807406, 20.000000000000000, 0.50000000000000000,
15172           10.000000000000000, -0.099999999999999978 },
15173   { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
15174           10.000000000000000, 0.0000000000000000 },
15175   { 1.1169059681274873, 20.000000000000000, 0.50000000000000000,
15176           10.000000000000000, 0.10000000000000009 },
15177   { 1.2825928301302667, 20.000000000000000, 0.50000000000000000,
15178           10.000000000000000, 0.19999999999999996 },
15179   { 1.5385937789924939, 20.000000000000000, 0.50000000000000000,
15180           10.000000000000000, 0.30000000000000004 },
15181   { 1.9895771187893898, 20.000000000000000, 0.50000000000000000,
15182           10.000000000000000, 0.39999999999999991 },
15183   { 2.9707335806970168, 20.000000000000000, 0.50000000000000000,
15184           10.000000000000000, 0.50000000000000000 },
15185   { 6.0299506157180467, 20.000000000000000, 0.50000000000000000,
15186           10.000000000000000, 0.60000000000000009 },
15187   { 24.259090336955577, 20.000000000000000, 0.50000000000000000,
15188           10.000000000000000, 0.69999999999999996 },
15189   { 406.27267173257223, 20.000000000000000, 0.50000000000000000,
15190           10.000000000000000, 0.80000000000000004 },
15191   { 174330.03997220192, 20.000000000000000, 0.50000000000000000,
15192           10.000000000000000, 0.89999999999999991 },
15193 };
15194 
15195 // Test function for a=20.000000000000000, b=0.50000000000000000, c=10.000000000000000.
15196 template <typename Tp>
test220()15197 void test220()
15198 {
15199   const Tp eps = std::numeric_limits<Tp>::epsilon();
15200   Tp max_abs_diff = -Tp(1);
15201   Tp max_abs_frac = -Tp(1);
15202   unsigned int num_datum = sizeof(data220)
15203                          / sizeof(testcase_hyperg<double>);
15204   for (unsigned int i = 0; i < num_datum; ++i)
15205     {
15206       const Tp f = std::tr1::hyperg(Tp(data220[i].a), Tp(data220[i].b),
15207                    Tp(data220[i].c), Tp(data220[i].x));
15208       const Tp f0 = data220[i].f0;
15209       const Tp diff = f - f0;
15210       if (std::abs(diff) > max_abs_diff)
15211         max_abs_diff = std::abs(diff);
15212       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15213         {
15214           const Tp frac = diff / f0;
15215           if (std::abs(frac) > max_abs_frac)
15216             max_abs_frac = std::abs(frac);
15217         }
15218     }
15219   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15220 }
15221 
15222 // Test data for a=20.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
15223 testcase_hyperg<double> data221[] = {
15224   { 0.058479236576646373, 20.000000000000000, 1.0000000000000000,
15225           2.0000000000000000, -0.90000000000000002 },
15226   { 0.065788544763137669, 20.000000000000000, 1.0000000000000000,
15227           2.0000000000000000, -0.80000000000000004 },
15228   { 0.075184824937824662, 20.000000000000000, 1.0000000000000000,
15229           2.0000000000000000, -0.69999999999999996 },
15230   { 0.087707688693157260, 20.000000000000000, 1.0000000000000000,
15231           2.0000000000000000, -0.59999999999999998 },
15232   { 0.10521567442213345, 20.000000000000000, 1.0000000000000000,
15233           2.0000000000000000, -0.50000000000000000 },
15234   { 0.13135877960541525, 20.000000000000000, 1.0000000000000000,
15235           2.0000000000000000, -0.40000000000000002 },
15236   { 0.17423854066297104, 20.000000000000000, 1.0000000000000000,
15237           2.0000000000000000, -0.30000000000000004 },
15238   { 0.25492082527223525, 20.000000000000000, 1.0000000000000000,
15239           2.0000000000000000, -0.19999999999999996 },
15240   { 0.44025895219654843, 20.000000000000000, 1.0000000000000000,
15241           2.0000000000000000, -0.099999999999999978 },
15242   { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
15243           2.0000000000000000, 0.0000000000000000 },
15244   { 3.3698615820910360, 20.000000000000000, 1.0000000000000000,
15245           2.0000000000000000, 0.10000000000000009 },
15246   { 17.997089220808483, 20.000000000000000, 1.0000000000000000,
15247           2.0000000000000000, 0.19999999999999996 },
15248   { 153.73298291118951, 20.000000000000000, 1.0000000000000000,
15249           2.0000000000000000, 0.30000000000000004 },
15250   { 2159.1667587825627, 20.000000000000000, 1.0000000000000000,
15251           2.0000000000000000, 0.39999999999999991 },
15252   { 55188.105263157879, 20.000000000000000, 1.0000000000000000,
15253           2.0000000000000000, 0.50000000000000000 },
15254   { 3191209.3921857267, 20.000000000000000, 1.0000000000000000,
15255           2.0000000000000000, 0.60000000000000009 },
15256   { 646910975.29152656, 20.000000000000000, 1.0000000000000000,
15257           2.0000000000000000, 0.69999999999999996 },
15258   { 1254834626850.2659, 20.000000000000000, 1.0000000000000000,
15259           2.0000000000000000, 0.80000000000000004 },
15260   { 5.8479532163741414e+17, 20.000000000000000, 1.0000000000000000,
15261           2.0000000000000000, 0.89999999999999991 },
15262 };
15263 
15264 // Test function for a=20.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
15265 template <typename Tp>
test221()15266 void test221()
15267 {
15268   const Tp eps = std::numeric_limits<Tp>::epsilon();
15269   Tp max_abs_diff = -Tp(1);
15270   Tp max_abs_frac = -Tp(1);
15271   unsigned int num_datum = sizeof(data221)
15272                          / sizeof(testcase_hyperg<double>);
15273   for (unsigned int i = 0; i < num_datum; ++i)
15274     {
15275       const Tp f = std::tr1::hyperg(Tp(data221[i].a), Tp(data221[i].b),
15276                    Tp(data221[i].c), Tp(data221[i].x));
15277       const Tp f0 = data221[i].f0;
15278       const Tp diff = f - f0;
15279       if (std::abs(diff) > max_abs_diff)
15280         max_abs_diff = std::abs(diff);
15281       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15282         {
15283           const Tp frac = diff / f0;
15284           if (std::abs(frac) > max_abs_frac)
15285             max_abs_frac = std::abs(frac);
15286         }
15287     }
15288   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15289 }
15290 
15291 // Test data for a=20.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
15292 testcase_hyperg<double> data222[] = {
15293   { 0.15519511120894947, 20.000000000000000, 1.0000000000000000,
15294           4.0000000000000000, -0.90000000000000002 },
15295   { 0.17197165701692899, 20.000000000000000, 1.0000000000000000,
15296           4.0000000000000000, -0.80000000000000004 },
15297   { 0.19276847315207363, 20.000000000000000, 1.0000000000000000,
15298           4.0000000000000000, -0.69999999999999996 },
15299   { 0.21920107206179093, 20.000000000000000, 1.0000000000000000,
15300           4.0000000000000000, -0.59999999999999998 },
15301   { 0.25386158960390581, 20.000000000000000, 1.0000000000000000,
15302           4.0000000000000000, -0.50000000000000000 },
15303   { 0.30115970686600657, 20.000000000000000, 1.0000000000000000,
15304           4.0000000000000000, -0.40000000000000002 },
15305   { 0.36916408142057117, 20.000000000000000, 1.0000000000000000,
15306           4.0000000000000000, -0.30000000000000004 },
15307   { 0.47406175901569558, 20.000000000000000, 1.0000000000000000,
15308           4.0000000000000000, -0.19999999999999996 },
15309   { 0.65237908266239919, 20.000000000000000, 1.0000000000000000,
15310           4.0000000000000000, -0.099999999999999978 },
15311   { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
15312           4.0000000000000000, 0.0000000000000000 },
15313   { 1.8227213362622299, 20.000000000000000, 1.0000000000000000,
15314           4.0000000000000000, 0.10000000000000009 },
15315   { 4.3716358339791332, 20.000000000000000, 1.0000000000000000,
15316           4.0000000000000000, 0.19999999999999996 },
15317   { 15.670841312959222, 20.000000000000000, 1.0000000000000000,
15318           4.0000000000000000, 0.30000000000000004 },
15319   { 94.742651122760179, 20.000000000000000, 1.0000000000000000,
15320           4.0000000000000000, 0.39999999999999991 },
15321   { 1081.7275541795671, 20.000000000000000, 1.0000000000000000,
15322           4.0000000000000000, 0.50000000000000000 },
15323   { 27809.787731465960, 20.000000000000000, 1.0000000000000000,
15324           4.0000000000000000, 0.60000000000000009 },
15325   { 2329811.1715181042, 20.000000000000000, 1.0000000000000000,
15326           4.0000000000000000, 0.69999999999999996 },
15327   { 1537787532.6780224, 20.000000000000000, 1.0000000000000000,
15328           4.0000000000000000, 0.80000000000000004 },
15329   { 141562653506999.88, 20.000000000000000, 1.0000000000000000,
15330           4.0000000000000000, 0.89999999999999991 },
15331 };
15332 
15333 // Test function for a=20.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
15334 template <typename Tp>
test222()15335 void test222()
15336 {
15337   const Tp eps = std::numeric_limits<Tp>::epsilon();
15338   Tp max_abs_diff = -Tp(1);
15339   Tp max_abs_frac = -Tp(1);
15340   unsigned int num_datum = sizeof(data222)
15341                          / sizeof(testcase_hyperg<double>);
15342   for (unsigned int i = 0; i < num_datum; ++i)
15343     {
15344       const Tp f = std::tr1::hyperg(Tp(data222[i].a), Tp(data222[i].b),
15345                    Tp(data222[i].c), Tp(data222[i].x));
15346       const Tp f0 = data222[i].f0;
15347       const Tp diff = f - f0;
15348       if (std::abs(diff) > max_abs_diff)
15349         max_abs_diff = std::abs(diff);
15350       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15351         {
15352           const Tp frac = diff / f0;
15353           if (std::abs(frac) > max_abs_frac)
15354             max_abs_frac = std::abs(frac);
15355         }
15356     }
15357   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15358 }
15359 
15360 // Test data for a=20.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
15361 testcase_hyperg<double> data223[] = {
15362   { 0.23253645591196570, 20.000000000000000, 1.0000000000000000,
15363           6.0000000000000000, -0.90000000000000002 },
15364   { 0.25484220947068353, 20.000000000000000, 1.0000000000000000,
15365           6.0000000000000000, -0.80000000000000004 },
15366   { 0.28181987881113829, 20.000000000000000, 1.0000000000000000,
15367           6.0000000000000000, -0.69999999999999996 },
15368   { 0.31508211677735765, 20.000000000000000, 1.0000000000000000,
15369           6.0000000000000000, -0.59999999999999998 },
15370   { 0.35706285886959599, 20.000000000000000, 1.0000000000000000,
15371           6.0000000000000000, -0.50000000000000000 },
15372   { 0.41160053409238195, 20.000000000000000, 1.0000000000000000,
15373           6.0000000000000000, -0.40000000000000002 },
15374   { 0.48508083111181949, 20.000000000000000, 1.0000000000000000,
15375           6.0000000000000000, -0.30000000000000004 },
15376   { 0.58885194371375260, 20.000000000000000, 1.0000000000000000,
15377           6.0000000000000000, -0.19999999999999996 },
15378   { 0.74482241684585748, 20.000000000000000, 1.0000000000000000,
15379           6.0000000000000000, -0.099999999999999978 },
15380   { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
15381           6.0000000000000000, 0.0000000000000000 },
15382   { 1.4700356864367146, 20.000000000000000, 1.0000000000000000,
15383           6.0000000000000000, 0.10000000000000009 },
15384   { 2.4955144453055143, 20.000000000000000, 1.0000000000000000,
15385           6.0000000000000000, 0.19999999999999996 },
15386   { 5.3506594845833471, 20.000000000000000, 1.0000000000000000,
15387           6.0000000000000000, 0.30000000000000004 },
15388   { 16.618413752184221, 20.000000000000000, 1.0000000000000000,
15389           6.0000000000000000, 0.39999999999999991 },
15390   { 89.310629514963878, 20.000000000000000, 1.0000000000000000,
15391           6.0000000000000000, 0.50000000000000000 },
15392   { 1029.3439900542960, 20.000000000000000, 1.0000000000000000,
15393           6.0000000000000000, 0.60000000000000009 },
15394   { 35659.847863372350, 20.000000000000000, 1.0000000000000000,
15395           6.0000000000000000, 0.69999999999999996 },
15396   { 8009309.6233230168, 20.000000000000000, 1.0000000000000000,
15397           6.0000000000000000, 0.80000000000000004 },
15398   { 145640590027.39731, 20.000000000000000, 1.0000000000000000,
15399           6.0000000000000000, 0.89999999999999991 },
15400 };
15401 
15402 // Test function for a=20.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
15403 template <typename Tp>
test223()15404 void test223()
15405 {
15406   const Tp eps = std::numeric_limits<Tp>::epsilon();
15407   Tp max_abs_diff = -Tp(1);
15408   Tp max_abs_frac = -Tp(1);
15409   unsigned int num_datum = sizeof(data223)
15410                          / sizeof(testcase_hyperg<double>);
15411   for (unsigned int i = 0; i < num_datum; ++i)
15412     {
15413       const Tp f = std::tr1::hyperg(Tp(data223[i].a), Tp(data223[i].b),
15414                    Tp(data223[i].c), Tp(data223[i].x));
15415       const Tp f0 = data223[i].f0;
15416       const Tp diff = f - f0;
15417       if (std::abs(diff) > max_abs_diff)
15418         max_abs_diff = std::abs(diff);
15419       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15420         {
15421           const Tp frac = diff / f0;
15422           if (std::abs(frac) > max_abs_frac)
15423             max_abs_frac = std::abs(frac);
15424         }
15425     }
15426   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15427 }
15428 
15429 // Test data for a=20.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
15430 testcase_hyperg<double> data224[] = {
15431   { 0.29614148314592498, 20.000000000000000, 1.0000000000000000,
15432           8.0000000000000000, -0.90000000000000002 },
15433   { 0.32176277356430810, 20.000000000000000, 1.0000000000000000,
15434           8.0000000000000000, -0.80000000000000004 },
15435   { 0.35217870475550522, 20.000000000000000, 1.0000000000000000,
15436           8.0000000000000000, -0.69999999999999996 },
15437   { 0.38885270445515091, 20.000000000000000, 1.0000000000000000,
15438           8.0000000000000000, -0.59999999999999998 },
15439   { 0.43389978380608424, 20.000000000000000, 1.0000000000000000,
15440           8.0000000000000000, -0.50000000000000000 },
15441   { 0.49048612522269436, 20.000000000000000, 1.0000000000000000,
15442           8.0000000000000000, -0.40000000000000002 },
15443   { 0.56355539635634611, 20.000000000000000, 1.0000000000000000,
15444           8.0000000000000000, -0.30000000000000004 },
15445   { 0.66123153239117682, 20.000000000000000, 1.0000000000000000,
15446           8.0000000000000000, -0.19999999999999996 },
15447   { 0.79773363961895427, 20.000000000000000, 1.0000000000000000,
15448           8.0000000000000000, -0.099999999999999978 },
15449   { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
15450           8.0000000000000000, 0.0000000000000000 },
15451   { 1.3245132157016595, 20.000000000000000, 1.0000000000000000,
15452           8.0000000000000000, 0.10000000000000009 },
15453   { 1.9065148749742076, 20.000000000000000, 1.0000000000000000,
15454           8.0000000000000000, 0.19999999999999996 },
15455   { 3.1328798652457452, 20.000000000000000, 1.0000000000000000,
15456           8.0000000000000000, 0.30000000000000004 },
15457   { 6.4172532944033476, 20.000000000000000, 1.0000000000000000,
15458           8.0000000000000000, 0.39999999999999991 },
15459   { 19.071683734222436, 20.000000000000000, 1.0000000000000000,
15460           8.0000000000000000, 0.50000000000000000 },
15461   { 104.41989641582512, 20.000000000000000, 1.0000000000000000,
15462           8.0000000000000000, 0.60000000000000009 },
15463   { 1510.5743992324240, 20.000000000000000, 1.0000000000000000,
15464           8.0000000000000000, 0.69999999999999996 },
15465   { 115518.14360562043, 20.000000000000000, 1.0000000000000000,
15466           8.0000000000000000, 0.80000000000000004 },
15467   { 414930455.29173034, 20.000000000000000, 1.0000000000000000,
15468           8.0000000000000000, 0.89999999999999991 },
15469 };
15470 
15471 // Test function for a=20.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
15472 template <typename Tp>
test224()15473 void test224()
15474 {
15475   const Tp eps = std::numeric_limits<Tp>::epsilon();
15476   Tp max_abs_diff = -Tp(1);
15477   Tp max_abs_frac = -Tp(1);
15478   unsigned int num_datum = sizeof(data224)
15479                          / sizeof(testcase_hyperg<double>);
15480   for (unsigned int i = 0; i < num_datum; ++i)
15481     {
15482       const Tp f = std::tr1::hyperg(Tp(data224[i].a), Tp(data224[i].b),
15483                    Tp(data224[i].c), Tp(data224[i].x));
15484       const Tp f0 = data224[i].f0;
15485       const Tp diff = f - f0;
15486       if (std::abs(diff) > max_abs_diff)
15487         max_abs_diff = std::abs(diff);
15488       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15489         {
15490           const Tp frac = diff / f0;
15491           if (std::abs(frac) > max_abs_frac)
15492             max_abs_frac = std::abs(frac);
15493         }
15494     }
15495   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15496 }
15497 
15498 // Test data for a=20.000000000000000, b=1.0000000000000000, c=10.000000000000000.
15499 testcase_hyperg<double> data225[] = {
15500   { 0.34954259539177696, 20.000000000000000, 1.0000000000000000,
15501           10.000000000000000, -0.90000000000000002 },
15502   { 0.37714038609235123, 20.000000000000000, 1.0000000000000000,
15503           10.000000000000000, -0.80000000000000004 },
15504   { 0.40942091659748725, 20.000000000000000, 1.0000000000000000,
15505           10.000000000000000, -0.69999999999999996 },
15506   { 0.44767109606846428, 20.000000000000000, 1.0000000000000000,
15507           10.000000000000000, -0.59999999999999998 },
15508   { 0.49368984777532254, 20.000000000000000, 1.0000000000000000,
15509           10.000000000000000, -0.50000000000000000 },
15510   { 0.55006638216982318, 20.000000000000000, 1.0000000000000000,
15511           10.000000000000000, -0.40000000000000002 },
15512   { 0.62065830207408912, 20.000000000000000, 1.0000000000000000,
15513           10.000000000000000, -0.30000000000000004 },
15514   { 0.71145554513583786, 20.000000000000000, 1.0000000000000000,
15515           10.000000000000000, -0.19999999999999996 },
15516   { 0.83223839666914623, 20.000000000000000, 1.0000000000000000,
15517           10.000000000000000, -0.099999999999999978 },
15518   { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
15519           10.000000000000000, 0.0000000000000000 },
15520   { 1.2466748028187731, 20.000000000000000, 1.0000000000000000,
15521           10.000000000000000, 0.10000000000000009 },
15522   { 1.6386752725021749, 20.000000000000000, 1.0000000000000000,
15523           10.000000000000000, 0.19999999999999996 },
15524   { 2.3340068725479681, 20.000000000000000, 1.0000000000000000,
15525           10.000000000000000, 0.30000000000000004 },
15526   { 3.7848108613132054, 20.000000000000000, 1.0000000000000000,
15527           10.000000000000000, 0.39999999999999991 },
15528   { 7.6754638550304133, 20.000000000000000, 1.0000000000000000,
15529           10.000000000000000, 0.50000000000000000 },
15530   { 23.344217312927277, 20.000000000000000, 1.0000000000000000,
15531           10.000000000000000, 0.60000000000000009 },
15532   { 149.83491198246921, 20.000000000000000, 1.0000000000000000,
15533           10.000000000000000, 0.69999999999999996 },
15534   { 3936.9253501916060, 20.000000000000000, 1.0000000000000000,
15535           10.000000000000000, 0.80000000000000004 },
15536   { 2794143.5036480185, 20.000000000000000, 1.0000000000000000,
15537           10.000000000000000, 0.89999999999999991 },
15538 };
15539 
15540 // Test function for a=20.000000000000000, b=1.0000000000000000, c=10.000000000000000.
15541 template <typename Tp>
test225()15542 void test225()
15543 {
15544   const Tp eps = std::numeric_limits<Tp>::epsilon();
15545   Tp max_abs_diff = -Tp(1);
15546   Tp max_abs_frac = -Tp(1);
15547   unsigned int num_datum = sizeof(data225)
15548                          / sizeof(testcase_hyperg<double>);
15549   for (unsigned int i = 0; i < num_datum; ++i)
15550     {
15551       const Tp f = std::tr1::hyperg(Tp(data225[i].a), Tp(data225[i].b),
15552                    Tp(data225[i].c), Tp(data225[i].x));
15553       const Tp f0 = data225[i].f0;
15554       const Tp diff = f - f0;
15555       if (std::abs(diff) > max_abs_diff)
15556         max_abs_diff = std::abs(diff);
15557       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15558         {
15559           const Tp frac = diff / f0;
15560           if (std::abs(frac) > max_abs_frac)
15561             max_abs_frac = std::abs(frac);
15562         }
15563     }
15564   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15565 }
15566 
15567 // Test data for a=20.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
15568 testcase_hyperg<double> data226[] = {
15569   { 2.6602838683283435e-06, 20.000000000000000, 2.0000000000000000,
15570           2.0000000000000000, -0.90000000000000002 },
15571   { 7.8442223930072316e-06, 20.000000000000000, 2.0000000000000000,
15572           2.0000000000000000, -0.80000000000000004 },
15573   { 2.4604898194634598e-05, 20.000000000000000, 2.0000000000000000,
15574           2.0000000000000000, -0.69999999999999996 },
15575   { 8.2718061255302686e-05, 20.000000000000000, 2.0000000000000000,
15576           2.0000000000000000, -0.59999999999999998 },
15577   { 0.00030072865982171723, 20.000000000000000, 2.0000000000000000,
15578           2.0000000000000000, -0.50000000000000000 },
15579   { 0.0011951964277455193, 20.000000000000000, 2.0000000000000000,
15580           2.0000000000000000, -0.40000000000000002 },
15581   { 0.0052617832469731814, 20.000000000000000, 2.0000000000000000,
15582           2.0000000000000000, -0.30000000000000004 },
15583   { 0.026084053304588847, 20.000000000000000, 2.0000000000000000,
15584           2.0000000000000000, -0.19999999999999996 },
15585   { 0.14864362802414346, 20.000000000000000, 2.0000000000000000,
15586           2.0000000000000000, -0.099999999999999978 },
15587   { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
15588           2.0000000000000000, 0.0000000000000000 },
15589   { 8.2252633399699757, 20.000000000000000, 2.0000000000000000,
15590           2.0000000000000000, 0.10000000000000009 },
15591   { 86.736173798840269, 20.000000000000000, 2.0000000000000000,
15592           2.0000000000000000, 0.19999999999999996 },
15593   { 1253.2542894196865, 20.000000000000000, 2.0000000000000000,
15594           2.0000000000000000, 0.30000000000000004 },
15595   { 27351.112277912434, 20.000000000000000, 2.0000000000000000,
15596           2.0000000000000000, 0.39999999999999991 },
15597   { 1048576.0000000000, 20.000000000000000, 2.0000000000000000,
15598           2.0000000000000000, 0.50000000000000000 },
15599   { 90949470.177293226, 20.000000000000000, 2.0000000000000000,
15600           2.0000000000000000, 0.60000000000000009 },
15601   { 28679719907.924358, 20.000000000000000, 2.0000000000000000,
15602           2.0000000000000000, 0.69999999999999996 },
15603   { 95367431640624.906, 20.000000000000000, 2.0000000000000000,
15604           2.0000000000000000, 0.80000000000000004 },
15605   { 9.9999999999998657e+19, 20.000000000000000, 2.0000000000000000,
15606           2.0000000000000000, 0.89999999999999991 },
15607 };
15608 
15609 // Test function for a=20.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
15610 template <typename Tp>
test226()15611 void test226()
15612 {
15613   const Tp eps = std::numeric_limits<Tp>::epsilon();
15614   Tp max_abs_diff = -Tp(1);
15615   Tp max_abs_frac = -Tp(1);
15616   unsigned int num_datum = sizeof(data226)
15617                          / sizeof(testcase_hyperg<double>);
15618   for (unsigned int i = 0; i < num_datum; ++i)
15619     {
15620       const Tp f = std::tr1::hyperg(Tp(data226[i].a), Tp(data226[i].b),
15621                    Tp(data226[i].c), Tp(data226[i].x));
15622       const Tp f0 = data226[i].f0;
15623       const Tp diff = f - f0;
15624       if (std::abs(diff) > max_abs_diff)
15625         max_abs_diff = std::abs(diff);
15626       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15627         {
15628           const Tp frac = diff / f0;
15629           if (std::abs(frac) > max_abs_frac)
15630             max_abs_frac = std::abs(frac);
15631         }
15632     }
15633   VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
15634 }
15635 
15636 // Test data for a=20.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
15637 testcase_hyperg<double> data227[] = {
15638   { 0.018828092583720951, 20.000000000000000, 2.0000000000000000,
15639           4.0000000000000000, -0.90000000000000002 },
15640   { 0.023381944060455316, 20.000000000000000, 2.0000000000000000,
15641           4.0000000000000000, -0.80000000000000004 },
15642   { 0.029789623984280793, 20.000000000000000, 2.0000000000000000,
15643           4.0000000000000000, -0.69999999999999996 },
15644   { 0.039191021482500497, 20.000000000000000, 2.0000000000000000,
15645           4.0000000000000000, -0.59999999999999998 },
15646   { 0.053727813036721514, 20.000000000000000, 2.0000000000000000,
15647           4.0000000000000000, -0.50000000000000000 },
15648   { 0.077762010061669024, 20.000000000000000, 2.0000000000000000,
15649           4.0000000000000000, -0.40000000000000002 },
15650   { 0.12110505620123302, 20.000000000000000, 2.0000000000000000,
15651           4.0000000000000000, -0.30000000000000004 },
15652   { 0.20870149809080590, 20.000000000000000, 2.0000000000000000,
15653           4.0000000000000000, -0.19999999999999996 },
15654   { 0.41429234328785769, 20.000000000000000, 2.0000000000000000,
15655           4.0000000000000000, -0.099999999999999978 },
15656   { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
15657           4.0000000000000000, 0.0000000000000000 },
15658   { 3.1308087404153113, 20.000000000000000, 2.0000000000000000,
15659           4.0000000000000000, 0.10000000000000009 },
15660   { 13.586180626453050, 20.000000000000000, 2.0000000000000000,
15661           4.0000000000000000, 0.19999999999999996 },
15662   { 87.117304082784415, 20.000000000000000, 2.0000000000000000,
15663           4.0000000000000000, 0.30000000000000004 },
15664   { 889.26474381242826, 20.000000000000000, 2.0000000000000000,
15665           4.0000000000000000, 0.39999999999999991 },
15666   { 16231.913312693494, 20.000000000000000, 2.0000000000000000,
15667           4.0000000000000000, 0.50000000000000000 },
15668   { 653537.51168945129, 20.000000000000000, 2.0000000000000000,
15669           4.0000000000000000, 0.60000000000000009 },
15670   { 87756230.793848589, 20.000000000000000, 2.0000000000000000,
15671           4.0000000000000000, 0.69999999999999996 },
15672   { 101493977171.74945, 20.000000000000000, 2.0000000000000000,
15673           4.0000000000000000, 0.80000000000000004 },
15674   { 21375960679556916., 20.000000000000000, 2.0000000000000000,
15675           4.0000000000000000, 0.89999999999999991 },
15676 };
15677 
15678 // Test function for a=20.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
15679 template <typename Tp>
test227()15680 void test227()
15681 {
15682   const Tp eps = std::numeric_limits<Tp>::epsilon();
15683   Tp max_abs_diff = -Tp(1);
15684   Tp max_abs_frac = -Tp(1);
15685   unsigned int num_datum = sizeof(data227)
15686                          / sizeof(testcase_hyperg<double>);
15687   for (unsigned int i = 0; i < num_datum; ++i)
15688     {
15689       const Tp f = std::tr1::hyperg(Tp(data227[i].a), Tp(data227[i].b),
15690                    Tp(data227[i].c), Tp(data227[i].x));
15691       const Tp f0 = data227[i].f0;
15692       const Tp diff = f - f0;
15693       if (std::abs(diff) > max_abs_diff)
15694         max_abs_diff = std::abs(diff);
15695       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15696         {
15697           const Tp frac = diff / f0;
15698           if (std::abs(frac) > max_abs_frac)
15699             max_abs_frac = std::abs(frac);
15700         }
15701     }
15702   VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
15703 }
15704 
15705 // Test data for a=20.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
15706 testcase_hyperg<double> data228[] = {
15707   { 0.049200410661854252, 20.000000000000000, 2.0000000000000000,
15708           6.0000000000000000, -0.90000000000000002 },
15709   { 0.059460876757152226, 20.000000000000000, 2.0000000000000000,
15710           6.0000000000000000, -0.80000000000000004 },
15711   { 0.073244762686653350, 20.000000000000000, 2.0000000000000000,
15712           6.0000000000000000, -0.69999999999999996 },
15713   { 0.092334626017932922, 20.000000000000000, 2.0000000000000000,
15714           6.0000000000000000, -0.59999999999999998 },
15715   { 0.11976760350696837, 20.000000000000000, 2.0000000000000000,
15716           6.0000000000000000, -0.50000000000000000 },
15717   { 0.16102414609169383, 20.000000000000000, 2.0000000000000000,
15718           6.0000000000000000, -0.40000000000000002 },
15719   { 0.22670456785796222, 20.000000000000000, 2.0000000000000000,
15720           6.0000000000000000, -0.30000000000000004 },
15721   { 0.33912903252727361, 20.000000000000000, 2.0000000000000000,
15722           6.0000000000000000, -0.19999999999999996 },
15723   { 0.55049794600858060, 20.000000000000000, 2.0000000000000000,
15724           6.0000000000000000, -0.099999999999999978 },
15725   { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
15726           6.0000000000000000, 0.0000000000000000 },
15727   { 2.1254722872032232, 20.000000000000000, 2.0000000000000000,
15728           6.0000000000000000, 0.10000000000000009 },
15729   { 5.6261213886736172, 20.000000000000000, 2.0000000000000000,
15730           6.0000000000000000, 0.19999999999999996 },
15731   { 20.137315891130996, 20.000000000000000, 2.0000000000000000,
15732           6.0000000000000000, 0.30000000000000004 },
15733   { 108.04381584643853, 20.000000000000000, 2.0000000000000000,
15734           6.0000000000000000, 0.39999999999999991 },
15735   { 992.41692466460245, 20.000000000000000, 2.0000000000000000,
15736           6.0000000000000000, 0.50000000000000000 },
15737   { 19055.363816004465, 20.000000000000000, 2.0000000000000000,
15738           6.0000000000000000, 0.60000000000000009 },
15739   { 1105471.9504312086, 20.000000000000000, 2.0000000000000000,
15740           6.0000000000000000, 0.69999999999999996 },
15741   { 448521363.90608919, 20.000000000000000, 2.0000000000000000,
15742           6.0000000000000000, 0.80000000000000004 },
15743   { 19078917293639.004, 20.000000000000000, 2.0000000000000000,
15744           6.0000000000000000, 0.89999999999999991 },
15745 };
15746 
15747 // Test function for a=20.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
15748 template <typename Tp>
test228()15749 void test228()
15750 {
15751   const Tp eps = std::numeric_limits<Tp>::epsilon();
15752   Tp max_abs_diff = -Tp(1);
15753   Tp max_abs_frac = -Tp(1);
15754   unsigned int num_datum = sizeof(data228)
15755                          / sizeof(testcase_hyperg<double>);
15756   for (unsigned int i = 0; i < num_datum; ++i)
15757     {
15758       const Tp f = std::tr1::hyperg(Tp(data228[i].a), Tp(data228[i].b),
15759                    Tp(data228[i].c), Tp(data228[i].x));
15760       const Tp f0 = data228[i].f0;
15761       const Tp diff = f - f0;
15762       if (std::abs(diff) > max_abs_diff)
15763         max_abs_diff = std::abs(diff);
15764       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15765         {
15766           const Tp frac = diff / f0;
15767           if (std::abs(frac) > max_abs_frac)
15768             max_abs_frac = std::abs(frac);
15769         }
15770     }
15771   VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
15772 }
15773 
15774 // Test data for a=20.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
15775 testcase_hyperg<double> data229[] = {
15776   { 0.083753547015334745, 20.000000000000000, 2.0000000000000000,
15777           8.0000000000000000, -0.90000000000000002 },
15778   { 0.099238444687035701, 20.000000000000000, 2.0000000000000000,
15779           8.0000000000000000, -0.80000000000000004 },
15780   { 0.11938294012867758, 20.000000000000000, 2.0000000000000000,
15781           8.0000000000000000, -0.69999999999999996 },
15782   { 0.14622683905023326, 20.000000000000000, 2.0000000000000000,
15783           8.0000000000000000, -0.59999999999999998 },
15784   { 0.18303556733713025, 20.000000000000000, 2.0000000000000000,
15785           8.0000000000000000, -0.50000000000000000 },
15786   { 0.23527764069382409, 20.000000000000000, 2.0000000000000000,
15787           8.0000000000000000, -0.40000000000000002 },
15788   { 0.31261681740827085, 20.000000000000000, 2.0000000000000000,
15789           8.0000000000000000, -0.30000000000000004 },
15790   { 0.43327581880538862, 20.000000000000000, 2.0000000000000000,
15791           8.0000000000000000, -0.19999999999999996 },
15792   { 0.63445840637296658, 20.000000000000000, 2.0000000000000000,
15793           8.0000000000000000, -0.099999999999999978 },
15794   { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
15795           8.0000000000000000, 0.0000000000000000 },
15796   { 1.7438842395813297, 20.000000000000000, 2.0000000000000000,
15797           8.0000000000000000, 0.10000000000000009 },
15798   { 3.5070840938209269, 20.000000000000000, 2.0000000000000000,
15799           8.0000000000000000, 0.19999999999999996 },
15800   { 8.6573372006089713, 20.000000000000000, 2.0000000000000000,
15801           8.0000000000000000, 0.30000000000000004 },
15802   { 28.779342118408906, 20.000000000000000, 2.0000000000000000,
15803           8.0000000000000000, 0.39999999999999991 },
15804   { 147.50178613955714, 20.000000000000000, 2.0000000000000000,
15805           8.0000000000000000, 0.50000000000000000 },
15806   { 1427.1686016136398, 20.000000000000000, 2.0000000000000000,
15807           8.0000000000000000, 0.60000000000000009 },
15808   { 36780.643714655642, 20.000000000000000, 2.0000000000000000,
15809           8.0000000000000000, 0.69999999999999996 },
15810   { 5313869.6058585485, 20.000000000000000, 2.0000000000000000,
15811           8.0000000000000000, 0.80000000000000004 },
15812   { 46057280607.381966, 20.000000000000000, 2.0000000000000000,
15813           8.0000000000000000, 0.89999999999999991 },
15814 };
15815 
15816 // Test function for a=20.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
15817 template <typename Tp>
test229()15818 void test229()
15819 {
15820   const Tp eps = std::numeric_limits<Tp>::epsilon();
15821   Tp max_abs_diff = -Tp(1);
15822   Tp max_abs_frac = -Tp(1);
15823   unsigned int num_datum = sizeof(data229)
15824                          / sizeof(testcase_hyperg<double>);
15825   for (unsigned int i = 0; i < num_datum; ++i)
15826     {
15827       const Tp f = std::tr1::hyperg(Tp(data229[i].a), Tp(data229[i].b),
15828                    Tp(data229[i].c), Tp(data229[i].x));
15829       const Tp f0 = data229[i].f0;
15830       const Tp diff = f - f0;
15831       if (std::abs(diff) > max_abs_diff)
15832         max_abs_diff = std::abs(diff);
15833       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15834         {
15835           const Tp frac = diff / f0;
15836           if (std::abs(frac) > max_abs_frac)
15837             max_abs_frac = std::abs(frac);
15838         }
15839     }
15840   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15841 }
15842 
15843 // Test data for a=20.000000000000000, b=2.0000000000000000, c=10.000000000000000.
15844 testcase_hyperg<double> data230[] = {
15845   { 0.11920045035073683, 20.000000000000000, 2.0000000000000000,
15846           10.000000000000000, -0.90000000000000002 },
15847   { 0.13907946814302774, 20.000000000000000, 2.0000000000000000,
15848           10.000000000000000, -0.80000000000000004 },
15849   { 0.16431439792559688, 20.000000000000000, 2.0000000000000000,
15850           10.000000000000000, -0.69999999999999996 },
15851   { 0.19698796016987008, 20.000000000000000, 2.0000000000000000,
15852           10.000000000000000, -0.59999999999999998 },
15853   { 0.24028510928790570, 20.000000000000000, 2.0000000000000000,
15854           10.000000000000000, -0.50000000000000000 },
15855   { 0.29926031296483119, 20.000000000000000, 2.0000000000000000,
15856           10.000000000000000, -0.40000000000000002 },
15857   { 0.38229327814229169, 20.000000000000000, 2.0000000000000000,
15858           10.000000000000000, -0.30000000000000004 },
15859   { 0.50402047283093110, 20.000000000000000, 2.0000000000000000,
15860           10.000000000000000, -0.19999999999999996 },
15861   { 0.69167261179586503, 20.000000000000000, 2.0000000000000000,
15862           10.000000000000000, -0.099999999999999978 },
15863   { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
15864           10.000000000000000, 0.0000000000000000 },
15865   { 1.5503152253394308, 20.000000000000000, 2.0000000000000000,
15866           10.000000000000000, 0.10000000000000009 },
15867   { 2.6469548193635797, 20.000000000000000, 2.0000000000000000,
15868           10.000000000000000, 0.19999999999999996 },
15869   { 5.1882631330566813, 20.000000000000000, 2.0000000000000000,
15870           10.000000000000000, 0.30000000000000004 },
15871   { 12.476792759124516, 20.000000000000000, 2.0000000000000000,
15872           10.000000000000000, 0.39999999999999991 },
15873   { 41.026391565091259, 20.000000000000000, 2.0000000000000000,
15874           10.000000000000000, 0.50000000000000000 },
15875   { 220.92584715988204, 20.000000000000000, 2.0000000000000000,
15876           10.000000000000000, 0.60000000000000009 },
15877   { 2677.0834450236207, 20.000000000000000, 2.0000000000000000,
15878           10.000000000000000, 0.69999999999999996 },
15879   { 141774.31260689779, 20.000000000000000, 2.0000000000000000,
15880           10.000000000000000, 0.80000000000000004 },
15881   { 254267148.83196995, 20.000000000000000, 2.0000000000000000,
15882           10.000000000000000, 0.89999999999999991 },
15883 };
15884 
15885 // Test function for a=20.000000000000000, b=2.0000000000000000, c=10.000000000000000.
15886 template <typename Tp>
test230()15887 void test230()
15888 {
15889   const Tp eps = std::numeric_limits<Tp>::epsilon();
15890   Tp max_abs_diff = -Tp(1);
15891   Tp max_abs_frac = -Tp(1);
15892   unsigned int num_datum = sizeof(data230)
15893                          / sizeof(testcase_hyperg<double>);
15894   for (unsigned int i = 0; i < num_datum; ++i)
15895     {
15896       const Tp f = std::tr1::hyperg(Tp(data230[i].a), Tp(data230[i].b),
15897                    Tp(data230[i].c), Tp(data230[i].x));
15898       const Tp f0 = data230[i].f0;
15899       const Tp diff = f - f0;
15900       if (std::abs(diff) > max_abs_diff)
15901         max_abs_diff = std::abs(diff);
15902       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15903         {
15904           const Tp frac = diff / f0;
15905           if (std::abs(frac) > max_abs_frac)
15906             max_abs_frac = std::abs(frac);
15907         }
15908     }
15909   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15910 }
15911 
15912 // Test data for a=20.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
15913 testcase_hyperg<double> data231[] = {
15914   { -1.8650300348791041e-05, 20.000000000000000, 5.0000000000000000,
15915           2.0000000000000000, -0.90000000000000002 },
15916   { -3.6488008415183135e-05, 20.000000000000000, 5.0000000000000000,
15917           2.0000000000000000, -0.80000000000000004 },
15918   { -6.4614776410999025e-05, 20.000000000000000, 5.0000000000000000,
15919           2.0000000000000000, -0.69999999999999996 },
15920   { -8.4495207102575916e-05, 20.000000000000000, 5.0000000000000000,
15921           2.0000000000000000, -0.59999999999999998 },
15922   { 2.2276197023819217e-05, 20.000000000000000, 5.0000000000000000,
15923           2.0000000000000000, -0.50000000000000000 },
15924   { 0.00070736115111467578, 20.000000000000000, 5.0000000000000000,
15925           2.0000000000000000, -0.40000000000000002 },
15926   { 0.0027829732057272809, 20.000000000000000, 5.0000000000000000,
15927           2.0000000000000000, -0.30000000000000004 },
15928   { 0.0013283545664373570, 20.000000000000000, 5.0000000000000000,
15929           2.0000000000000000, -0.19999999999999996 },
15930   { -0.041767631015048733, 20.000000000000000, 5.0000000000000000,
15931           2.0000000000000000, -0.099999999999999978 },
15932   { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
15933           2.0000000000000000, 0.0000000000000000 },
15934   { 61.311496556100003, 20.000000000000000, 5.0000000000000000,
15935           2.0000000000000000, 0.10000000000000009 },
15936   { 2397.4420539085681, 20.000000000000000, 5.0000000000000000,
15937           2.0000000000000000, 0.19999999999999996 },
15938   { 103687.60998586559, 20.000000000000000, 5.0000000000000000,
15939           2.0000000000000000, 0.30000000000000004 },
15940   { 6247196.6451068865, 20.000000000000000, 5.0000000000000000,
15941           2.0000000000000000, 0.39999999999999991 },
15942   { 656408576.00000000, 20.000000000000000, 5.0000000000000000,
15943           2.0000000000000000, 0.50000000000000000 },
15944   { 165334768098.54715, 20.000000000000000, 5.0000000000000000,
15945           2.0000000000000000, 0.60000000000000009 },
15946   { 175097125520816.81, 20.000000000000000, 5.0000000000000000,
15947           2.0000000000000000, 0.69999999999999996 },
15948   { 2.6818275451660257e+18, 20.000000000000000, 5.0000000000000000,
15949           2.0000000000000000, 0.80000000000000004 },
15950   { 2.9794599999999321e+25, 20.000000000000000, 5.0000000000000000,
15951           2.0000000000000000, 0.89999999999999991 },
15952 };
15953 
15954 // Test function for a=20.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
15955 template <typename Tp>
test231()15956 void test231()
15957 {
15958   const Tp eps = std::numeric_limits<Tp>::epsilon();
15959   Tp max_abs_diff = -Tp(1);
15960   Tp max_abs_frac = -Tp(1);
15961   unsigned int num_datum = sizeof(data231)
15962                          / sizeof(testcase_hyperg<double>);
15963   for (unsigned int i = 0; i < num_datum; ++i)
15964     {
15965       const Tp f = std::tr1::hyperg(Tp(data231[i].a), Tp(data231[i].b),
15966                    Tp(data231[i].c), Tp(data231[i].x));
15967       const Tp f0 = data231[i].f0;
15968       const Tp diff = f - f0;
15969       if (std::abs(diff) > max_abs_diff)
15970         max_abs_diff = std::abs(diff);
15971       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15972         {
15973           const Tp frac = diff / f0;
15974           if (std::abs(frac) > max_abs_frac)
15975             max_abs_frac = std::abs(frac);
15976         }
15977     }
15978   VERIFY(max_abs_frac < Tp(5.0000000000000034e-10));
15979 }
15980 
15981 // Test data for a=20.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
15982 testcase_hyperg<double> data232[] = {
15983   { -3.6403884515183385e-06, 20.000000000000000, 5.0000000000000000,
15984           4.0000000000000000, -0.90000000000000002 },
15985   { -9.5873829247725586e-06, 20.000000000000000, 5.0000000000000000,
15986           4.0000000000000000, -0.80000000000000004 },
15987   { -2.6052245147354694e-05, 20.000000000000000, 5.0000000000000000,
15988           4.0000000000000000, -0.69999999999999996 },
15989   { -7.2378303598294010e-05, 20.000000000000000, 5.0000000000000000,
15990           4.0000000000000000, -0.59999999999999998 },
15991   { -0.00020048577321454082, 20.000000000000000, 5.0000000000000000,
15992           4.0000000000000000, -0.50000000000000000 },
15993   { -0.00051222704046236022, 20.000000000000000, 5.0000000000000000,
15994           4.0000000000000000, -0.40000000000000002 },
15995   { -0.00080950511491911315, 20.000000000000000, 5.0000000000000000,
15996           4.0000000000000000, -0.30000000000000004 },
15997   { 0.0043473422174314449, 20.000000000000000, 5.0000000000000000,
15998           4.0000000000000000, -0.19999999999999996 },
15999   { 0.081078342558623825, 20.000000000000000, 5.0000000000000000,
16000           4.0000000000000000, -0.099999999999999978 },
16001   { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
16002           4.0000000000000000, 0.0000000000000000 },
16003   { 12.794854084397739, 20.000000000000000, 5.0000000000000000,
16004           4.0000000000000000, 0.10000000000000009 },
16005   { 195.15639104739046, 20.000000000000000, 5.0000000000000000,
16006           4.0000000000000000, 0.19999999999999996 },
16007   { 3938.7991953190131, 20.000000000000000, 5.0000000000000000,
16008           4.0000000000000000, 0.30000000000000004 },
16009   { 118521.48653762060, 20.000000000000000, 5.0000000000000000,
16010           4.0000000000000000, 0.39999999999999991 },
16011   { 6291455.9999999972, 20.000000000000000, 5.0000000000000000,
16012           4.0000000000000000, 0.50000000000000000 },
16013   { 773070496.50699198, 20.000000000000000, 5.0000000000000000,
16014           4.0000000000000000, 0.60000000000000009 },
16015   { 363276452167.04102, 20.000000000000000, 5.0000000000000000,
16016           4.0000000000000000, 0.69999999999999996 },
16017   { 2002716064453133.0, 20.000000000000000, 5.0000000000000000,
16018           4.0000000000000000, 0.80000000000000004 },
16019   { 4.5999999999999109e+21, 20.000000000000000, 5.0000000000000000,
16020           4.0000000000000000, 0.89999999999999991 },
16021 };
16022 
16023 // Test function for a=20.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
16024 template <typename Tp>
test232()16025 void test232()
16026 {
16027   const Tp eps = std::numeric_limits<Tp>::epsilon();
16028   Tp max_abs_diff = -Tp(1);
16029   Tp max_abs_frac = -Tp(1);
16030   unsigned int num_datum = sizeof(data232)
16031                          / sizeof(testcase_hyperg<double>);
16032   for (unsigned int i = 0; i < num_datum; ++i)
16033     {
16034       const Tp f = std::tr1::hyperg(Tp(data232[i].a), Tp(data232[i].b),
16035                    Tp(data232[i].c), Tp(data232[i].x));
16036       const Tp f0 = data232[i].f0;
16037       const Tp diff = f - f0;
16038       if (std::abs(diff) > max_abs_diff)
16039         max_abs_diff = std::abs(diff);
16040       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16041         {
16042           const Tp frac = diff / f0;
16043           if (std::abs(frac) > max_abs_frac)
16044             max_abs_frac = std::abs(frac);
16045         }
16046     }
16047   VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
16048 }
16049 
16050 // Test data for a=20.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
16051 testcase_hyperg<double> data233[] = {
16052   { 0.00014313323624069244, 20.000000000000000, 5.0000000000000000,
16053           6.0000000000000000, -0.90000000000000002 },
16054   { 0.00025426183473140697, 20.000000000000000, 5.0000000000000000,
16055           6.0000000000000000, -0.80000000000000004 },
16056   { 0.00048255612836426809, 20.000000000000000, 5.0000000000000000,
16057           6.0000000000000000, -0.69999999999999996 },
16058   { 0.00099096904674788092, 20.000000000000000, 5.0000000000000000,
16059           6.0000000000000000, -0.59999999999999998 },
16060   { 0.0022347805521915607, 20.000000000000000, 5.0000000000000000,
16061           6.0000000000000000, -0.50000000000000000 },
16062   { 0.0056271390060292376, 20.000000000000000, 5.0000000000000000,
16063           6.0000000000000000, -0.40000000000000002 },
16064   { 0.016109059519227226, 20.000000000000000, 5.0000000000000000,
16065           6.0000000000000000, -0.30000000000000004 },
16066   { 0.053453465775608999, 20.000000000000000, 5.0000000000000000,
16067           6.0000000000000000, -0.19999999999999996 },
16068   { 0.20995202901839258, 20.000000000000000, 5.0000000000000000,
16069           6.0000000000000000, -0.099999999999999978 },
16070   { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
16071           6.0000000000000000, 0.0000000000000000 },
16072   { 5.9534372167648799, 20.000000000000000, 5.0000000000000000,
16073           6.0000000000000000, 0.10000000000000009 },
16074   { 46.157632071205875, 20.000000000000000, 5.0000000000000000,
16075           6.0000000000000000, 0.19999999999999996 },
16076   { 494.32074431164915, 20.000000000000000, 5.0000000000000000,
16077           6.0000000000000000, 0.30000000000000004 },
16078   { 7989.5277611775946, 20.000000000000000, 5.0000000000000000,
16079           6.0000000000000000, 0.39999999999999991 },
16080   { 224179.55830753347, 20.000000000000000, 5.0000000000000000,
16081           6.0000000000000000, 0.50000000000000000 },
16082   { 13848144.485282511, 20.000000000000000, 5.0000000000000000,
16083           6.0000000000000000, 0.60000000000000009 },
16084   { 2948587692.8891716, 20.000000000000000, 5.0000000000000000,
16085           6.0000000000000000, 0.69999999999999996 },
16086   { 5940513286161.6602, 20.000000000000000, 5.0000000000000000,
16087           6.0000000000000000, 0.80000000000000004 },
16088   { 2.8531757655945201e+18, 20.000000000000000, 5.0000000000000000,
16089           6.0000000000000000, 0.89999999999999991 },
16090 };
16091 
16092 // Test function for a=20.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
16093 template <typename Tp>
test233()16094 void test233()
16095 {
16096   const Tp eps = std::numeric_limits<Tp>::epsilon();
16097   Tp max_abs_diff = -Tp(1);
16098   Tp max_abs_frac = -Tp(1);
16099   unsigned int num_datum = sizeof(data233)
16100                          / sizeof(testcase_hyperg<double>);
16101   for (unsigned int i = 0; i < num_datum; ++i)
16102     {
16103       const Tp f = std::tr1::hyperg(Tp(data233[i].a), Tp(data233[i].b),
16104                    Tp(data233[i].c), Tp(data233[i].x));
16105       const Tp f0 = data233[i].f0;
16106       const Tp diff = f - f0;
16107       if (std::abs(diff) > max_abs_diff)
16108         max_abs_diff = std::abs(diff);
16109       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16110         {
16111           const Tp frac = diff / f0;
16112           if (std::abs(frac) > max_abs_frac)
16113             max_abs_frac = std::abs(frac);
16114         }
16115     }
16116   VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
16117 }
16118 
16119 // Test data for a=20.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
16120 testcase_hyperg<double> data234[] = {
16121   { 0.0012492049968742865, 20.000000000000000, 5.0000000000000000,
16122           8.0000000000000000, -0.90000000000000002 },
16123   { 0.0019931241968014451, 20.000000000000000, 5.0000000000000000,
16124           8.0000000000000000, -0.80000000000000004 },
16125   { 0.0033203386861411057, 20.000000000000000, 5.0000000000000000,
16126           8.0000000000000000, -0.69999999999999996 },
16127   { 0.0058191894509855282, 20.000000000000000, 5.0000000000000000,
16128           8.0000000000000000, -0.59999999999999998 },
16129   { 0.010830090368313866, 20.000000000000000, 5.0000000000000000,
16130           8.0000000000000000, -0.50000000000000000 },
16131   { 0.021653062305193163, 20.000000000000000, 5.0000000000000000,
16132           8.0000000000000000, -0.40000000000000002 },
16133   { 0.047180821280919084, 20.000000000000000, 5.0000000000000000,
16134           8.0000000000000000, -0.30000000000000004 },
16135   { 0.11405637279736180, 20.000000000000000, 5.0000000000000000,
16136           8.0000000000000000, -0.19999999999999996 },
16137   { 0.31275468794720990, 20.000000000000000, 5.0000000000000000,
16138           8.0000000000000000, -0.099999999999999978 },
16139   { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
16140           8.0000000000000000, 0.0000000000000000 },
16141   { 3.8598904658643969, 20.000000000000000, 5.0000000000000000,
16142           8.0000000000000000, 0.10000000000000009 },
16143   { 18.806301417906667, 20.000000000000000, 5.0000000000000000,
16144           8.0000000000000000, 0.19999999999999996 },
16145   { 122.77054465017432, 20.000000000000000, 5.0000000000000000,
16146           8.0000000000000000, 0.30000000000000004 },
16147   { 1168.4762146808946, 20.000000000000000, 5.0000000000000000,
16148           8.0000000000000000, 0.39999999999999991 },
16149   { 18437.511788521082, 20.000000000000000, 5.0000000000000000,
16150           8.0000000000000000, 0.50000000000000000 },
16151   { 597441.79669264762, 20.000000000000000, 5.0000000000000000,
16152           8.0000000000000000, 0.60000000000000009 },
16153   { 59390411.369227782, 20.000000000000000, 5.0000000000000000,
16154           8.0000000000000000, 0.69999999999999996 },
16155   { 44681668993.361603, 20.000000000000000, 5.0000000000000000,
16156           8.0000000000000000, 0.80000000000000004 },
16157   { 4559673269683164.0, 20.000000000000000, 5.0000000000000000,
16158           8.0000000000000000, 0.89999999999999991 },
16159 };
16160 
16161 // Test function for a=20.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
16162 template <typename Tp>
test234()16163 void test234()
16164 {
16165   const Tp eps = std::numeric_limits<Tp>::epsilon();
16166   Tp max_abs_diff = -Tp(1);
16167   Tp max_abs_frac = -Tp(1);
16168   unsigned int num_datum = sizeof(data234)
16169                          / sizeof(testcase_hyperg<double>);
16170   for (unsigned int i = 0; i < num_datum; ++i)
16171     {
16172       const Tp f = std::tr1::hyperg(Tp(data234[i].a), Tp(data234[i].b),
16173                    Tp(data234[i].c), Tp(data234[i].x));
16174       const Tp f0 = data234[i].f0;
16175       const Tp diff = f - f0;
16176       if (std::abs(diff) > max_abs_diff)
16177         max_abs_diff = std::abs(diff);
16178       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16179         {
16180           const Tp frac = diff / f0;
16181           if (std::abs(frac) > max_abs_frac)
16182             max_abs_frac = std::abs(frac);
16183         }
16184     }
16185   VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
16186 }
16187 
16188 // Test data for a=20.000000000000000, b=5.0000000000000000, c=10.000000000000000.
16189 testcase_hyperg<double> data235[] = {
16190   { 0.0038867957051371450, 20.000000000000000, 5.0000000000000000,
16191           10.000000000000000, -0.90000000000000002 },
16192   { 0.0058484892597364443, 20.000000000000000, 5.0000000000000000,
16193           10.000000000000000, -0.80000000000000004 },
16194   { 0.0090987656053757009, 20.000000000000000, 5.0000000000000000,
16195           10.000000000000000, -0.69999999999999996 },
16196   { 0.014714392537270733, 20.000000000000000, 5.0000000000000000,
16197           10.000000000000000, -0.59999999999999998 },
16198   { 0.024900404542056769, 20.000000000000000, 5.0000000000000000,
16199           10.000000000000000, -0.50000000000000000 },
16200   { 0.044460184663785055, 20.000000000000000, 5.0000000000000000,
16201           10.000000000000000, -0.40000000000000002 },
16202   { 0.084638849196356836, 20.000000000000000, 5.0000000000000000,
16203           10.000000000000000, -0.30000000000000004 },
16204   { 0.17409058241290998, 20.000000000000000, 5.0000000000000000,
16205           10.000000000000000, -0.19999999999999996 },
16206   { 0.39357055823580755, 20.000000000000000, 5.0000000000000000,
16207           10.000000000000000, -0.099999999999999978 },
16208   { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
16209           10.000000000000000, 0.0000000000000000 },
16210   { 2.9410794636226596, 20.000000000000000, 5.0000000000000000,
16211           10.000000000000000, 0.10000000000000009 },
16212   { 10.417226071414344, 20.000000000000000, 5.0000000000000000,
16213           10.000000000000000, 0.19999999999999996 },
16214   { 46.930585873140835, 20.000000000000000, 5.0000000000000000,
16215           10.000000000000000, 0.30000000000000004 },
16216   { 290.76717121814852, 20.000000000000000, 5.0000000000000000,
16217           10.000000000000000, 0.39999999999999991 },
16218   { 2788.1641083374830, 20.000000000000000, 5.0000000000000000,
16219           10.000000000000000, 0.50000000000000000 },
16220   { 50228.117718560752, 20.000000000000000, 5.0000000000000000,
16221           10.000000000000000, 0.60000000000000009 },
16222   { 2433042.3476752634, 20.000000000000000, 5.0000000000000000,
16223           10.000000000000000, 0.69999999999999996 },
16224   { 705345246.77141762, 20.000000000000000, 5.0000000000000000,
16225           10.000000000000000, 0.80000000000000004 },
16226   { 15652478868616.762, 20.000000000000000, 5.0000000000000000,
16227           10.000000000000000, 0.89999999999999991 },
16228 };
16229 
16230 // Test function for a=20.000000000000000, b=5.0000000000000000, c=10.000000000000000.
16231 template <typename Tp>
test235()16232 void test235()
16233 {
16234   const Tp eps = std::numeric_limits<Tp>::epsilon();
16235   Tp max_abs_diff = -Tp(1);
16236   Tp max_abs_frac = -Tp(1);
16237   unsigned int num_datum = sizeof(data235)
16238                          / sizeof(testcase_hyperg<double>);
16239   for (unsigned int i = 0; i < num_datum; ++i)
16240     {
16241       const Tp f = std::tr1::hyperg(Tp(data235[i].a), Tp(data235[i].b),
16242                    Tp(data235[i].c), Tp(data235[i].x));
16243       const Tp f0 = data235[i].f0;
16244       const Tp diff = f - f0;
16245       if (std::abs(diff) > max_abs_diff)
16246         max_abs_diff = std::abs(diff);
16247       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16248         {
16249           const Tp frac = diff / f0;
16250           if (std::abs(frac) > max_abs_frac)
16251             max_abs_frac = std::abs(frac);
16252         }
16253     }
16254   VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
16255 }
16256 
16257 // Test data for a=20.000000000000000, b=10.000000000000000, c=2.0000000000000000.
16258 testcase_hyperg<double> data236[] = {
16259   { -2.1776535308707967e-07, 20.000000000000000, 10.000000000000000,
16260           2.0000000000000000, -0.90000000000000002 },
16261   { -2.9128833151427998e-06, 20.000000000000000, 10.000000000000000,
16262           2.0000000000000000, -0.80000000000000004 },
16263   { -9.4755553429035093e-06, 20.000000000000000, 10.000000000000000,
16264           2.0000000000000000, -0.69999999999999996 },
16265   { -1.2844297353813116e-05, 20.000000000000000, 10.000000000000000,
16266           2.0000000000000000, -0.59999999999999998 },
16267   { 3.6576965483568809e-05, 20.000000000000000, 10.000000000000000,
16268           2.0000000000000000, -0.50000000000000000 },
16269   { 0.00020847453890692649, 20.000000000000000, 10.000000000000000,
16270           2.0000000000000000, -0.40000000000000002 },
16271   { -0.00022868510398174632, 20.000000000000000, 10.000000000000000,
16272           2.0000000000000000, -0.30000000000000004 },
16273   { -0.0021855513841942732, 20.000000000000000, 10.000000000000000,
16274           2.0000000000000000, -0.19999999999999996 },
16275   { 0.014662111759334634, 20.000000000000000, 10.000000000000000,
16276           2.0000000000000000, -0.099999999999999978 },
16277   { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
16278           2.0000000000000000, 0.0000000000000000 },
16279   { 746.44776348798098, 20.000000000000000, 10.000000000000000,
16280           2.0000000000000000, 0.10000000000000009 },
16281   { 136080.48445225612, 20.000000000000000, 10.000000000000000,
16282           2.0000000000000000, 0.19999999999999996 },
16283   { 23094279.597826406, 20.000000000000000, 10.000000000000000,
16284           2.0000000000000000, 0.30000000000000004 },
16285   { 5315913395.5545301, 20.000000000000000, 10.000000000000000,
16286           2.0000000000000000, 0.39999999999999991 },
16287   { 2261935718399.9990, 20.000000000000000, 10.000000000000000,
16288           2.0000000000000000, 0.50000000000000000 },
16289   { 2669150854828235.0, 20.000000000000000, 10.000000000000000,
16290           2.0000000000000000, 0.60000000000000009 },
16291   { 1.7499363099365994e+19, 20.000000000000000, 10.000000000000000,
16292           2.0000000000000000, 0.69999999999999996 },
16293   { 2.8881518494606140e+24, 20.000000000000000, 10.000000000000000,
16294           2.0000000000000000, 0.80000000000000004 },
16295   { 1.4165513933661626e+33, 20.000000000000000, 10.000000000000000,
16296           2.0000000000000000, 0.89999999999999991 },
16297 };
16298 
16299 // Test function for a=20.000000000000000, b=10.000000000000000, c=2.0000000000000000.
16300 template <typename Tp>
test236()16301 void test236()
16302 {
16303   const Tp eps = std::numeric_limits<Tp>::epsilon();
16304   Tp max_abs_diff = -Tp(1);
16305   Tp max_abs_frac = -Tp(1);
16306   unsigned int num_datum = sizeof(data236)
16307                          / sizeof(testcase_hyperg<double>);
16308   for (unsigned int i = 0; i < num_datum; ++i)
16309     {
16310       const Tp f = std::tr1::hyperg(Tp(data236[i].a), Tp(data236[i].b),
16311                    Tp(data236[i].c), Tp(data236[i].x));
16312       const Tp f0 = data236[i].f0;
16313       const Tp diff = f - f0;
16314       if (std::abs(diff) > max_abs_diff)
16315         max_abs_diff = std::abs(diff);
16316       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16317         {
16318           const Tp frac = diff / f0;
16319           if (std::abs(frac) > max_abs_frac)
16320             max_abs_frac = std::abs(frac);
16321         }
16322     }
16323   VERIFY(max_abs_frac < Tp(1.0000000000000005e-08));
16324 }
16325 
16326 // Test data for a=20.000000000000000, b=10.000000000000000, c=4.0000000000000000.
16327 testcase_hyperg<double> data237[] = {
16328   { 1.7149006973860441e-07, 20.000000000000000, 10.000000000000000,
16329           4.0000000000000000, -0.90000000000000002 },
16330   { 3.2399324904088936e-07, 20.000000000000000, 10.000000000000000,
16331           4.0000000000000000, -0.80000000000000004 },
16332   { 1.6015317712089860e-07, 20.000000000000000, 10.000000000000000,
16333           4.0000000000000000, -0.69999999999999996 },
16334   { -2.0500917204199595e-06, 20.000000000000000, 10.000000000000000,
16335           4.0000000000000000, -0.59999999999999998 },
16336   { -1.0175546788599472e-05, 20.000000000000000, 10.000000000000000,
16337           4.0000000000000000, -0.50000000000000000 },
16338   { -1.1720101988202453e-05, 20.000000000000000, 10.000000000000000,
16339           4.0000000000000000, -0.40000000000000002 },
16340   { 0.00014199637113974185, 20.000000000000000, 10.000000000000000,
16341           4.0000000000000000, -0.30000000000000004 },
16342   { 0.00021263363640642297, 20.000000000000000, 10.000000000000000,
16343           4.0000000000000000, -0.19999999999999996 },
16344   { -0.0072649256698441751, 20.000000000000000, 10.000000000000000,
16345           4.0000000000000000, -0.099999999999999978 },
16346   { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
16347           4.0000000000000000, 0.0000000000000000 },
16348   { 90.430293772869618, 20.000000000000000, 10.000000000000000,
16349           4.0000000000000000, 0.10000000000000009 },
16350   { 6248.1455940292308, 20.000000000000000, 10.000000000000000,
16351           4.0000000000000000, 0.19999999999999996 },
16352   { 501143.39852548984, 20.000000000000000, 10.000000000000000,
16353           4.0000000000000000, 0.30000000000000004 },
16354   { 58852027.356439680, 20.000000000000000, 10.000000000000000,
16355           4.0000000000000000, 0.39999999999999991 },
16356   { 12942923093.333330, 20.000000000000000, 10.000000000000000,
16357           4.0000000000000000, 0.50000000000000000 },
16358   { 7618073993853.6592, 20.000000000000000, 10.000000000000000,
16359           4.0000000000000000, 0.60000000000000009 },
16360   { 22630251562549288., 20.000000000000000, 10.000000000000000,
16361           4.0000000000000000, 0.69999999999999996 },
16362   { 1.3708372433980356e+21, 20.000000000000000, 10.000000000000000,
16363           4.0000000000000000, 0.80000000000000004 },
16364   { 1.4154113619999653e+29, 20.000000000000000, 10.000000000000000,
16365           4.0000000000000000, 0.89999999999999991 },
16366 };
16367 
16368 // Test function for a=20.000000000000000, b=10.000000000000000, c=4.0000000000000000.
16369 template <typename Tp>
test237()16370 void test237()
16371 {
16372   const Tp eps = std::numeric_limits<Tp>::epsilon();
16373   Tp max_abs_diff = -Tp(1);
16374   Tp max_abs_frac = -Tp(1);
16375   unsigned int num_datum = sizeof(data237)
16376                          / sizeof(testcase_hyperg<double>);
16377   for (unsigned int i = 0; i < num_datum; ++i)
16378     {
16379       const Tp f = std::tr1::hyperg(Tp(data237[i].a), Tp(data237[i].b),
16380                    Tp(data237[i].c), Tp(data237[i].x));
16381       const Tp f0 = data237[i].f0;
16382       const Tp diff = f - f0;
16383       if (std::abs(diff) > max_abs_diff)
16384         max_abs_diff = std::abs(diff);
16385       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16386         {
16387           const Tp frac = diff / f0;
16388           if (std::abs(frac) > max_abs_frac)
16389             max_abs_frac = std::abs(frac);
16390         }
16391     }
16392   VERIFY(max_abs_frac < Tp(5.0000000000000024e-08));
16393 }
16394 
16395 // Test data for a=20.000000000000000, b=10.000000000000000, c=6.0000000000000000.
16396 testcase_hyperg<double> data238[] = {
16397   { -1.6667473370780257e-08, 20.000000000000000, 10.000000000000000,
16398           6.0000000000000000, -0.90000000000000002 },
16399   { 8.6214844067774863e-08, 20.000000000000000, 10.000000000000000,
16400           6.0000000000000000, -0.80000000000000004 },
16401   { 5.7778331238835108e-07, 20.000000000000000, 10.000000000000000,
16402           6.0000000000000000, -0.69999999999999996 },
16403   { 2.1911400500362969e-06, 20.000000000000000, 10.000000000000000,
16404           6.0000000000000000, -0.59999999999999998 },
16405   { 4.7440049217100417e-06, 20.000000000000000, 10.000000000000000,
16406           6.0000000000000000, -0.50000000000000000 },
16407   { -1.0564233314924258e-05, 20.000000000000000, 10.000000000000000,
16408           6.0000000000000000, -0.40000000000000002 },
16409   { -0.00017990026051856349, 20.000000000000000, 10.000000000000000,
16410           6.0000000000000000, -0.30000000000000004 },
16411   { -0.00027618146288744351, 20.000000000000000, 10.000000000000000,
16412           6.0000000000000000, -0.19999999999999996 },
16413   { 0.030606019577723392, 20.000000000000000, 10.000000000000000,
16414           6.0000000000000000, -0.099999999999999978 },
16415   { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
16416           6.0000000000000000, 0.0000000000000000 },
16417   { 27.832854169493341, 20.000000000000000, 10.000000000000000,
16418           6.0000000000000000, 0.10000000000000009 },
16419   { 874.00624088575228, 20.000000000000000, 10.000000000000000,
16420           6.0000000000000000, 0.19999999999999996 },
16421   { 36049.199340831554, 20.000000000000000, 10.000000000000000,
16422           6.0000000000000000, 0.30000000000000004 },
16423   { 2270967.7298624986, 20.000000000000000, 10.000000000000000,
16424           6.0000000000000000, 0.39999999999999991 },
16425   { 266979100.44444439, 20.000000000000000, 10.000000000000000,
16426           6.0000000000000000, 0.50000000000000000 },
16427   { 80311224337.493027, 20.000000000000000, 10.000000000000000,
16428           6.0000000000000000, 0.60000000000000009 },
16429   { 110111693103799.72, 20.000000000000000, 10.000000000000000,
16430           6.0000000000000000, 0.69999999999999996 },
16431   { 2.4838871426052618e+18, 20.000000000000000, 10.000000000000000,
16432           6.0000000000000000, 0.80000000000000004 },
16433   { 5.4626349999998603e+25, 20.000000000000000, 10.000000000000000,
16434           6.0000000000000000, 0.89999999999999991 },
16435 };
16436 
16437 // Test function for a=20.000000000000000, b=10.000000000000000, c=6.0000000000000000.
16438 template <typename Tp>
test238()16439 void test238()
16440 {
16441   const Tp eps = std::numeric_limits<Tp>::epsilon();
16442   Tp max_abs_diff = -Tp(1);
16443   Tp max_abs_frac = -Tp(1);
16444   unsigned int num_datum = sizeof(data238)
16445                          / sizeof(testcase_hyperg<double>);
16446   for (unsigned int i = 0; i < num_datum; ++i)
16447     {
16448       const Tp f = std::tr1::hyperg(Tp(data238[i].a), Tp(data238[i].b),
16449                    Tp(data238[i].c), Tp(data238[i].x));
16450       const Tp f0 = data238[i].f0;
16451       const Tp diff = f - f0;
16452       if (std::abs(diff) > max_abs_diff)
16453         max_abs_diff = std::abs(diff);
16454       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16455         {
16456           const Tp frac = diff / f0;
16457           if (std::abs(frac) > max_abs_frac)
16458             max_abs_frac = std::abs(frac);
16459         }
16460     }
16461   VERIFY(max_abs_frac < Tp(5.0000000000000019e-07));
16462 }
16463 
16464 // Test data for a=20.000000000000000, b=10.000000000000000, c=8.0000000000000000.
16465 testcase_hyperg<double> data239[] = {
16466   { -1.5843795893321480e-07, 20.000000000000000, 10.000000000000000,
16467           8.0000000000000000, -0.90000000000000002 },
16468   { -5.4877275994033766e-07, 20.000000000000000, 10.000000000000000,
16469           8.0000000000000000, -0.80000000000000004 },
16470   { -1.7169507967745992e-06, 20.000000000000000, 10.000000000000000,
16471           8.0000000000000000, -0.69999999999999996 },
16472   { -4.5236439748752000e-06, 20.000000000000000, 10.000000000000000,
16473           8.0000000000000000, -0.59999999999999998 },
16474   { -5.5690492560325806e-06, 20.000000000000000, 10.000000000000000,
16475           8.0000000000000000, -0.50000000000000000 },
16476   { 5.6914115606934911e-05, 20.000000000000000, 10.000000000000000,
16477           8.0000000000000000, -0.40000000000000002 },
16478   { 0.00082507252097519922, 20.000000000000000, 10.000000000000000,
16479           8.0000000000000000, -0.30000000000000004 },
16480   { 0.0085739249288229857, 20.000000000000000, 10.000000000000000,
16481           8.0000000000000000, -0.19999999999999996 },
16482   { 0.088244357683754757, 20.000000000000000, 10.000000000000000,
16483           8.0000000000000000, -0.099999999999999978 },
16484   { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
16485           8.0000000000000000, 0.0000000000000000 },
16486   { 13.387208440156897, 20.000000000000000, 10.000000000000000,
16487           8.0000000000000000, 0.10000000000000009 },
16488   { 226.77895441155110, 20.000000000000000, 10.000000000000000,
16489           8.0000000000000000, 0.19999999999999996 },
16490   { 5281.5716482686785, 20.000000000000000, 10.000000000000000,
16491           8.0000000000000000, 0.30000000000000004 },
16492   { 189431.77762850464, 20.000000000000000, 10.000000000000000,
16493           8.0000000000000000, 0.39999999999999991 },
16494   { 12408149.333333332, 20.000000000000000, 10.000000000000000,
16495           8.0000000000000000, 0.50000000000000000 },
16496   { 1966782292.5839682, 20.000000000000000, 10.000000000000000,
16497           8.0000000000000000, 0.60000000000000009 },
16498   { 1274123112205.7495, 20.000000000000000, 10.000000000000000,
16499           8.0000000000000000, 0.69999999999999996 },
16500   { 10903676350911508., 20.000000000000000, 10.000000000000000,
16501           8.0000000000000000, 0.80000000000000004 },
16502   { 5.1849999999998819e+22, 20.000000000000000, 10.000000000000000,
16503           8.0000000000000000, 0.89999999999999991 },
16504 };
16505 
16506 // Test function for a=20.000000000000000, b=10.000000000000000, c=8.0000000000000000.
16507 template <typename Tp>
test239()16508 void test239()
16509 {
16510   const Tp eps = std::numeric_limits<Tp>::epsilon();
16511   Tp max_abs_diff = -Tp(1);
16512   Tp max_abs_frac = -Tp(1);
16513   unsigned int num_datum = sizeof(data239)
16514                          / sizeof(testcase_hyperg<double>);
16515   for (unsigned int i = 0; i < num_datum; ++i)
16516     {
16517       const Tp f = std::tr1::hyperg(Tp(data239[i].a), Tp(data239[i].b),
16518                    Tp(data239[i].c), Tp(data239[i].x));
16519       const Tp f0 = data239[i].f0;
16520       const Tp diff = f - f0;
16521       if (std::abs(diff) > max_abs_diff)
16522         max_abs_diff = std::abs(diff);
16523       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16524         {
16525           const Tp frac = diff / f0;
16526           if (std::abs(frac) > max_abs_frac)
16527             max_abs_frac = std::abs(frac);
16528         }
16529     }
16530   VERIFY(max_abs_frac < Tp(2.5000000000000012e-08));
16531 }
16532 
16533 // Test data for a=20.000000000000000, b=10.000000000000000, c=10.000000000000000.
16534 testcase_hyperg<double> data240[] = {
16535   { 2.6602838683283435e-06, 20.000000000000000, 10.000000000000000,
16536           10.000000000000000, -0.90000000000000002 },
16537   { 7.8442223930072316e-06, 20.000000000000000, 10.000000000000000,
16538           10.000000000000000, -0.80000000000000004 },
16539   { 2.4604898194634598e-05, 20.000000000000000, 10.000000000000000,
16540           10.000000000000000, -0.69999999999999996 },
16541   { 8.2718061255302686e-05, 20.000000000000000, 10.000000000000000,
16542           10.000000000000000, -0.59999999999999998 },
16543   { 0.00030072865982171723, 20.000000000000000, 10.000000000000000,
16544           10.000000000000000, -0.50000000000000000 },
16545   { 0.0011951964277455193, 20.000000000000000, 10.000000000000000,
16546           10.000000000000000, -0.40000000000000002 },
16547   { 0.0052617832469731814, 20.000000000000000, 10.000000000000000,
16548           10.000000000000000, -0.30000000000000004 },
16549   { 0.026084053304588847, 20.000000000000000, 10.000000000000000,
16550           10.000000000000000, -0.19999999999999996 },
16551   { 0.14864362802414346, 20.000000000000000, 10.000000000000000,
16552           10.000000000000000, -0.099999999999999978 },
16553   { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
16554           10.000000000000000, 0.0000000000000000 },
16555   { 8.2252633399699757, 20.000000000000000, 10.000000000000000,
16556           10.000000000000000, 0.10000000000000009 },
16557   { 86.736173798840269, 20.000000000000000, 10.000000000000000,
16558           10.000000000000000, 0.19999999999999996 },
16559   { 1253.2542894196865, 20.000000000000000, 10.000000000000000,
16560           10.000000000000000, 0.30000000000000004 },
16561   { 27351.112277912434, 20.000000000000000, 10.000000000000000,
16562           10.000000000000000, 0.39999999999999991 },
16563   { 1048576.0000000000, 20.000000000000000, 10.000000000000000,
16564           10.000000000000000, 0.50000000000000000 },
16565   { 90949470.177293226, 20.000000000000000, 10.000000000000000,
16566           10.000000000000000, 0.60000000000000009 },
16567   { 28679719907.924358, 20.000000000000000, 10.000000000000000,
16568           10.000000000000000, 0.69999999999999996 },
16569   { 95367431640624.906, 20.000000000000000, 10.000000000000000,
16570           10.000000000000000, 0.80000000000000004 },
16571   { 9.9999999999998657e+19, 20.000000000000000, 10.000000000000000,
16572           10.000000000000000, 0.89999999999999991 },
16573 };
16574 
16575 // Test function for a=20.000000000000000, b=10.000000000000000, c=10.000000000000000.
16576 template <typename Tp>
test240()16577 void test240()
16578 {
16579   const Tp eps = std::numeric_limits<Tp>::epsilon();
16580   Tp max_abs_diff = -Tp(1);
16581   Tp max_abs_frac = -Tp(1);
16582   unsigned int num_datum = sizeof(data240)
16583                          / sizeof(testcase_hyperg<double>);
16584   for (unsigned int i = 0; i < num_datum; ++i)
16585     {
16586       const Tp f = std::tr1::hyperg(Tp(data240[i].a), Tp(data240[i].b),
16587                    Tp(data240[i].c), Tp(data240[i].x));
16588       const Tp f0 = data240[i].f0;
16589       const Tp diff = f - f0;
16590       if (std::abs(diff) > max_abs_diff)
16591         max_abs_diff = std::abs(diff);
16592       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16593         {
16594           const Tp frac = diff / f0;
16595           if (std::abs(frac) > max_abs_frac)
16596             max_abs_frac = std::abs(frac);
16597         }
16598     }
16599   VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
16600 }
16601 
16602 // Test data for a=20.000000000000000, b=20.000000000000000, c=2.0000000000000000.
16603 testcase_hyperg<double> data241[] = {
16604   { 7.4612991101768883e-09, 20.000000000000000, 20.000000000000000,
16605           2.0000000000000000, -0.90000000000000002 },
16606   { 1.1006588946889981e-07, 20.000000000000000, 20.000000000000000,
16607           2.0000000000000000, -0.80000000000000004 },
16608   { 2.0126933743389316e-07, 20.000000000000000, 20.000000000000000,
16609           2.0000000000000000, -0.69999999999999996 },
16610   { -1.0013775379801016e-06, 20.000000000000000, 20.000000000000000,
16611           2.0000000000000000, -0.59999999999999998 },
16612   { -3.0371956856472516e-06, 20.000000000000000, 20.000000000000000,
16613           2.0000000000000000, -0.50000000000000000 },
16614   { 2.2012669924527286e-05, 20.000000000000000, 20.000000000000000,
16615           2.0000000000000000, -0.40000000000000002 },
16616   { -6.2415598025417670e-05, 20.000000000000000, 20.000000000000000,
16617           2.0000000000000000, -0.30000000000000004 },
16618   { 0.00033551320394378602, 20.000000000000000, 20.000000000000000,
16619           2.0000000000000000, -0.19999999999999996 },
16620   { -0.0062342152641436353, 20.000000000000000, 20.000000000000000,
16621           2.0000000000000000, -0.099999999999999978 },
16622   { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
16623           2.0000000000000000, 0.0000000000000000 },
16624   { 34830.688900741610, 20.000000000000000, 20.000000000000000,
16625           2.0000000000000000, 0.10000000000000009 },
16626   { 67626221.263030857, 20.000000000000000, 20.000000000000000,
16627           2.0000000000000000, 0.19999999999999996 },
16628   { 102764604848.69762, 20.000000000000000, 20.000000000000000,
16629           2.0000000000000000, 0.30000000000000004 },
16630   { 220278355222373.38, 20.000000000000000, 20.000000000000000,
16631           2.0000000000000000, 0.39999999999999991 },
16632   { 1.0422324699794536e+18, 20.000000000000000, 20.000000000000000,
16633           2.0000000000000000, 0.50000000000000000 },
16634   { 1.9128731788368004e+22, 20.000000000000000, 20.000000000000000,
16635           2.0000000000000000, 0.60000000000000009 },
16636   { 3.5234592919485287e+27, 20.000000000000000, 20.000000000000000,
16637           2.0000000000000000, 0.69999999999999996 },
16638   { 5.0867023209025249e+34, 20.000000000000000, 20.000000000000000,
16639           2.0000000000000000, 0.80000000000000004 },
16640   { 3.7461088506658564e+46, 20.000000000000000, 20.000000000000000,
16641           2.0000000000000000, 0.89999999999999991 },
16642 };
16643 
16644 // Test function for a=20.000000000000000, b=20.000000000000000, c=2.0000000000000000.
16645 template <typename Tp>
test241()16646 void test241()
16647 {
16648   const Tp eps = std::numeric_limits<Tp>::epsilon();
16649   Tp max_abs_diff = -Tp(1);
16650   Tp max_abs_frac = -Tp(1);
16651   unsigned int num_datum = sizeof(data241)
16652                          / sizeof(testcase_hyperg<double>);
16653   for (unsigned int i = 0; i < num_datum; ++i)
16654     {
16655       const Tp f = std::tr1::hyperg(Tp(data241[i].a), Tp(data241[i].b),
16656                    Tp(data241[i].c), Tp(data241[i].x));
16657       const Tp f0 = data241[i].f0;
16658       const Tp diff = f - f0;
16659       if (std::abs(diff) > max_abs_diff)
16660         max_abs_diff = std::abs(diff);
16661       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16662         {
16663           const Tp frac = diff / f0;
16664           if (std::abs(frac) > max_abs_frac)
16665             max_abs_frac = std::abs(frac);
16666         }
16667     }
16668   VERIFY(max_abs_frac < Tp(1.0000000000000005e-07));
16669 }
16670 
16671 // Test data for a=20.000000000000000, b=20.000000000000000, c=4.0000000000000000.
16672 testcase_hyperg<double> data242[] = {
16673   { -1.5895900796973045e-09, 20.000000000000000, 20.000000000000000,
16674           4.0000000000000000, -0.90000000000000002 },
16675   { -2.4403576837293198e-09, 20.000000000000000, 20.000000000000000,
16676           4.0000000000000000, -0.80000000000000004 },
16677   { 1.1622915290732117e-08, 20.000000000000000, 20.000000000000000,
16678           4.0000000000000000, -0.69999999999999996 },
16679   { 6.3899796307731726e-08, 20.000000000000000, 20.000000000000000,
16680           4.0000000000000000, -0.59999999999999998 },
16681   { -1.3503608352807462e-07, 20.000000000000000, 20.000000000000000,
16682           4.0000000000000000, -0.50000000000000000 },
16683   { -1.2198533623899163e-06, 20.000000000000000, 20.000000000000000,
16684           4.0000000000000000, -0.40000000000000002 },
16685   { 9.9086618119129001e-06, 20.000000000000000, 20.000000000000000,
16686           4.0000000000000000, -0.30000000000000004 },
16687   { -7.6797020080162010e-05, 20.000000000000000, 20.000000000000000,
16688           4.0000000000000000, -0.19999999999999996 },
16689   { 0.0013196405087170875, 20.000000000000000, 20.000000000000000,
16690           4.0000000000000000, -0.099999999999999978 },
16691   { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
16692           4.0000000000000000, 0.0000000000000000 },
16693   { 2274.2044768143564, 20.000000000000000, 20.000000000000000,
16694           4.0000000000000000, 0.10000000000000009 },
16695   { 1611640.1560475440, 20.000000000000000, 20.000000000000000,
16696           4.0000000000000000, 0.19999999999999996 },
16697   { 1147063984.7359734, 20.000000000000000, 20.000000000000000,
16698           4.0000000000000000, 0.30000000000000004 },
16699   { 1253162497163.8311, 20.000000000000000, 20.000000000000000,
16700           4.0000000000000000, 0.39999999999999991 },
16701   { 3071321673390476.0, 20.000000000000000, 20.000000000000000,
16702           4.0000000000000000, 0.50000000000000000 },
16703   { 2.8221123559124324e+19, 20.000000000000000, 20.000000000000000,
16704           4.0000000000000000, 0.60000000000000009 },
16705   { 2.3658463807419519e+24, 20.000000000000000, 20.000000000000000,
16706           4.0000000000000000, 0.69999999999999996 },
16707   { 1.2596553731345468e+31, 20.000000000000000, 20.000000000000000,
16708           4.0000000000000000, 0.80000000000000004 },
16709   { 1.9627175792062075e+42, 20.000000000000000, 20.000000000000000,
16710           4.0000000000000000, 0.89999999999999991 },
16711 };
16712 
16713 // Test function for a=20.000000000000000, b=20.000000000000000, c=4.0000000000000000.
16714 template <typename Tp>
test242()16715 void test242()
16716 {
16717   const Tp eps = std::numeric_limits<Tp>::epsilon();
16718   Tp max_abs_diff = -Tp(1);
16719   Tp max_abs_frac = -Tp(1);
16720   unsigned int num_datum = sizeof(data242)
16721                          / sizeof(testcase_hyperg<double>);
16722   for (unsigned int i = 0; i < num_datum; ++i)
16723     {
16724       const Tp f = std::tr1::hyperg(Tp(data242[i].a), Tp(data242[i].b),
16725                    Tp(data242[i].c), Tp(data242[i].x));
16726       const Tp f0 = data242[i].f0;
16727       const Tp diff = f - f0;
16728       if (std::abs(diff) > max_abs_diff)
16729         max_abs_diff = std::abs(diff);
16730       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16731         {
16732           const Tp frac = diff / f0;
16733           if (std::abs(frac) > max_abs_frac)
16734             max_abs_frac = std::abs(frac);
16735         }
16736     }
16737   VERIFY(max_abs_frac < Tp(2.5000000000000006e-06));
16738 }
16739 
16740 // Test data for a=20.000000000000000, b=20.000000000000000, c=6.0000000000000000.
16741 testcase_hyperg<double> data243[] = {
16742   { 8.0159808156941562e-11, 20.000000000000000, 20.000000000000000,
16743           6.0000000000000000, -0.90000000000000002 },
16744   { -6.4422687845093557e-10, 20.000000000000000, 20.000000000000000,
16745           6.0000000000000000, -0.80000000000000004 },
16746   { -3.7526134186308981e-09, 20.000000000000000, 20.000000000000000,
16747           6.0000000000000000, -0.69999999999999996 },
16748   { -1.7692034167897114e-09, 20.000000000000000, 20.000000000000000,
16749           6.0000000000000000, -0.59999999999999998 },
16750   { 7.9304558772837909e-08, 20.000000000000000, 20.000000000000000,
16751           6.0000000000000000, -0.50000000000000000 },
16752   { 5.9348070318594204e-08, 20.000000000000000, 20.000000000000000,
16753           6.0000000000000000, -0.40000000000000002 },
16754   { -3.5827694517425210e-06, 20.000000000000000, 20.000000000000000,
16755           6.0000000000000000, -0.30000000000000004 },
16756   { 4.4951490418284159e-05, 20.000000000000000, 20.000000000000000,
16757           6.0000000000000000, -0.19999999999999996 },
16758   { -0.0013716249406310486, 20.000000000000000, 20.000000000000000,
16759           6.0000000000000000, -0.099999999999999978 },
16760   { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
16761           6.0000000000000000, 0.0000000000000000 },
16762   { 415.32493304415505, 20.000000000000000, 20.000000000000000,
16763           6.0000000000000000, 0.10000000000000009 },
16764   { 121300.42991518594, 20.000000000000000, 20.000000000000000,
16765           6.0000000000000000, 0.19999999999999996 },
16766   { 42725673.833462097, 20.000000000000000, 20.000000000000000,
16767           6.0000000000000000, 0.30000000000000004 },
16768   { 24588915328.261719, 20.000000000000000, 20.000000000000000,
16769           6.0000000000000000, 0.39999999999999991 },
16770   { 31929082412503.652, 20.000000000000000, 20.000000000000000,
16771           6.0000000000000000, 0.50000000000000000 },
16772   { 1.4934954443280477e+17, 20.000000000000000, 20.000000000000000,
16773           6.0000000000000000, 0.60000000000000009 },
16774   { 5.7726220597696125e+21, 20.000000000000000, 20.000000000000000,
16775           6.0000000000000000, 0.69999999999999996 },
16776   { 1.1454387824049374e+28, 20.000000000000000, 20.000000000000000,
16777           6.0000000000000000, 0.80000000000000004 },
16778   { 3.8088637321581534e+38, 20.000000000000000, 20.000000000000000,
16779           6.0000000000000000, 0.89999999999999991 },
16780 };
16781 
16782 // Test function for a=20.000000000000000, b=20.000000000000000, c=6.0000000000000000.
16783 template <typename Tp>
test243()16784 void test243()
16785 {
16786   const Tp eps = std::numeric_limits<Tp>::epsilon();
16787   Tp max_abs_diff = -Tp(1);
16788   Tp max_abs_frac = -Tp(1);
16789   unsigned int num_datum = sizeof(data243)
16790                          / sizeof(testcase_hyperg<double>);
16791   for (unsigned int i = 0; i < num_datum; ++i)
16792     {
16793       const Tp f = std::tr1::hyperg(Tp(data243[i].a), Tp(data243[i].b),
16794                    Tp(data243[i].c), Tp(data243[i].x));
16795       const Tp f0 = data243[i].f0;
16796       const Tp diff = f - f0;
16797       if (std::abs(diff) > max_abs_diff)
16798         max_abs_diff = std::abs(diff);
16799       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16800         {
16801           const Tp frac = diff / f0;
16802           if (std::abs(frac) > max_abs_frac)
16803             max_abs_frac = std::abs(frac);
16804         }
16805     }
16806   VERIFY(max_abs_frac < Tp(2.5000000000000005e-05));
16807 }
16808 
16809 // Test data for a=20.000000000000000, b=20.000000000000000, c=8.0000000000000000.
16810 testcase_hyperg<double> data244[] = {
16811   { 1.0699072529874453e-10, 20.000000000000000, 20.000000000000000,
16812           8.0000000000000000, -0.90000000000000002 },
16813   { 5.4297753417228627e-10, 20.000000000000000, 20.000000000000000,
16814           8.0000000000000000, -0.80000000000000004 },
16815   { 9.7625471266824426e-10, 20.000000000000000, 20.000000000000000,
16816           8.0000000000000000, -0.69999999999999996 },
16817   { -6.7257762867770348e-09, 20.000000000000000, 20.000000000000000,
16818           8.0000000000000000, -0.59999999999999998 },
16819   { -5.4634571496175302e-08, 20.000000000000000, 20.000000000000000,
16820           8.0000000000000000, -0.50000000000000000 },
16821   { 1.4595644213893387e-07, 20.000000000000000, 20.000000000000000,
16822           8.0000000000000000, -0.40000000000000002 },
16823   { 3.3515966497049909e-06, 20.000000000000000, 20.000000000000000,
16824           8.0000000000000000, -0.30000000000000004 },
16825   { -6.5848086985914887e-05, 20.000000000000000, 20.000000000000000,
16826           8.0000000000000000, -0.19999999999999996 },
16827   { 0.0034800171306214813, 20.000000000000000, 20.000000000000000,
16828           8.0000000000000000, -0.099999999999999978 },
16829   { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
16830           8.0000000000000000, 0.0000000000000000 },
16831   { 130.93865856750304, 20.000000000000000, 20.000000000000000,
16832           8.0000000000000000, 0.10000000000000009 },
16833   { 17850.203502975532, 20.000000000000000, 20.000000000000000,
16834           8.0000000000000000, 0.19999999999999996 },
16835   { 3307058.5655149994, 20.000000000000000, 20.000000000000000,
16836           8.0000000000000000, 0.30000000000000004 },
16837   { 1041065396.2302787, 20.000000000000000, 20.000000000000000,
16838           8.0000000000000000, 0.39999999999999991 },
16839   { 735221357488.41736, 20.000000000000000, 20.000000000000000,
16840           8.0000000000000000, 0.50000000000000000 },
16841   { 1785176805049585.2, 20.000000000000000, 20.000000000000000,
16842           8.0000000000000000, 0.60000000000000009 },
16843   { 3.2302829930269192e+19, 20.000000000000000, 20.000000000000000,
16844           8.0000000000000000, 0.69999999999999996 },
16845   { 2.4184909805178299e+25, 20.000000000000000, 20.000000000000000,
16846           8.0000000000000000, 0.80000000000000004 },
16847   { 1.7340021007794567e+35, 20.000000000000000, 20.000000000000000,
16848           8.0000000000000000, 0.89999999999999991 },
16849 };
16850 
16851 // Test function for a=20.000000000000000, b=20.000000000000000, c=8.0000000000000000.
16852 template <typename Tp>
test244()16853 void test244()
16854 {
16855   const Tp eps = std::numeric_limits<Tp>::epsilon();
16856   Tp max_abs_diff = -Tp(1);
16857   Tp max_abs_frac = -Tp(1);
16858   unsigned int num_datum = sizeof(data244)
16859                          / sizeof(testcase_hyperg<double>);
16860   for (unsigned int i = 0; i < num_datum; ++i)
16861     {
16862       const Tp f = std::tr1::hyperg(Tp(data244[i].a), Tp(data244[i].b),
16863                    Tp(data244[i].c), Tp(data244[i].x));
16864       const Tp f0 = data244[i].f0;
16865       const Tp diff = f - f0;
16866       if (std::abs(diff) > max_abs_diff)
16867         max_abs_diff = std::abs(diff);
16868       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16869         {
16870           const Tp frac = diff / f0;
16871           if (std::abs(frac) > max_abs_frac)
16872             max_abs_frac = std::abs(frac);
16873         }
16874     }
16875   VERIFY(max_abs_frac < Tp(2.5000000000000005e-05));
16876 }
16877 
16878 // Test data for a=20.000000000000000, b=20.000000000000000, c=10.000000000000000.
16879 testcase_hyperg<double> data245[] = {
16880   { -1.7945363894141429e-10, 20.000000000000000, 20.000000000000000,
16881           10.000000000000000, -0.90000000000000002 },
16882   { -4.4440666675421800e-10, 20.000000000000000, 20.000000000000000,
16883           10.000000000000000, -0.80000000000000004 },
16884   { 6.6171630913717945e-10, 20.000000000000000, 20.000000000000000,
16885           10.000000000000000, -0.69999999999999996 },
16886   { 1.5453889642199650e-08, 20.000000000000000, 20.000000000000000,
16887           10.000000000000000, -0.59999999999999998 },
16888   { 7.5754083860094422e-08, 20.000000000000000, 20.000000000000000,
16889           10.000000000000000, -0.50000000000000000 },
16890   { -4.1113628639873710e-07, 20.000000000000000, 20.000000000000000,
16891           10.000000000000000, -0.40000000000000002 },
16892   { -9.5300704265214247e-06, 20.000000000000000, 20.000000000000000,
16893           10.000000000000000, -0.30000000000000004 },
16894   { 0.00016081533175785109, 20.000000000000000, 20.000000000000000,
16895           10.000000000000000, -0.19999999999999996 },
16896   { 0.017684650940379486, 20.000000000000000, 20.000000000000000,
16897           10.000000000000000, -0.099999999999999978 },
16898   { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
16899           10.000000000000000, 0.0000000000000000 },
16900   { 57.562247312454403, 20.000000000000000, 20.000000000000000,
16901           10.000000000000000, 0.10000000000000009 },
16902   { 4124.4159820362511, 20.000000000000000, 20.000000000000000,
16903           10.000000000000000, 0.19999999999999996 },
16904   { 428774.21436196787, 20.000000000000000, 20.000000000000000,
16905           10.000000000000000, 0.30000000000000004 },
16906   { 76996819.900892526, 20.000000000000000, 20.000000000000000,
16907           10.000000000000000, 0.39999999999999991 },
16908   { 30473174828.943691, 20.000000000000000, 20.000000000000000,
16909           10.000000000000000, 0.50000000000000000 },
16910   { 39291970835753.094, 20.000000000000000, 20.000000000000000,
16911           10.000000000000000, 0.60000000000000009 },
16912   { 3.3890331048069018e+17, 20.000000000000000, 20.000000000000000,
16913           10.000000000000000, 0.69999999999999996 },
16914   { 9.7157373454594049e+22, 20.000000000000000, 20.000000000000000,
16915           10.000000000000000, 0.80000000000000004 },
16916   { 1.5205808288860858e+32, 20.000000000000000, 20.000000000000000,
16917           10.000000000000000, 0.89999999999999991 },
16918 };
16919 
16920 // Test function for a=20.000000000000000, b=20.000000000000000, c=10.000000000000000.
16921 template <typename Tp>
test245()16922 void test245()
16923 {
16924   const Tp eps = std::numeric_limits<Tp>::epsilon();
16925   Tp max_abs_diff = -Tp(1);
16926   Tp max_abs_frac = -Tp(1);
16927   unsigned int num_datum = sizeof(data245)
16928                          / sizeof(testcase_hyperg<double>);
16929   for (unsigned int i = 0; i < num_datum; ++i)
16930     {
16931       const Tp f = std::tr1::hyperg(Tp(data245[i].a), Tp(data245[i].b),
16932                    Tp(data245[i].c), Tp(data245[i].x));
16933       const Tp f0 = data245[i].f0;
16934       const Tp diff = f - f0;
16935       if (std::abs(diff) > max_abs_diff)
16936         max_abs_diff = std::abs(diff);
16937       if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16938         {
16939           const Tp frac = diff / f0;
16940           if (std::abs(frac) > max_abs_frac)
16941             max_abs_frac = std::abs(frac);
16942         }
16943     }
16944   VERIFY(max_abs_frac < Tp(2.5000000000000005e-05));
16945 }
16946 
main(int,char **)16947 int main(int, char**)
16948 {
16949   test001<double>();
16950   test002<double>();
16951   test003<double>();
16952   test004<double>();
16953   test005<double>();
16954   test006<double>();
16955   test007<double>();
16956   test008<double>();
16957   test009<double>();
16958   test010<double>();
16959   test011<double>();
16960   test012<double>();
16961   test013<double>();
16962   test014<double>();
16963   test015<double>();
16964   test016<double>();
16965   test017<double>();
16966   test018<double>();
16967   test019<double>();
16968   test020<double>();
16969   test021<double>();
16970   test022<double>();
16971   test023<double>();
16972   test024<double>();
16973   test025<double>();
16974   test026<double>();
16975   test027<double>();
16976   test028<double>();
16977   test029<double>();
16978   test030<double>();
16979   test031<double>();
16980   test032<double>();
16981   test033<double>();
16982   test034<double>();
16983   test035<double>();
16984   test036<double>();
16985   test037<double>();
16986   test038<double>();
16987   test039<double>();
16988   test040<double>();
16989   test041<double>();
16990   test042<double>();
16991   test043<double>();
16992   test044<double>();
16993   test045<double>();
16994   test046<double>();
16995   test047<double>();
16996   test048<double>();
16997   test049<double>();
16998   test050<double>();
16999   test051<double>();
17000   test052<double>();
17001   test053<double>();
17002   test054<double>();
17003   test055<double>();
17004   test056<double>();
17005   test057<double>();
17006   test058<double>();
17007   test059<double>();
17008   test060<double>();
17009   test061<double>();
17010   test062<double>();
17011   test063<double>();
17012   test064<double>();
17013   test065<double>();
17014   test066<double>();
17015   test067<double>();
17016   test068<double>();
17017   test069<double>();
17018   test070<double>();
17019   test071<double>();
17020   test072<double>();
17021   test073<double>();
17022   test074<double>();
17023   test075<double>();
17024   test076<double>();
17025   test077<double>();
17026   test078<double>();
17027   test079<double>();
17028   test080<double>();
17029   test081<double>();
17030   test082<double>();
17031   test083<double>();
17032   test084<double>();
17033   test085<double>();
17034   test086<double>();
17035   test087<double>();
17036   test088<double>();
17037   test089<double>();
17038   test090<double>();
17039   test091<double>();
17040   test092<double>();
17041   test093<double>();
17042   test094<double>();
17043   test095<double>();
17044   test096<double>();
17045   test097<double>();
17046   test098<double>();
17047   test099<double>();
17048   test100<double>();
17049   test101<double>();
17050   test102<double>();
17051   test103<double>();
17052   test104<double>();
17053   test105<double>();
17054   test106<double>();
17055   test107<double>();
17056   test108<double>();
17057   test109<double>();
17058   test110<double>();
17059   test111<double>();
17060   test112<double>();
17061   test113<double>();
17062   test114<double>();
17063   test115<double>();
17064   test116<double>();
17065   test117<double>();
17066   test118<double>();
17067   test119<double>();
17068   test120<double>();
17069   test121<double>();
17070   test122<double>();
17071   test123<double>();
17072   test124<double>();
17073   test125<double>();
17074   test126<double>();
17075   test127<double>();
17076   test128<double>();
17077   test129<double>();
17078   test130<double>();
17079   test131<double>();
17080   test132<double>();
17081   test133<double>();
17082   test134<double>();
17083   test135<double>();
17084   test136<double>();
17085   test137<double>();
17086   test138<double>();
17087   test139<double>();
17088   test140<double>();
17089   test141<double>();
17090   test142<double>();
17091   test143<double>();
17092   test144<double>();
17093   test145<double>();
17094   test146<double>();
17095   test147<double>();
17096   test148<double>();
17097   test149<double>();
17098   test150<double>();
17099   test151<double>();
17100   test152<double>();
17101   test153<double>();
17102   test154<double>();
17103   test155<double>();
17104   test156<double>();
17105   test157<double>();
17106   test158<double>();
17107   test159<double>();
17108   test160<double>();
17109   test161<double>();
17110   test162<double>();
17111   test163<double>();
17112   test164<double>();
17113   test165<double>();
17114   test166<double>();
17115   test167<double>();
17116   test168<double>();
17117   test169<double>();
17118   test170<double>();
17119   test171<double>();
17120   test172<double>();
17121   test173<double>();
17122   test174<double>();
17123   test175<double>();
17124   test176<double>();
17125   test177<double>();
17126   test178<double>();
17127   test179<double>();
17128   test180<double>();
17129   test181<double>();
17130   test182<double>();
17131   test183<double>();
17132   test184<double>();
17133   test185<double>();
17134   test186<double>();
17135   test187<double>();
17136   test188<double>();
17137   test189<double>();
17138   test190<double>();
17139   test191<double>();
17140   test192<double>();
17141   test193<double>();
17142   test194<double>();
17143   test195<double>();
17144   test196<double>();
17145   test197<double>();
17146   test198<double>();
17147   test199<double>();
17148   test200<double>();
17149   test201<double>();
17150   test202<double>();
17151   test203<double>();
17152   test204<double>();
17153   test205<double>();
17154   test206<double>();
17155   test207<double>();
17156   test208<double>();
17157   test209<double>();
17158   test210<double>();
17159   test211<double>();
17160   test212<double>();
17161   test213<double>();
17162   test214<double>();
17163   test215<double>();
17164   test216<double>();
17165   test217<double>();
17166   test218<double>();
17167   test219<double>();
17168   test220<double>();
17169   test221<double>();
17170   test222<double>();
17171   test223<double>();
17172   test224<double>();
17173   test225<double>();
17174   test226<double>();
17175   test227<double>();
17176   test228<double>();
17177   test229<double>();
17178   test230<double>();
17179   test231<double>();
17180   test232<double>();
17181   test233<double>();
17182   test234<double>();
17183   test235<double>();
17184   test236<double>();
17185   test237<double>();
17186   test238<double>();
17187   test239<double>();
17188   test240<double>();
17189   test241<double>();
17190   test242<double>();
17191   test243<double>();
17192   test244<double>();
17193   test245<double>();
17194   return 0;
17195 }
17196