OSDN Git Service

Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception.
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / testsuite / tr1 / 5_numerical_facilities / special_functions / 14_ellint_3 / check_value.cc
1 // 2007-02-04  Edward Smith-Rowland <3dw4rd@verizon.net>
2 //
3 // Copyright (C) 2007, 2009 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 //  ellint_3
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 k=-0.90000000000000002, nu=0.0000000000000000.
43 testcase_ellint_3<double> data001[] = {
44   { -0.0000000000000000, -0.90000000000000002, 0.0000000000000000, 
45           0.0000000000000000 },
46   { 0.17525427376115027, -0.90000000000000002, 0.0000000000000000, 
47           0.17453292519943295 },
48   { 0.35492464591297446, -0.90000000000000002, 0.0000000000000000, 
49           0.34906585039886590 },
50   { 0.54388221416157134, -0.90000000000000002, 0.0000000000000000, 
51           0.52359877559829882 },
52   { 0.74797400423532523, -0.90000000000000002, 0.0000000000000000, 
53           0.69813170079773179 },
54   { 0.97463898451966458, -0.90000000000000002, 0.0000000000000000, 
55           0.87266462599716477 },
56   { 1.2334463254523440, -0.90000000000000002, 0.0000000000000000, 
57           1.0471975511965976 },
58   { 1.5355247765594910, -0.90000000000000002, 0.0000000000000000, 
59           1.2217304763960306 },
60   { 1.8882928567775124, -0.90000000000000002, 0.0000000000000000, 
61           1.3962634015954636 },
62   { 2.2805491384227703, -0.90000000000000002, 0.0000000000000000, 
63           1.5707963267948966 },
64 };
65
66 // Test function for k=-0.90000000000000002, nu=0.0000000000000000.
67 template <typename Tp>
68 void test001()
69 {
70   const Tp eps = std::numeric_limits<Tp>::epsilon();
71   Tp max_abs_diff = -Tp(1);
72   Tp max_abs_frac = -Tp(1);
73   unsigned int num_datum = sizeof(data001)
74                          / sizeof(testcase_ellint_3<double>);
75   for (unsigned int i = 0; i < num_datum; ++i)
76     {
77       const Tp f = std::tr1::ellint_3(Tp(data001[i].k), Tp(data001[i].nu),
78                    Tp(data001[i].phi));
79       const Tp f0 = data001[i].f0;
80       const Tp diff = f - f0;
81       if (std::abs(diff) > max_abs_diff)
82         max_abs_diff = std::abs(diff);
83       if (std::abs(f0) > Tp(10) * eps
84        && std::abs(f) > Tp(10) * eps)
85         {
86           const Tp frac = diff / f0;
87           if (std::abs(frac) > max_abs_frac)
88             max_abs_frac = std::abs(frac);
89         }
90     }
91   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
92 }
93
94 // Test data for k=-0.90000000000000002, nu=0.10000000000000001.
95 testcase_ellint_3<double> data002[] = {
96   { -0.0000000000000000, -0.90000000000000002, 0.10000000000000001, 
97           0.0000000000000000 },
98   { 0.17507714233254659, -0.90000000000000002, 0.10000000000000001, 
99           0.17453292519943295 },
100   { 0.35350932904326521, -0.90000000000000002, 0.10000000000000001, 
101           0.34906585039886590 },
102   { 0.53911129989870998, -0.90000000000000002, 0.10000000000000001, 
103           0.52359877559829882 },
104   { 0.73666644254508429, -0.90000000000000002, 0.10000000000000001, 
105           0.69813170079773179 },
106   { 0.95250736612100184, -0.90000000000000002, 0.10000000000000001, 
107           0.87266462599716477 },
108   { 1.1950199550905594, -0.90000000000000002, 0.10000000000000001, 
109           1.0471975511965976 },
110   { 1.4741687286340848, -0.90000000000000002, 0.10000000000000001, 
111           1.2217304763960306 },
112   { 1.7968678183506059, -0.90000000000000002, 0.10000000000000001, 
113           1.3962634015954636 },
114   { 2.1537868513875287, -0.90000000000000002, 0.10000000000000001, 
115           1.5707963267948966 },
116 };
117
118 // Test function for k=-0.90000000000000002, nu=0.10000000000000001.
119 template <typename Tp>
120 void test002()
121 {
122   const Tp eps = std::numeric_limits<Tp>::epsilon();
123   Tp max_abs_diff = -Tp(1);
124   Tp max_abs_frac = -Tp(1);
125   unsigned int num_datum = sizeof(data002)
126                          / sizeof(testcase_ellint_3<double>);
127   for (unsigned int i = 0; i < num_datum; ++i)
128     {
129       const Tp f = std::tr1::ellint_3(Tp(data002[i].k), Tp(data002[i].nu),
130                    Tp(data002[i].phi));
131       const Tp f0 = data002[i].f0;
132       const Tp diff = f - f0;
133       if (std::abs(diff) > max_abs_diff)
134         max_abs_diff = std::abs(diff);
135       if (std::abs(f0) > Tp(10) * eps
136        && std::abs(f) > Tp(10) * eps)
137         {
138           const Tp frac = diff / f0;
139           if (std::abs(frac) > max_abs_frac)
140             max_abs_frac = std::abs(frac);
141         }
142     }
143   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
144 }
145
146 // Test data for k=-0.90000000000000002, nu=0.20000000000000001.
147 testcase_ellint_3<double> data003[] = {
148   { -0.0000000000000000, -0.90000000000000002, 0.20000000000000001, 
149           0.0000000000000000 },
150   { 0.17490065089140930, -0.90000000000000002, 0.20000000000000001, 
151           0.17453292519943295 },
152   { 0.35211377590661436, -0.90000000000000002, 0.20000000000000001, 
153           0.34906585039886590 },
154   { 0.53448220334204122, -0.90000000000000002, 0.20000000000000001, 
155           0.52359877559829882 },
156   { 0.72591368943179613, -0.90000000000000002, 0.20000000000000001, 
157           0.69813170079773179 },
158   { 0.93192539780038763, -0.90000000000000002, 0.20000000000000001, 
159           0.87266462599716477 },
160   { 1.1600809679692683, -0.90000000000000002, 0.20000000000000001, 
161           1.0471975511965976 },
162   { 1.4195407225882508, -0.90000000000000002, 0.20000000000000001, 
163           1.2217304763960306 },
164   { 1.7168966476424528, -0.90000000000000002, 0.20000000000000001, 
165           1.3962634015954636 },
166   { 2.0443194576468890, -0.90000000000000002, 0.20000000000000001, 
167           1.5707963267948966 },
168 };
169
170 // Test function for k=-0.90000000000000002, nu=0.20000000000000001.
171 template <typename Tp>
172 void test003()
173 {
174   const Tp eps = std::numeric_limits<Tp>::epsilon();
175   Tp max_abs_diff = -Tp(1);
176   Tp max_abs_frac = -Tp(1);
177   unsigned int num_datum = sizeof(data003)
178                          / sizeof(testcase_ellint_3<double>);
179   for (unsigned int i = 0; i < num_datum; ++i)
180     {
181       const Tp f = std::tr1::ellint_3(Tp(data003[i].k), Tp(data003[i].nu),
182                    Tp(data003[i].phi));
183       const Tp f0 = data003[i].f0;
184       const Tp diff = f - f0;
185       if (std::abs(diff) > max_abs_diff)
186         max_abs_diff = std::abs(diff);
187       if (std::abs(f0) > Tp(10) * eps
188        && std::abs(f) > Tp(10) * eps)
189         {
190           const Tp frac = diff / f0;
191           if (std::abs(frac) > max_abs_frac)
192             max_abs_frac = std::abs(frac);
193         }
194     }
195   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
196 }
197
198 // Test data for k=-0.90000000000000002, nu=0.29999999999999999.
199 testcase_ellint_3<double> data004[] = {
200   { -0.0000000000000000, -0.90000000000000002, 0.29999999999999999, 
201           0.0000000000000000 },
202   { 0.17472479532647534, -0.90000000000000002, 0.29999999999999999, 
203           0.17453292519943295 },
204   { 0.35073750187374114, -0.90000000000000002, 0.29999999999999999, 
205           0.34906585039886590 },
206   { 0.52998766129466979, -0.90000000000000002, 0.29999999999999999, 
207           0.52359877559829882 },
208   { 0.71566993548699587, -0.90000000000000002, 0.29999999999999999, 
209           0.69813170079773179 },
210   { 0.91271517762560195, -0.90000000000000002, 0.29999999999999999, 
211           0.87266462599716477 },
212   { 1.1281241199843370, -0.90000000000000002, 0.29999999999999999, 
213           1.0471975511965976 },
214   { 1.3704929576917448, -0.90000000000000002, 0.29999999999999999, 
215           1.2217304763960306 },
216   { 1.6461981511487715, -0.90000000000000002, 0.29999999999999999, 
217           1.3962634015954636 },
218   { 1.9486280260314426, -0.90000000000000002, 0.29999999999999999, 
219           1.5707963267948966 },
220 };
221
222 // Test function for k=-0.90000000000000002, nu=0.29999999999999999.
223 template <typename Tp>
224 void test004()
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(data004)
230                          / sizeof(testcase_ellint_3<double>);
231   for (unsigned int i = 0; i < num_datum; ++i)
232     {
233       const Tp f = std::tr1::ellint_3(Tp(data004[i].k), Tp(data004[i].nu),
234                    Tp(data004[i].phi));
235       const Tp f0 = data004[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
240        && std::abs(f) > Tp(10) * eps)
241         {
242           const Tp frac = diff / f0;
243           if (std::abs(frac) > max_abs_frac)
244             max_abs_frac = std::abs(frac);
245         }
246     }
247   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
248 }
249
250 // Test data for k=-0.90000000000000002, nu=0.40000000000000002.
251 testcase_ellint_3<double> data005[] = {
252   { -0.0000000000000000, -0.90000000000000002, 0.40000000000000002, 
253           0.0000000000000000 },
254   { 0.17454957156468839, -0.90000000000000002, 0.40000000000000002, 
255           0.17453292519943295 },
256   { 0.34938003933330430, -0.90000000000000002, 0.40000000000000002, 
257           0.34906585039886590 },
258   { 0.52562093533067455, -0.90000000000000002, 0.40000000000000002, 
259           0.52359877559829882 },
260   { 0.70589461324915703, -0.90000000000000002, 0.40000000000000002, 
261           0.69813170079773179 },
262   { 0.89472658511942849, -0.90000000000000002, 0.40000000000000002, 
263           0.87266462599716477 },
264   { 1.0987419542323440, -0.90000000000000002, 0.40000000000000002, 
265           1.0471975511965976 },
266   { 1.3261349565496301, -0.90000000000000002, 0.40000000000000002, 
267           1.2217304763960306 },
268   { 1.5831293909853767, -0.90000000000000002, 0.40000000000000002, 
269           1.3962634015954636 },
270   { 1.8641114227238349, -0.90000000000000002, 0.40000000000000002, 
271           1.5707963267948966 },
272 };
273
274 // Test function for k=-0.90000000000000002, nu=0.40000000000000002.
275 template <typename Tp>
276 void test005()
277 {
278   const Tp eps = std::numeric_limits<Tp>::epsilon();
279   Tp max_abs_diff = -Tp(1);
280   Tp max_abs_frac = -Tp(1);
281   unsigned int num_datum = sizeof(data005)
282                          / sizeof(testcase_ellint_3<double>);
283   for (unsigned int i = 0; i < num_datum; ++i)
284     {
285       const Tp f = std::tr1::ellint_3(Tp(data005[i].k), Tp(data005[i].nu),
286                    Tp(data005[i].phi));
287       const Tp f0 = data005[i].f0;
288       const Tp diff = f - f0;
289       if (std::abs(diff) > max_abs_diff)
290         max_abs_diff = std::abs(diff);
291       if (std::abs(f0) > Tp(10) * eps
292        && std::abs(f) > Tp(10) * eps)
293         {
294           const Tp frac = diff / f0;
295           if (std::abs(frac) > max_abs_frac)
296             max_abs_frac = std::abs(frac);
297         }
298     }
299   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
300 }
301
302 // Test data for k=-0.90000000000000002, nu=0.50000000000000000.
303 testcase_ellint_3<double> data006[] = {
304   { -0.0000000000000000, -0.90000000000000002, 0.50000000000000000, 
305           0.0000000000000000 },
306   { 0.17437497557073336, -0.90000000000000002, 0.50000000000000000, 
307           0.17453292519943295 },
308   { 0.34804093691586013, -0.90000000000000002, 0.50000000000000000, 
309           0.34906585039886590 },
310   { 0.52137576320372914, -0.90000000000000002, 0.50000000000000000, 
311           0.52359877559829882 },
312   { 0.69655163996912284, -0.90000000000000002, 0.50000000000000000, 
313           0.69813170079773179 },
314   { 0.87783188683054236, -0.90000000000000002, 0.50000000000000000, 
315           0.87266462599716477 },
316   { 1.0716015959755185, -0.90000000000000002, 0.50000000000000000, 
317           1.0471975511965976 },
318   { 1.2857636916026747, -0.90000000000000002, 0.50000000000000000, 
319           1.2217304763960306 },
320   { 1.5264263913252365, -0.90000000000000002, 0.50000000000000000, 
321           1.3962634015954636 },
322   { 1.7888013241937861, -0.90000000000000002, 0.50000000000000000, 
323           1.5707963267948966 },
324 };
325
326 // Test function for k=-0.90000000000000002, nu=0.50000000000000000.
327 template <typename Tp>
328 void test006()
329 {
330   const Tp eps = std::numeric_limits<Tp>::epsilon();
331   Tp max_abs_diff = -Tp(1);
332   Tp max_abs_frac = -Tp(1);
333   unsigned int num_datum = sizeof(data006)
334                          / sizeof(testcase_ellint_3<double>);
335   for (unsigned int i = 0; i < num_datum; ++i)
336     {
337       const Tp f = std::tr1::ellint_3(Tp(data006[i].k), Tp(data006[i].nu),
338                    Tp(data006[i].phi));
339       const Tp f0 = data006[i].f0;
340       const Tp diff = f - f0;
341       if (std::abs(diff) > max_abs_diff)
342         max_abs_diff = std::abs(diff);
343       if (std::abs(f0) > Tp(10) * eps
344        && std::abs(f) > Tp(10) * eps)
345         {
346           const Tp frac = diff / f0;
347           if (std::abs(frac) > max_abs_frac)
348             max_abs_frac = std::abs(frac);
349         }
350     }
351   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
352 }
353
354 // Test data for k=-0.90000000000000002, nu=0.59999999999999998.
355 testcase_ellint_3<double> data007[] = {
356   { -0.0000000000000000, -0.90000000000000002, 0.59999999999999998, 
357           0.0000000000000000 },
358   { 0.17420100334657815, -0.90000000000000002, 0.59999999999999998, 
359           0.17453292519943295 },
360   { 0.34671975876122157, -0.90000000000000002, 0.59999999999999998, 
361           0.34906585039886590 },
362   { 0.51724631570707968, -0.90000000000000002, 0.59999999999999998, 
363           0.52359877559829882 },
364   { 0.68760879113743056, -0.90000000000000002, 0.59999999999999998, 
365           0.69813170079773179 },
366   { 0.86192157779698364, -0.90000000000000002, 0.59999999999999998, 
367           0.87266462599716477 },
368   { 1.0464279696166354, -0.90000000000000002, 0.59999999999999998, 
369           1.0471975511965976 },
370   { 1.2488156247094004, -0.90000000000000002, 0.59999999999999998, 
371           1.2217304763960306 },
372   { 1.4750988777188474, -0.90000000000000002, 0.59999999999999998, 
373           1.3962634015954636 },
374   { 1.7211781128919523, -0.90000000000000002, 0.59999999999999998, 
375           1.5707963267948966 },
376 };
377
378 // Test function for k=-0.90000000000000002, nu=0.59999999999999998.
379 template <typename Tp>
380 void test007()
381 {
382   const Tp eps = std::numeric_limits<Tp>::epsilon();
383   Tp max_abs_diff = -Tp(1);
384   Tp max_abs_frac = -Tp(1);
385   unsigned int num_datum = sizeof(data007)
386                          / sizeof(testcase_ellint_3<double>);
387   for (unsigned int i = 0; i < num_datum; ++i)
388     {
389       const Tp f = std::tr1::ellint_3(Tp(data007[i].k), Tp(data007[i].nu),
390                    Tp(data007[i].phi));
391       const Tp f0 = data007[i].f0;
392       const Tp diff = f - f0;
393       if (std::abs(diff) > max_abs_diff)
394         max_abs_diff = std::abs(diff);
395       if (std::abs(f0) > Tp(10) * eps
396        && std::abs(f) > Tp(10) * eps)
397         {
398           const Tp frac = diff / f0;
399           if (std::abs(frac) > max_abs_frac)
400             max_abs_frac = std::abs(frac);
401         }
402     }
403   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
404 }
405
406 // Test data for k=-0.90000000000000002, nu=0.69999999999999996.
407 testcase_ellint_3<double> data008[] = {
408   { -0.0000000000000000, -0.90000000000000002, 0.69999999999999996, 
409           0.0000000000000000 },
410   { 0.17402765093102210, -0.90000000000000002, 0.69999999999999996, 
411           0.17453292519943295 },
412   { 0.34541608382635131, -0.90000000000000002, 0.69999999999999996, 
413           0.34906585039886590 },
414   { 0.51322715827061705, -0.90000000000000002, 0.69999999999999996, 
415           0.52359877559829882 },
416   { 0.67903717872440306, -0.90000000000000002, 0.69999999999999996, 
417           0.69813170079773179 },
418   { 0.84690113601682671, -0.90000000000000002, 0.69999999999999996, 
419           0.87266462599716477 },
420   { 1.0229914311548418, -0.90000000000000002, 0.69999999999999996, 
421           1.0471975511965976 },
422   { 1.2148329639709381, -0.90000000000000002, 0.69999999999999996, 
423           1.2217304763960306 },
424   { 1.4283586501307806, -0.90000000000000002, 0.69999999999999996, 
425           1.3962634015954636 },
426   { 1.6600480747670938, -0.90000000000000002, 0.69999999999999996, 
427           1.5707963267948966 },
428 };
429
430 // Test function for k=-0.90000000000000002, nu=0.69999999999999996.
431 template <typename Tp>
432 void test008()
433 {
434   const Tp eps = std::numeric_limits<Tp>::epsilon();
435   Tp max_abs_diff = -Tp(1);
436   Tp max_abs_frac = -Tp(1);
437   unsigned int num_datum = sizeof(data008)
438                          / sizeof(testcase_ellint_3<double>);
439   for (unsigned int i = 0; i < num_datum; ++i)
440     {
441       const Tp f = std::tr1::ellint_3(Tp(data008[i].k), Tp(data008[i].nu),
442                    Tp(data008[i].phi));
443       const Tp f0 = data008[i].f0;
444       const Tp diff = f - f0;
445       if (std::abs(diff) > max_abs_diff)
446         max_abs_diff = std::abs(diff);
447       if (std::abs(f0) > Tp(10) * eps
448        && std::abs(f) > Tp(10) * eps)
449         {
450           const Tp frac = diff / f0;
451           if (std::abs(frac) > max_abs_frac)
452             max_abs_frac = std::abs(frac);
453         }
454     }
455   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
456 }
457
458 // Test data for k=-0.90000000000000002, nu=0.80000000000000004.
459 testcase_ellint_3<double> data009[] = {
460   { -0.0000000000000000, -0.90000000000000002, 0.80000000000000004, 
461           0.0000000000000000 },
462   { 0.17385491439925149, -0.90000000000000002, 0.80000000000000004, 
463           0.17453292519943295 },
464   { 0.34412950523113928, -0.90000000000000002, 0.80000000000000004, 
465           0.34906585039886590 },
466   { 0.50931321668729612, -0.90000000000000002, 0.80000000000000004, 
467           0.52359877559829882 },
468   { 0.67081081392296349, -0.90000000000000002, 0.80000000000000004, 
469           0.69813170079773179 },
470   { 0.83268846097293259, -0.90000000000000002, 0.80000000000000004, 
471           0.87266462599716477 },
472   { 1.0010985015814027, -0.90000000000000002, 0.80000000000000004, 
473           1.0471975511965976 },
474   { 1.1834394045489678, -0.90000000000000002, 0.80000000000000004, 
475           1.2217304763960306 },
476   { 1.3855695891683188, -0.90000000000000002, 0.80000000000000004, 
477           1.3962634015954636 },
478   { 1.6044591960982204, -0.90000000000000002, 0.80000000000000004, 
479           1.5707963267948966 },
480 };
481
482 // Test function for k=-0.90000000000000002, nu=0.80000000000000004.
483 template <typename Tp>
484 void test009()
485 {
486   const Tp eps = std::numeric_limits<Tp>::epsilon();
487   Tp max_abs_diff = -Tp(1);
488   Tp max_abs_frac = -Tp(1);
489   unsigned int num_datum = sizeof(data009)
490                          / sizeof(testcase_ellint_3<double>);
491   for (unsigned int i = 0; i < num_datum; ++i)
492     {
493       const Tp f = std::tr1::ellint_3(Tp(data009[i].k), Tp(data009[i].nu),
494                    Tp(data009[i].phi));
495       const Tp f0 = data009[i].f0;
496       const Tp diff = f - f0;
497       if (std::abs(diff) > max_abs_diff)
498         max_abs_diff = std::abs(diff);
499       if (std::abs(f0) > Tp(10) * eps
500        && std::abs(f) > Tp(10) * eps)
501         {
502           const Tp frac = diff / f0;
503           if (std::abs(frac) > max_abs_frac)
504             max_abs_frac = std::abs(frac);
505         }
506     }
507   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
508 }
509
510 // Test data for k=-0.90000000000000002, nu=0.90000000000000002.
511 testcase_ellint_3<double> data010[] = {
512   { -0.0000000000000000, -0.90000000000000002, 0.90000000000000002, 
513           0.0000000000000000 },
514   { 0.17368278986240138, -0.90000000000000002, 0.90000000000000002, 
515           0.17453292519943295 },
516   { 0.34285962963961397, -0.90000000000000002, 0.90000000000000002, 
517           0.34906585039886590 },
518   { 0.50549974644993323, -0.90000000000000002, 0.90000000000000002, 
519           0.52359877559829882 },
520   { 0.66290623857720898, -0.90000000000000002, 0.90000000000000002, 
521           0.69813170079773179 },
522   { 0.81921183128847164, -0.90000000000000002, 0.90000000000000002, 
523           0.87266462599716477 },
524   { 0.98058481956066390, -0.90000000000000002, 0.90000000000000002, 
525           1.0471975511965976 },
526   { 1.1543223520473567, -0.90000000000000002, 0.90000000000000002, 
527           1.2217304763960306 },
528   { 1.3462119782292938, -0.90000000000000002, 0.90000000000000002, 
529           1.3962634015954636 },
530   { 1.5536420236310946, -0.90000000000000002, 0.90000000000000002, 
531           1.5707963267948966 },
532 };
533
534 // Test function for k=-0.90000000000000002, nu=0.90000000000000002.
535 template <typename Tp>
536 void test010()
537 {
538   const Tp eps = std::numeric_limits<Tp>::epsilon();
539   Tp max_abs_diff = -Tp(1);
540   Tp max_abs_frac = -Tp(1);
541   unsigned int num_datum = sizeof(data010)
542                          / sizeof(testcase_ellint_3<double>);
543   for (unsigned int i = 0; i < num_datum; ++i)
544     {
545       const Tp f = std::tr1::ellint_3(Tp(data010[i].k), Tp(data010[i].nu),
546                    Tp(data010[i].phi));
547       const Tp f0 = data010[i].f0;
548       const Tp diff = f - f0;
549       if (std::abs(diff) > max_abs_diff)
550         max_abs_diff = std::abs(diff);
551       if (std::abs(f0) > Tp(10) * eps
552        && std::abs(f) > Tp(10) * eps)
553         {
554           const Tp frac = diff / f0;
555           if (std::abs(frac) > max_abs_frac)
556             max_abs_frac = std::abs(frac);
557         }
558     }
559   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
560 }
561
562 // Test data for k=-0.80000000000000004, nu=0.0000000000000000.
563 testcase_ellint_3<double> data011[] = {
564   { -0.0000000000000000, -0.80000000000000004, 0.0000000000000000, 
565           0.0000000000000000 },
566   { 0.17510154241338902, -0.80000000000000004, 0.0000000000000000, 
567           0.17453292519943295 },
568   { 0.35365068839779390, -0.80000000000000004, 0.0000000000000000, 
569           0.34906585039886590 },
570   { 0.53926804409084561, -0.80000000000000004, 0.0000000000000000, 
571           0.52359877559829882 },
572   { 0.73587926028070383, -0.80000000000000004, 0.0000000000000000, 
573           0.69813170079773179 },
574   { 0.94770942970071170, -0.80000000000000004, 0.0000000000000000, 
575           0.87266462599716477 },
576   { 1.1789022995388239, -0.80000000000000004, 0.0000000000000000, 
577           1.0471975511965976 },
578   { 1.4323027881876009, -0.80000000000000004, 0.0000000000000000, 
579           1.2217304763960306 },
580   { 1.7069629739121674, -0.80000000000000004, 0.0000000000000000, 
581           1.3962634015954636 },
582   { 1.9953027776647296, -0.80000000000000004, 0.0000000000000000, 
583           1.5707963267948966 },
584 };
585
586 // Test function for k=-0.80000000000000004, nu=0.0000000000000000.
587 template <typename Tp>
588 void test011()
589 {
590   const Tp eps = std::numeric_limits<Tp>::epsilon();
591   Tp max_abs_diff = -Tp(1);
592   Tp max_abs_frac = -Tp(1);
593   unsigned int num_datum = sizeof(data011)
594                          / sizeof(testcase_ellint_3<double>);
595   for (unsigned int i = 0; i < num_datum; ++i)
596     {
597       const Tp f = std::tr1::ellint_3(Tp(data011[i].k), Tp(data011[i].nu),
598                    Tp(data011[i].phi));
599       const Tp f0 = data011[i].f0;
600       const Tp diff = f - f0;
601       if (std::abs(diff) > max_abs_diff)
602         max_abs_diff = std::abs(diff);
603       if (std::abs(f0) > Tp(10) * eps
604        && std::abs(f) > Tp(10) * eps)
605         {
606           const Tp frac = diff / f0;
607           if (std::abs(frac) > max_abs_frac)
608             max_abs_frac = std::abs(frac);
609         }
610     }
611   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
612 }
613
614 // Test data for k=-0.80000000000000004, nu=0.10000000000000001.
615 testcase_ellint_3<double> data012[] = {
616   { -0.0000000000000000, -0.80000000000000004, 0.10000000000000001, 
617           0.0000000000000000 },
618   { 0.17492468824017166, -0.80000000000000004, 0.10000000000000001, 
619           0.17453292519943295 },
620   { 0.35224443521476911, -0.80000000000000004, 0.10000000000000001, 
621           0.34906585039886590 },
622   { 0.53456851853226961, -0.80000000000000004, 0.10000000000000001, 
623           0.52359877559829882 },
624   { 0.72488875602364944, -0.80000000000000004, 0.10000000000000001, 
625           0.69813170079773179 },
626   { 0.92661354274638952, -0.80000000000000004, 0.10000000000000001, 
627           0.87266462599716477 },
628   { 1.1432651144499077, -0.80000000000000004, 0.10000000000000001, 
629           1.0471975511965976 },
630   { 1.3774479927211429, -0.80000000000000004, 0.10000000000000001, 
631           1.2217304763960306 },
632   { 1.6287092337196041, -0.80000000000000004, 0.10000000000000001, 
633           1.3962634015954636 },
634   { 1.8910755418379521, -0.80000000000000004, 0.10000000000000001, 
635           1.5707963267948966 },
636 };
637
638 // Test function for k=-0.80000000000000004, nu=0.10000000000000001.
639 template <typename Tp>
640 void test012()
641 {
642   const Tp eps = std::numeric_limits<Tp>::epsilon();
643   Tp max_abs_diff = -Tp(1);
644   Tp max_abs_frac = -Tp(1);
645   unsigned int num_datum = sizeof(data012)
646                          / sizeof(testcase_ellint_3<double>);
647   for (unsigned int i = 0; i < num_datum; ++i)
648     {
649       const Tp f = std::tr1::ellint_3(Tp(data012[i].k), Tp(data012[i].nu),
650                    Tp(data012[i].phi));
651       const Tp f0 = data012[i].f0;
652       const Tp diff = f - f0;
653       if (std::abs(diff) > max_abs_diff)
654         max_abs_diff = std::abs(diff);
655       if (std::abs(f0) > Tp(10) * eps
656        && std::abs(f) > Tp(10) * eps)
657         {
658           const Tp frac = diff / f0;
659           if (std::abs(frac) > max_abs_frac)
660             max_abs_frac = std::abs(frac);
661         }
662     }
663   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
664 }
665
666 // Test data for k=-0.80000000000000004, nu=0.20000000000000001.
667 testcase_ellint_3<double> data013[] = {
668   { -0.0000000000000000, -0.80000000000000004, 0.20000000000000001, 
669           0.0000000000000000 },
670   { 0.17474847286224943, -0.80000000000000004, 0.20000000000000001, 
671           0.17453292519943295 },
672   { 0.35085779529084682, -0.80000000000000004, 0.20000000000000001, 
673           0.34906585039886590 },
674   { 0.53000829263059157, -0.80000000000000004, 0.20000000000000001, 
675           0.52359877559829882 },
676   { 0.71443466027453406, -0.80000000000000004, 0.20000000000000001, 
677           0.69813170079773179 },
678   { 0.90698196872715420, -0.80000000000000004, 0.20000000000000001, 
679           0.87266462599716477 },
680   { 1.1108198200558581, -0.80000000000000004, 0.20000000000000001, 
681           1.0471975511965976 },
682   { 1.3284988909963957, -0.80000000000000004, 0.20000000000000001, 
683           1.2217304763960306 },
684   { 1.5600369318140328, -0.80000000000000004, 0.20000000000000001, 
685           1.3962634015954636 },
686   { 1.8007226661734588, -0.80000000000000004, 0.20000000000000001, 
687           1.5707963267948966 },
688 };
689
690 // Test function for k=-0.80000000000000004, nu=0.20000000000000001.
691 template <typename Tp>
692 void test013()
693 {
694   const Tp eps = std::numeric_limits<Tp>::epsilon();
695   Tp max_abs_diff = -Tp(1);
696   Tp max_abs_frac = -Tp(1);
697   unsigned int num_datum = sizeof(data013)
698                          / sizeof(testcase_ellint_3<double>);
699   for (unsigned int i = 0; i < num_datum; ++i)
700     {
701       const Tp f = std::tr1::ellint_3(Tp(data013[i].k), Tp(data013[i].nu),
702                    Tp(data013[i].phi));
703       const Tp f0 = data013[i].f0;
704       const Tp diff = f - f0;
705       if (std::abs(diff) > max_abs_diff)
706         max_abs_diff = std::abs(diff);
707       if (std::abs(f0) > Tp(10) * eps
708        && std::abs(f) > Tp(10) * eps)
709         {
710           const Tp frac = diff / f0;
711           if (std::abs(frac) > max_abs_frac)
712             max_abs_frac = std::abs(frac);
713         }
714     }
715   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
716 }
717
718 // Test data for k=-0.80000000000000004, nu=0.29999999999999999.
719 testcase_ellint_3<double> data014[] = {
720   { -0.0000000000000000, -0.80000000000000004, 0.29999999999999999, 
721           0.0000000000000000 },
722   { 0.17457289217669891, -0.80000000000000004, 0.29999999999999999, 
723           0.17453292519943295 },
724   { 0.34949028801501258, -0.80000000000000004, 0.29999999999999999, 
725           0.34906585039886590 },
726   { 0.52558024362769318, -0.80000000000000004, 0.29999999999999999, 
727           0.52359877559829882 },
728   { 0.70447281740094914, -0.80000000000000004, 0.29999999999999999, 
729           0.69813170079773179 },
730   { 0.88864745641528986, -0.80000000000000004, 0.29999999999999999, 
731           0.87266462599716477 },
732   { 1.0811075819341465, -0.80000000000000004, 0.29999999999999999, 
733           1.0471975511965976 },
734   { 1.2844589654082377, -0.80000000000000004, 0.29999999999999999, 
735           1.2217304763960306 },
736   { 1.4991461361277849, -0.80000000000000004, 0.29999999999999999, 
737           1.3962634015954636 },
738   { 1.7214611048717301, -0.80000000000000004, 0.29999999999999999, 
739           1.5707963267948966 },
740 };
741
742 // Test function for k=-0.80000000000000004, nu=0.29999999999999999.
743 template <typename Tp>
744 void test014()
745 {
746   const Tp eps = std::numeric_limits<Tp>::epsilon();
747   Tp max_abs_diff = -Tp(1);
748   Tp max_abs_frac = -Tp(1);
749   unsigned int num_datum = sizeof(data014)
750                          / sizeof(testcase_ellint_3<double>);
751   for (unsigned int i = 0; i < num_datum; ++i)
752     {
753       const Tp f = std::tr1::ellint_3(Tp(data014[i].k), Tp(data014[i].nu),
754                    Tp(data014[i].phi));
755       const Tp f0 = data014[i].f0;
756       const Tp diff = f - f0;
757       if (std::abs(diff) > max_abs_diff)
758         max_abs_diff = std::abs(diff);
759       if (std::abs(f0) > Tp(10) * eps
760        && std::abs(f) > Tp(10) * eps)
761         {
762           const Tp frac = diff / f0;
763           if (std::abs(frac) > max_abs_frac)
764             max_abs_frac = std::abs(frac);
765         }
766     }
767   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
768 }
769
770 // Test data for k=-0.80000000000000004, nu=0.40000000000000002.
771 testcase_ellint_3<double> data015[] = {
772   { -0.0000000000000000, -0.80000000000000004, 0.40000000000000002, 
773           0.0000000000000000 },
774   { 0.17439794211872178, -0.80000000000000004, 0.40000000000000002, 
775           0.17453292519943295 },
776   { 0.34814144964568972, -0.80000000000000004, 0.40000000000000002, 
777           0.34906585039886590 },
778   { 0.52127776285273075, -0.80000000000000004, 0.40000000000000002, 
779           0.52359877559829882 },
780   { 0.69496411438966599, -0.80000000000000004, 0.40000000000000002, 
781           0.69813170079773179 },
782   { 0.87146878427509589, -0.80000000000000004, 0.40000000000000002, 
783           0.87266462599716477 },
784   { 1.0537579024937762, -0.80000000000000004, 0.40000000000000002, 
785           1.0471975511965976 },
786   { 1.2445534387922637, -0.80000000000000004, 0.40000000000000002, 
787           1.2217304763960306 },
788   { 1.4446769766361993, -0.80000000000000004, 0.40000000000000002, 
789           1.3962634015954636 },
790   { 1.6512267838651289, -0.80000000000000004, 0.40000000000000002, 
791           1.5707963267948966 },
792 };
793
794 // Test function for k=-0.80000000000000004, nu=0.40000000000000002.
795 template <typename Tp>
796 void test015()
797 {
798   const Tp eps = std::numeric_limits<Tp>::epsilon();
799   Tp max_abs_diff = -Tp(1);
800   Tp max_abs_frac = -Tp(1);
801   unsigned int num_datum = sizeof(data015)
802                          / sizeof(testcase_ellint_3<double>);
803   for (unsigned int i = 0; i < num_datum; ++i)
804     {
805       const Tp f = std::tr1::ellint_3(Tp(data015[i].k), Tp(data015[i].nu),
806                    Tp(data015[i].phi));
807       const Tp f0 = data015[i].f0;
808       const Tp diff = f - f0;
809       if (std::abs(diff) > max_abs_diff)
810         max_abs_diff = std::abs(diff);
811       if (std::abs(f0) > Tp(10) * eps
812        && std::abs(f) > Tp(10) * eps)
813         {
814           const Tp frac = diff / f0;
815           if (std::abs(frac) > max_abs_frac)
816             max_abs_frac = std::abs(frac);
817         }
818     }
819   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
820 }
821
822 // Test data for k=-0.80000000000000004, nu=0.50000000000000000.
823 testcase_ellint_3<double> data016[] = {
824   { -0.0000000000000000, -0.80000000000000004, 0.50000000000000000, 
825           0.0000000000000000 },
826   { 0.17422361866118047, -0.80000000000000004, 0.50000000000000000, 
827           0.17453292519943295 },
828   { 0.34681083254170475, -0.80000000000000004, 0.50000000000000000, 
829           0.34906585039886590 },
830   { 0.51709470815494440, -0.80000000000000004, 0.50000000000000000, 
831           0.52359877559829882 },
832   { 0.68587375344080259, -0.80000000000000004, 0.50000000000000000, 
833           0.69813170079773179 },
834   { 0.85532571852810624, -0.80000000000000004, 0.50000000000000000, 
835           0.87266462599716477 },
836   { 1.0284677391874906, -0.80000000000000004, 0.50000000000000000, 
837           1.0471975511965976 },
838   { 1.2081693942686225, -0.80000000000000004, 0.50000000000000000, 
839           1.2217304763960306 },
840   { 1.3955803006426311, -0.80000000000000004, 0.50000000000000000, 
841           1.3962634015954636 },
842   { 1.5884528947755532, -0.80000000000000004, 0.50000000000000000, 
843           1.5707963267948966 },
844 };
845
846 // Test function for k=-0.80000000000000004, nu=0.50000000000000000.
847 template <typename Tp>
848 void test016()
849 {
850   const Tp eps = std::numeric_limits<Tp>::epsilon();
851   Tp max_abs_diff = -Tp(1);
852   Tp max_abs_frac = -Tp(1);
853   unsigned int num_datum = sizeof(data016)
854                          / sizeof(testcase_ellint_3<double>);
855   for (unsigned int i = 0; i < num_datum; ++i)
856     {
857       const Tp f = std::tr1::ellint_3(Tp(data016[i].k), Tp(data016[i].nu),
858                    Tp(data016[i].phi));
859       const Tp f0 = data016[i].f0;
860       const Tp diff = f - f0;
861       if (std::abs(diff) > max_abs_diff)
862         max_abs_diff = std::abs(diff);
863       if (std::abs(f0) > Tp(10) * eps
864        && std::abs(f) > Tp(10) * eps)
865         {
866           const Tp frac = diff / f0;
867           if (std::abs(frac) > max_abs_frac)
868             max_abs_frac = std::abs(frac);
869         }
870     }
871   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
872 }
873
874 // Test data for k=-0.80000000000000004, nu=0.59999999999999998.
875 testcase_ellint_3<double> data017[] = {
876   { -0.0000000000000000, -0.80000000000000004, 0.59999999999999998, 
877           0.0000000000000000 },
878   { 0.17404991781414092, -0.80000000000000004, 0.59999999999999998, 
879           0.17453292519943295 },
880   { 0.34549800443625167, -0.80000000000000004, 0.59999999999999998, 
881           0.34906585039886590 },
882   { 0.51302536167001556, -0.80000000000000004, 0.59999999999999998, 
883           0.52359877559829882 },
884   { 0.67717065003912258, -0.80000000000000004, 0.59999999999999998, 
885           0.69813170079773179 },
886   { 0.84011512421134416, -0.80000000000000004, 0.59999999999999998, 
887           0.87266462599716477 },
888   { 1.0049863847088742, -0.80000000000000004, 0.59999999999999998, 
889           1.0471975511965976 },
890   { 1.1748145941898918, -0.80000000000000004, 0.59999999999999998, 
891           1.2217304763960306 },
892   { 1.3510319699755071, -0.80000000000000004, 0.59999999999999998, 
893           1.3962634015954636 },
894   { 1.5319262547427865, -0.80000000000000004, 0.59999999999999998, 
895           1.5707963267948966 },
896 };
897
898 // Test function for k=-0.80000000000000004, nu=0.59999999999999998.
899 template <typename Tp>
900 void test017()
901 {
902   const Tp eps = std::numeric_limits<Tp>::epsilon();
903   Tp max_abs_diff = -Tp(1);
904   Tp max_abs_frac = -Tp(1);
905   unsigned int num_datum = sizeof(data017)
906                          / sizeof(testcase_ellint_3<double>);
907   for (unsigned int i = 0; i < num_datum; ++i)
908     {
909       const Tp f = std::tr1::ellint_3(Tp(data017[i].k), Tp(data017[i].nu),
910                    Tp(data017[i].phi));
911       const Tp f0 = data017[i].f0;
912       const Tp diff = f - f0;
913       if (std::abs(diff) > max_abs_diff)
914         max_abs_diff = std::abs(diff);
915       if (std::abs(f0) > Tp(10) * eps
916        && std::abs(f) > Tp(10) * eps)
917         {
918           const Tp frac = diff / f0;
919           if (std::abs(frac) > max_abs_frac)
920             max_abs_frac = std::abs(frac);
921         }
922     }
923   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
924 }
925
926 // Test data for k=-0.80000000000000004, nu=0.69999999999999996.
927 testcase_ellint_3<double> data018[] = {
928   { -0.0000000000000000, -0.80000000000000004, 0.69999999999999996, 
929           0.0000000000000000 },
930   { 0.17387683562442202, -0.80000000000000004, 0.69999999999999996, 
931           0.17453292519943295 },
932   { 0.34420254775101611, -0.80000000000000004, 0.69999999999999996, 
933           0.34906585039886590 },
934   { 0.50906439222143685, -0.80000000000000004, 0.69999999999999996, 
935           0.52359877559829882 },
936   { 0.66882693152688433, -0.80000000000000004, 0.69999999999999996, 
937           0.69813170079773179 },
938   { 0.82574792844091316, -0.80000000000000004, 0.69999999999999996, 
939           0.87266462599716477 },
940   { 0.98310431309490953, -0.80000000000000004, 0.69999999999999996, 
941           1.0471975511965976 },
942   { 1.1440884535113258, -0.80000000000000004, 0.69999999999999996, 
943           1.2217304763960306 },
944   { 1.3103743938952537, -0.80000000000000004, 0.69999999999999996, 
945           1.3962634015954636 },
946   { 1.4806912324625332, -0.80000000000000004, 0.69999999999999996, 
947           1.5707963267948966 },
948 };
949
950 // Test function for k=-0.80000000000000004, nu=0.69999999999999996.
951 template <typename Tp>
952 void test018()
953 {
954   const Tp eps = std::numeric_limits<Tp>::epsilon();
955   Tp max_abs_diff = -Tp(1);
956   Tp max_abs_frac = -Tp(1);
957   unsigned int num_datum = sizeof(data018)
958                          / sizeof(testcase_ellint_3<double>);
959   for (unsigned int i = 0; i < num_datum; ++i)
960     {
961       const Tp f = std::tr1::ellint_3(Tp(data018[i].k), Tp(data018[i].nu),
962                    Tp(data018[i].phi));
963       const Tp f0 = data018[i].f0;
964       const Tp diff = f - f0;
965       if (std::abs(diff) > max_abs_diff)
966         max_abs_diff = std::abs(diff);
967       if (std::abs(f0) > Tp(10) * eps
968        && std::abs(f) > Tp(10) * eps)
969         {
970           const Tp frac = diff / f0;
971           if (std::abs(frac) > max_abs_frac)
972             max_abs_frac = std::abs(frac);
973         }
974     }
975   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
976 }
977
978 // Test data for k=-0.80000000000000004, nu=0.80000000000000004.
979 testcase_ellint_3<double> data019[] = {
980   { -0.0000000000000000, -0.80000000000000004, 0.80000000000000004, 
981           0.0000000000000000 },
982   { 0.17370436817515206, -0.80000000000000004, 0.80000000000000004, 
983           0.17453292519943295 },
984   { 0.34292405894783395, -0.80000000000000004, 0.80000000000000004, 
985           0.34906585039886590 },
986   { 0.50520682176250087, -0.80000000000000004, 0.80000000000000004, 
987           0.52359877559829882 },
988   { 0.66081751679736189, -0.80000000000000004, 0.80000000000000004, 
989           0.69813170079773179 },
990   { 0.81214672249355102, -0.80000000000000004, 0.80000000000000004, 
991           0.87266462599716477 },
992   { 0.96264481387685574, -0.80000000000000004, 0.80000000000000004, 
993           1.0471975511965976 },
994   { 1.1156611352656258, -0.80000000000000004, 0.80000000000000004, 
995           1.2217304763960306 },
996   { 1.2730756225143889, -0.80000000000000004, 0.80000000000000004, 
997           1.3962634015954636 },
998   { 1.4339837018309474, -0.80000000000000004, 0.80000000000000004, 
999           1.5707963267948966 },
1000 };
1001
1002 // Test function for k=-0.80000000000000004, nu=0.80000000000000004.
1003 template <typename Tp>
1004 void test019()
1005 {
1006   const Tp eps = std::numeric_limits<Tp>::epsilon();
1007   Tp max_abs_diff = -Tp(1);
1008   Tp max_abs_frac = -Tp(1);
1009   unsigned int num_datum = sizeof(data019)
1010                          / sizeof(testcase_ellint_3<double>);
1011   for (unsigned int i = 0; i < num_datum; ++i)
1012     {
1013       const Tp f = std::tr1::ellint_3(Tp(data019[i].k), Tp(data019[i].nu),
1014                    Tp(data019[i].phi));
1015       const Tp f0 = data019[i].f0;
1016       const Tp diff = f - f0;
1017       if (std::abs(diff) > max_abs_diff)
1018         max_abs_diff = std::abs(diff);
1019       if (std::abs(f0) > Tp(10) * eps
1020        && std::abs(f) > Tp(10) * eps)
1021         {
1022           const Tp frac = diff / f0;
1023           if (std::abs(frac) > max_abs_frac)
1024             max_abs_frac = std::abs(frac);
1025         }
1026     }
1027   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1028 }
1029
1030 // Test data for k=-0.80000000000000004, nu=0.90000000000000002.
1031 testcase_ellint_3<double> data020[] = {
1032   { -0.0000000000000000, -0.80000000000000004, 0.90000000000000002, 
1033           0.0000000000000000 },
1034   { 0.17353251158533153, -0.80000000000000004, 0.90000000000000002, 
1035           0.17453292519943295 },
1036   { 0.34166214791545768, -0.80000000000000004, 0.90000000000000002, 
1037           0.34906585039886590 },
1038   { 0.50144799535130580, -0.80000000000000004, 0.90000000000000002, 
1039           0.52359877559829882 },
1040   { 0.65311976193814447, -0.80000000000000004, 0.90000000000000002, 
1041           0.69813170079773179 },
1042   { 0.79924384892320866, -0.80000000000000004, 0.90000000000000002, 
1043           0.87266462599716477 },
1044   { 0.94345762353365625, -0.80000000000000004, 0.90000000000000002, 
1045           1.0471975511965976 },
1046   { 1.0892582069219159, -0.80000000000000004, 0.90000000000000002, 
1047           1.2217304763960306 },
1048   { 1.2387000876610268, -0.80000000000000004, 0.90000000000000002, 
1049           1.3962634015954636 },
1050   { 1.3911845406776222, -0.80000000000000004, 0.90000000000000002, 
1051           1.5707963267948966 },
1052 };
1053
1054 // Test function for k=-0.80000000000000004, nu=0.90000000000000002.
1055 template <typename Tp>
1056 void test020()
1057 {
1058   const Tp eps = std::numeric_limits<Tp>::epsilon();
1059   Tp max_abs_diff = -Tp(1);
1060   Tp max_abs_frac = -Tp(1);
1061   unsigned int num_datum = sizeof(data020)
1062                          / sizeof(testcase_ellint_3<double>);
1063   for (unsigned int i = 0; i < num_datum; ++i)
1064     {
1065       const Tp f = std::tr1::ellint_3(Tp(data020[i].k), Tp(data020[i].nu),
1066                    Tp(data020[i].phi));
1067       const Tp f0 = data020[i].f0;
1068       const Tp diff = f - f0;
1069       if (std::abs(diff) > max_abs_diff)
1070         max_abs_diff = std::abs(diff);
1071       if (std::abs(f0) > Tp(10) * eps
1072        && std::abs(f) > Tp(10) * eps)
1073         {
1074           const Tp frac = diff / f0;
1075           if (std::abs(frac) > max_abs_frac)
1076             max_abs_frac = std::abs(frac);
1077         }
1078     }
1079   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1080 }
1081
1082 // Test data for k=-0.69999999999999996, nu=0.0000000000000000.
1083 testcase_ellint_3<double> data021[] = {
1084   { -0.0000000000000000, -0.69999999999999996, 0.0000000000000000, 
1085           0.0000000000000000 },
1086   { 0.17496737466916720, -0.69999999999999996, 0.0000000000000000, 
1087           0.17453292519943295 },
1088   { 0.35254687535677925, -0.69999999999999996, 0.0000000000000000, 
1089           0.34906585039886590 },
1090   { 0.53536740275997130, -0.69999999999999996, 0.0000000000000000, 
1091           0.52359877559829882 },
1092   { 0.72603797651684465, -0.69999999999999996, 0.0000000000000000, 
1093           0.69813170079773179 },
1094   { 0.92698296348313458, -0.69999999999999996, 0.0000000000000000, 
1095           0.87266462599716477 },
1096   { 1.1400447527693316, -0.69999999999999996, 0.0000000000000000, 
1097           1.0471975511965976 },
1098   { 1.3657668117194071, -0.69999999999999996, 0.0000000000000000, 
1099           1.2217304763960306 },
1100   { 1.6024686895959159, -0.69999999999999996, 0.0000000000000000, 
1101           1.3962634015954636 },
1102   { 1.8456939983747236, -0.69999999999999996, 0.0000000000000000, 
1103           1.5707963267948966 },
1104 };
1105
1106 // Test function for k=-0.69999999999999996, nu=0.0000000000000000.
1107 template <typename Tp>
1108 void test021()
1109 {
1110   const Tp eps = std::numeric_limits<Tp>::epsilon();
1111   Tp max_abs_diff = -Tp(1);
1112   Tp max_abs_frac = -Tp(1);
1113   unsigned int num_datum = sizeof(data021)
1114                          / sizeof(testcase_ellint_3<double>);
1115   for (unsigned int i = 0; i < num_datum; ++i)
1116     {
1117       const Tp f = std::tr1::ellint_3(Tp(data021[i].k), Tp(data021[i].nu),
1118                    Tp(data021[i].phi));
1119       const Tp f0 = data021[i].f0;
1120       const Tp diff = f - f0;
1121       if (std::abs(diff) > max_abs_diff)
1122         max_abs_diff = std::abs(diff);
1123       if (std::abs(f0) > Tp(10) * eps
1124        && std::abs(f) > Tp(10) * eps)
1125         {
1126           const Tp frac = diff / f0;
1127           if (std::abs(frac) > max_abs_frac)
1128             max_abs_frac = std::abs(frac);
1129         }
1130     }
1131   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1132 }
1133
1134 // Test data for k=-0.69999999999999996, nu=0.10000000000000001.
1135 testcase_ellint_3<double> data022[] = {
1136   { -0.0000000000000000, -0.69999999999999996, 0.10000000000000001, 
1137           0.0000000000000000 },
1138   { 0.17479076384884681, -0.69999999999999996, 0.10000000000000001, 
1139           0.17453292519943295 },
1140   { 0.35114844900396364, -0.69999999999999996, 0.10000000000000001, 
1141           0.34906585039886590 },
1142   { 0.53072776947527012, -0.69999999999999996, 0.10000000000000001, 
1143           0.52359877559829882 },
1144   { 0.71530198262386246, -0.69999999999999996, 0.10000000000000001, 
1145           0.69813170079773179 },
1146   { 0.90666760677828306, -0.69999999999999996, 0.10000000000000001, 
1147           0.87266462599716477 },
1148   { 1.1063366517438080, -0.69999999999999996, 0.10000000000000001, 
1149           1.0471975511965976 },
1150   { 1.3149477243092147, -0.69999999999999996, 0.10000000000000001, 
1151           1.2217304763960306 },
1152   { 1.5314886725038925, -0.69999999999999996, 0.10000000000000001, 
1153           1.3962634015954636 },
1154   { 1.7528050171757608, -0.69999999999999996, 0.10000000000000001, 
1155           1.5707963267948966 },
1156 };
1157
1158 // Test function for k=-0.69999999999999996, nu=0.10000000000000001.
1159 template <typename Tp>
1160 void test022()
1161 {
1162   const Tp eps = std::numeric_limits<Tp>::epsilon();
1163   Tp max_abs_diff = -Tp(1);
1164   Tp max_abs_frac = -Tp(1);
1165   unsigned int num_datum = sizeof(data022)
1166                          / sizeof(testcase_ellint_3<double>);
1167   for (unsigned int i = 0; i < num_datum; ++i)
1168     {
1169       const Tp f = std::tr1::ellint_3(Tp(data022[i].k), Tp(data022[i].nu),
1170                    Tp(data022[i].phi));
1171       const Tp f0 = data022[i].f0;
1172       const Tp diff = f - f0;
1173       if (std::abs(diff) > max_abs_diff)
1174         max_abs_diff = std::abs(diff);
1175       if (std::abs(f0) > Tp(10) * eps
1176        && std::abs(f) > Tp(10) * eps)
1177         {
1178           const Tp frac = diff / f0;
1179           if (std::abs(frac) > max_abs_frac)
1180             max_abs_frac = std::abs(frac);
1181         }
1182     }
1183   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1184 }
1185
1186 // Test data for k=-0.69999999999999996, nu=0.20000000000000001.
1187 testcase_ellint_3<double> data023[] = {
1188   { -0.0000000000000000, -0.69999999999999996, 0.20000000000000001, 
1189           0.0000000000000000 },
1190   { 0.17461479077791472, -0.69999999999999996, 0.20000000000000001, 
1191           0.17453292519943295 },
1192   { 0.34976950621407538, -0.69999999999999996, 0.20000000000000001, 
1193           0.34906585039886590 },
1194   { 0.52622533231350188, -0.69999999999999996, 0.20000000000000001, 
1195           0.52359877559829882 },
1196   { 0.70508774017895226, -0.69999999999999996, 0.20000000000000001, 
1197           0.69813170079773179 },
1198   { 0.88775302531730294, -0.69999999999999996, 0.20000000000000001, 
1199           0.87266462599716477 },
1200   { 1.0756195476149006, -0.69999999999999996, 0.20000000000000001, 
1201           1.0471975511965976 },
1202   { 1.2695349716654372, -0.69999999999999996, 0.20000000000000001, 
1203           1.2217304763960306 },
1204   { 1.4690814617070540, -0.69999999999999996, 0.20000000000000001, 
1205           1.3962634015954636 },
1206   { 1.6721098780092147, -0.69999999999999996, 0.20000000000000001, 
1207           1.5707963267948966 },
1208 };
1209
1210 // Test function for k=-0.69999999999999996, nu=0.20000000000000001.
1211 template <typename Tp>
1212 void test023()
1213 {
1214   const Tp eps = std::numeric_limits<Tp>::epsilon();
1215   Tp max_abs_diff = -Tp(1);
1216   Tp max_abs_frac = -Tp(1);
1217   unsigned int num_datum = sizeof(data023)
1218                          / sizeof(testcase_ellint_3<double>);
1219   for (unsigned int i = 0; i < num_datum; ++i)
1220     {
1221       const Tp f = std::tr1::ellint_3(Tp(data023[i].k), Tp(data023[i].nu),
1222                    Tp(data023[i].phi));
1223       const Tp f0 = data023[i].f0;
1224       const Tp diff = f - f0;
1225       if (std::abs(diff) > max_abs_diff)
1226         max_abs_diff = std::abs(diff);
1227       if (std::abs(f0) > Tp(10) * eps
1228        && std::abs(f) > Tp(10) * eps)
1229         {
1230           const Tp frac = diff / f0;
1231           if (std::abs(frac) > max_abs_frac)
1232             max_abs_frac = std::abs(frac);
1233         }
1234     }
1235   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1236 }
1237
1238 // Test data for k=-0.69999999999999996, nu=0.29999999999999999.
1239 testcase_ellint_3<double> data024[] = {
1240   { -0.0000000000000000, -0.69999999999999996, 0.29999999999999999, 
1241           0.0000000000000000 },
1242   { 0.17443945136076172, -0.69999999999999996, 0.29999999999999999, 
1243           0.17453292519943295 },
1244   { 0.34840956983535287, -0.69999999999999996, 0.29999999999999999, 
1245           0.34906585039886590 },
1246   { 0.52185308551329179, -0.69999999999999996, 0.29999999999999999, 
1247           0.52359877559829882 },
1248   { 0.69535240431168266, -0.69999999999999996, 0.29999999999999999, 
1249           0.69813170079773179 },
1250   { 0.87007983473964923, -0.69999999999999996, 0.29999999999999999, 
1251           0.87266462599716477 },
1252   { 1.0474657975577066, -0.69999999999999996, 0.29999999999999999, 
1253           1.0471975511965976 },
1254   { 1.2286225419931889, -0.69999999999999996, 0.29999999999999999, 
1255           1.2217304763960306 },
1256   { 1.4136490671013271, -0.69999999999999996, 0.29999999999999999, 
1257           1.3962634015954636 },
1258   { 1.6011813647733213, -0.69999999999999996, 0.29999999999999999, 
1259           1.5707963267948966 },
1260 };
1261
1262 // Test function for k=-0.69999999999999996, nu=0.29999999999999999.
1263 template <typename Tp>
1264 void test024()
1265 {
1266   const Tp eps = std::numeric_limits<Tp>::epsilon();
1267   Tp max_abs_diff = -Tp(1);
1268   Tp max_abs_frac = -Tp(1);
1269   unsigned int num_datum = sizeof(data024)
1270                          / sizeof(testcase_ellint_3<double>);
1271   for (unsigned int i = 0; i < num_datum; ++i)
1272     {
1273       const Tp f = std::tr1::ellint_3(Tp(data024[i].k), Tp(data024[i].nu),
1274                    Tp(data024[i].phi));
1275       const Tp f0 = data024[i].f0;
1276       const Tp diff = f - f0;
1277       if (std::abs(diff) > max_abs_diff)
1278         max_abs_diff = std::abs(diff);
1279       if (std::abs(f0) > Tp(10) * eps
1280        && std::abs(f) > Tp(10) * eps)
1281         {
1282           const Tp frac = diff / f0;
1283           if (std::abs(frac) > max_abs_frac)
1284             max_abs_frac = std::abs(frac);
1285         }
1286     }
1287   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1288 }
1289
1290 // Test data for k=-0.69999999999999996, nu=0.40000000000000002.
1291 testcase_ellint_3<double> data025[] = {
1292   { -0.0000000000000000, -0.69999999999999996, 0.40000000000000002, 
1293           0.0000000000000000 },
1294   { 0.17426474153983226, -0.69999999999999996, 0.40000000000000002, 
1295           0.17453292519943295 },
1296   { 0.34706817945773732, -0.69999999999999996, 0.40000000000000002, 
1297           0.34906585039886590 },
1298   { 0.51760452851738159, -0.69999999999999996, 0.40000000000000002, 
1299           0.52359877559829882 },
1300   { 0.68605801534722766, -0.69999999999999996, 0.40000000000000002, 
1301           0.69813170079773179 },
1302   { 0.85351339387296532, -0.69999999999999996, 0.40000000000000002, 
1303           0.87266462599716477 },
1304   { 1.0215297967969537, -0.69999999999999996, 0.40000000000000002, 
1305           1.0471975511965976 },
1306   { 1.1915051074460528, -0.69999999999999996, 0.40000000000000002, 
1307           1.2217304763960306 },
1308   { 1.3639821911744707, -0.69999999999999996, 0.40000000000000002, 
1309           1.3962634015954636 },
1310   { 1.5382162002954762, -0.69999999999999996, 0.40000000000000002, 
1311           1.5707963267948966 },
1312 };
1313
1314 // Test function for k=-0.69999999999999996, nu=0.40000000000000002.
1315 template <typename Tp>
1316 void test025()
1317 {
1318   const Tp eps = std::numeric_limits<Tp>::epsilon();
1319   Tp max_abs_diff = -Tp(1);
1320   Tp max_abs_frac = -Tp(1);
1321   unsigned int num_datum = sizeof(data025)
1322                          / sizeof(testcase_ellint_3<double>);
1323   for (unsigned int i = 0; i < num_datum; ++i)
1324     {
1325       const Tp f = std::tr1::ellint_3(Tp(data025[i].k), Tp(data025[i].nu),
1326                    Tp(data025[i].phi));
1327       const Tp f0 = data025[i].f0;
1328       const Tp diff = f - f0;
1329       if (std::abs(diff) > max_abs_diff)
1330         max_abs_diff = std::abs(diff);
1331       if (std::abs(f0) > Tp(10) * eps
1332        && std::abs(f) > Tp(10) * eps)
1333         {
1334           const Tp frac = diff / f0;
1335           if (std::abs(frac) > max_abs_frac)
1336             max_abs_frac = std::abs(frac);
1337         }
1338     }
1339   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1340 }
1341
1342 // Test data for k=-0.69999999999999996, nu=0.50000000000000000.
1343 testcase_ellint_3<double> data026[] = {
1344   { -0.0000000000000000, -0.69999999999999996, 0.50000000000000000, 
1345           0.0000000000000000 },
1346   { 0.17409065729516093, -0.69999999999999996, 0.50000000000000000, 
1347           0.17453292519943295 },
1348   { 0.34574489064986091, -0.69999999999999996, 0.50000000000000000, 
1349           0.34906585039886590 },
1350   { 0.51347361925579793, -0.69999999999999996, 0.50000000000000000, 
1351           0.52359877559829882 },
1352   { 0.67717079489579290, -0.69999999999999996, 0.50000000000000000, 
1353           0.69813170079773179 },
1354   { 0.83793902055292280, -0.69999999999999996, 0.50000000000000000, 
1355           0.87266462599716477 },
1356   { 0.99752863545289705, -0.69999999999999996, 0.50000000000000000, 
1357           1.0471975511965976 },
1358   { 1.1576240080401499, -0.69999999999999996, 0.50000000000000000, 
1359           1.2217304763960306 },
1360   { 1.3191464023923762, -0.69999999999999996, 0.50000000000000000, 
1361           1.3962634015954636 },
1362   { 1.4818433192178544, -0.69999999999999996, 0.50000000000000000, 
1363           1.5707963267948966 },
1364 };
1365
1366 // Test function for k=-0.69999999999999996, nu=0.50000000000000000.
1367 template <typename Tp>
1368 void test026()
1369 {
1370   const Tp eps = std::numeric_limits<Tp>::epsilon();
1371   Tp max_abs_diff = -Tp(1);
1372   Tp max_abs_frac = -Tp(1);
1373   unsigned int num_datum = sizeof(data026)
1374                          / sizeof(testcase_ellint_3<double>);
1375   for (unsigned int i = 0; i < num_datum; ++i)
1376     {
1377       const Tp f = std::tr1::ellint_3(Tp(data026[i].k), Tp(data026[i].nu),
1378                    Tp(data026[i].phi));
1379       const Tp f0 = data026[i].f0;
1380       const Tp diff = f - f0;
1381       if (std::abs(diff) > max_abs_diff)
1382         max_abs_diff = std::abs(diff);
1383       if (std::abs(f0) > Tp(10) * eps
1384        && std::abs(f) > Tp(10) * eps)
1385         {
1386           const Tp frac = diff / f0;
1387           if (std::abs(frac) > max_abs_frac)
1388             max_abs_frac = std::abs(frac);
1389         }
1390     }
1391   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1392 }
1393
1394 // Test data for k=-0.69999999999999996, nu=0.59999999999999998.
1395 testcase_ellint_3<double> data027[] = {
1396   { -0.0000000000000000, -0.69999999999999996, 0.59999999999999998, 
1397           0.0000000000000000 },
1398   { 0.17391719464391611, -0.69999999999999996, 0.59999999999999998, 
1399           0.17453292519943295 },
1400   { 0.34443927423869031, -0.69999999999999996, 0.59999999999999998, 
1401           0.34906585039886590 },
1402   { 0.50945473266486074, -0.69999999999999996, 0.59999999999999998, 
1403           0.52359877559829882 },
1404   { 0.66866056326513823, -0.69999999999999996, 0.59999999999999998, 
1405           0.69813170079773179 },
1406   { 0.82325830002337352, -0.69999999999999996, 0.59999999999999998, 
1407           0.87266462599716477 },
1408   { 0.97522808245669357, -0.69999999999999996, 0.59999999999999998, 
1409           1.0471975511965976 },
1410   { 1.1265300613705282, -0.69999999999999996, 0.59999999999999998, 
1411           1.2217304763960306 },
1412   { 1.2784066076152003, -0.69999999999999996, 0.59999999999999998, 
1413           1.3962634015954636 },
1414   { 1.4309994736080540, -0.69999999999999996, 0.59999999999999998, 
1415           1.5707963267948966 },
1416 };
1417
1418 // Test function for k=-0.69999999999999996, nu=0.59999999999999998.
1419 template <typename Tp>
1420 void test027()
1421 {
1422   const Tp eps = std::numeric_limits<Tp>::epsilon();
1423   Tp max_abs_diff = -Tp(1);
1424   Tp max_abs_frac = -Tp(1);
1425   unsigned int num_datum = sizeof(data027)
1426                          / sizeof(testcase_ellint_3<double>);
1427   for (unsigned int i = 0; i < num_datum; ++i)
1428     {
1429       const Tp f = std::tr1::ellint_3(Tp(data027[i].k), Tp(data027[i].nu),
1430                    Tp(data027[i].phi));
1431       const Tp f0 = data027[i].f0;
1432       const Tp diff = f - f0;
1433       if (std::abs(diff) > max_abs_diff)
1434         max_abs_diff = std::abs(diff);
1435       if (std::abs(f0) > Tp(10) * eps
1436        && std::abs(f) > Tp(10) * eps)
1437         {
1438           const Tp frac = diff / f0;
1439           if (std::abs(frac) > max_abs_frac)
1440             max_abs_frac = std::abs(frac);
1441         }
1442     }
1443   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1444 }
1445
1446 // Test data for k=-0.69999999999999996, nu=0.69999999999999996.
1447 testcase_ellint_3<double> data028[] = {
1448   { -0.0000000000000000, -0.69999999999999996, 0.69999999999999996, 
1449           0.0000000000000000 },
1450   { 0.17374434963995028, -0.69999999999999996, 0.69999999999999996, 
1451           0.17453292519943295 },
1452   { 0.34315091562900674, -0.69999999999999996, 0.69999999999999996, 
1453           0.34906585039886590 },
1454   { 0.50554262375653358, -0.69999999999999996, 0.69999999999999996, 
1455           0.52359877559829882 },
1456   { 0.66050025406305812, -0.69999999999999996, 0.69999999999999996, 
1457           0.69813170079773179 },
1458   { 0.80938620118847404, -0.69999999999999996, 0.69999999999999996, 
1459           0.87266462599716477 },
1460   { 0.95443223855852144, -0.69999999999999996, 0.69999999999999996, 
1461           1.0471975511965976 },
1462   { 1.0978573207128302, -0.69999999999999996, 0.69999999999999996, 
1463           1.2217304763960306 },
1464   { 1.2411754575007123, -0.69999999999999996, 0.69999999999999996, 
1465           1.3962634015954636 },
1466   { 1.3848459188329196, -0.69999999999999996, 0.69999999999999996, 
1467           1.5707963267948966 },
1468 };
1469
1470 // Test function for k=-0.69999999999999996, nu=0.69999999999999996.
1471 template <typename Tp>
1472 void test028()
1473 {
1474   const Tp eps = std::numeric_limits<Tp>::epsilon();
1475   Tp max_abs_diff = -Tp(1);
1476   Tp max_abs_frac = -Tp(1);
1477   unsigned int num_datum = sizeof(data028)
1478                          / sizeof(testcase_ellint_3<double>);
1479   for (unsigned int i = 0; i < num_datum; ++i)
1480     {
1481       const Tp f = std::tr1::ellint_3(Tp(data028[i].k), Tp(data028[i].nu),
1482                    Tp(data028[i].phi));
1483       const Tp f0 = data028[i].f0;
1484       const Tp diff = f - f0;
1485       if (std::abs(diff) > max_abs_diff)
1486         max_abs_diff = std::abs(diff);
1487       if (std::abs(f0) > Tp(10) * eps
1488        && std::abs(f) > Tp(10) * eps)
1489         {
1490           const Tp frac = diff / f0;
1491           if (std::abs(frac) > max_abs_frac)
1492             max_abs_frac = std::abs(frac);
1493         }
1494     }
1495   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1496 }
1497
1498 // Test data for k=-0.69999999999999996, nu=0.80000000000000004.
1499 testcase_ellint_3<double> data029[] = {
1500   { -0.0000000000000000, -0.69999999999999996, 0.80000000000000004, 
1501           0.0000000000000000 },
1502   { 0.17357211837335737, -0.69999999999999996, 0.80000000000000004, 
1503           0.17453292519943295 },
1504   { 0.34187941416012108, -0.69999999999999996, 0.80000000000000004, 
1505           0.34906585039886590 },
1506   { 0.50173239465478270, -0.69999999999999996, 0.80000000000000004, 
1507           0.52359877559829882 },
1508   { 0.65266550725988315, -0.69999999999999996, 0.80000000000000004, 
1509           0.69813170079773179 },
1510   { 0.79624879865249298, -0.69999999999999996, 0.80000000000000004, 
1511           0.87266462599716477 },
1512   { 0.93497577043296920, -0.69999999999999996, 0.80000000000000004, 
1513           1.0471975511965976 },
1514   { 1.0713041566930748, -0.69999999999999996, 0.80000000000000004, 
1515           1.2217304763960306 },
1516   { 1.2069772023255652, -0.69999999999999996, 0.80000000000000004, 
1517           1.3962634015954636 },
1518   { 1.3427110650397533, -0.69999999999999996, 0.80000000000000004, 
1519           1.5707963267948966 },
1520 };
1521
1522 // Test function for k=-0.69999999999999996, nu=0.80000000000000004.
1523 template <typename Tp>
1524 void test029()
1525 {
1526   const Tp eps = std::numeric_limits<Tp>::epsilon();
1527   Tp max_abs_diff = -Tp(1);
1528   Tp max_abs_frac = -Tp(1);
1529   unsigned int num_datum = sizeof(data029)
1530                          / sizeof(testcase_ellint_3<double>);
1531   for (unsigned int i = 0; i < num_datum; ++i)
1532     {
1533       const Tp f = std::tr1::ellint_3(Tp(data029[i].k), Tp(data029[i].nu),
1534                    Tp(data029[i].phi));
1535       const Tp f0 = data029[i].f0;
1536       const Tp diff = f - f0;
1537       if (std::abs(diff) > max_abs_diff)
1538         max_abs_diff = std::abs(diff);
1539       if (std::abs(f0) > Tp(10) * eps
1540        && std::abs(f) > Tp(10) * eps)
1541         {
1542           const Tp frac = diff / f0;
1543           if (std::abs(frac) > max_abs_frac)
1544             max_abs_frac = std::abs(frac);
1545         }
1546     }
1547   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1548 }
1549
1550 // Test data for k=-0.69999999999999996, nu=0.90000000000000002.
1551 testcase_ellint_3<double> data030[] = {
1552   { -0.0000000000000000, -0.69999999999999996, 0.90000000000000002, 
1553           0.0000000000000000 },
1554   { 0.17340049697003634, -0.69999999999999996, 0.90000000000000002, 
1555           0.17453292519943295 },
1556   { 0.34062438249741556, -0.69999999999999996, 0.90000000000000002, 
1557           0.34906585039886590 },
1558   { 0.49801946510076878, -0.69999999999999996, 0.90000000000000002, 
1559           0.52359877559829882 },
1560   { 0.64513432604750487, -0.69999999999999996, 0.90000000000000002, 
1561           0.69813170079773179 },
1562   { 0.78378145487573758, -0.69999999999999996, 0.90000000000000002, 
1563           0.87266462599716477 },
1564   { 0.91671799500854634, -0.69999999999999996, 0.90000000000000002, 
1565           1.0471975511965976 },
1566   { 1.0466193579463123, -0.69999999999999996, 0.90000000000000002, 
1567           1.2217304763960306 },
1568   { 1.1754218079199146, -0.69999999999999996, 0.90000000000000002, 
1569           1.3962634015954636 },
1570   { 1.3040500499695911, -0.69999999999999996, 0.90000000000000002, 
1571           1.5707963267948966 },
1572 };
1573
1574 // Test function for k=-0.69999999999999996, nu=0.90000000000000002.
1575 template <typename Tp>
1576 void test030()
1577 {
1578   const Tp eps = std::numeric_limits<Tp>::epsilon();
1579   Tp max_abs_diff = -Tp(1);
1580   Tp max_abs_frac = -Tp(1);
1581   unsigned int num_datum = sizeof(data030)
1582                          / sizeof(testcase_ellint_3<double>);
1583   for (unsigned int i = 0; i < num_datum; ++i)
1584     {
1585       const Tp f = std::tr1::ellint_3(Tp(data030[i].k), Tp(data030[i].nu),
1586                    Tp(data030[i].phi));
1587       const Tp f0 = data030[i].f0;
1588       const Tp diff = f - f0;
1589       if (std::abs(diff) > max_abs_diff)
1590         max_abs_diff = std::abs(diff);
1591       if (std::abs(f0) > Tp(10) * eps
1592        && std::abs(f) > Tp(10) * eps)
1593         {
1594           const Tp frac = diff / f0;
1595           if (std::abs(frac) > max_abs_frac)
1596             max_abs_frac = std::abs(frac);
1597         }
1598     }
1599   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1600 }
1601
1602 // Test data for k=-0.59999999999999998, nu=0.0000000000000000.
1603 testcase_ellint_3<double> data031[] = {
1604   { -0.0000000000000000, -0.59999999999999998, 0.0000000000000000, 
1605           0.0000000000000000 },
1606   { 0.17485154362988362, -0.59999999999999998, 0.0000000000000000, 
1607           0.17453292519943295 },
1608   { 0.35160509865544326, -0.59999999999999998, 0.0000000000000000, 
1609           0.34906585039886590 },
1610   { 0.53210652578446160, -0.59999999999999998, 0.0000000000000000, 
1611           0.52359877559829882 },
1612   { 0.71805304664485670, -0.59999999999999998, 0.0000000000000000, 
1613           0.69813170079773179 },
1614   { 0.91082759030195970, -0.59999999999999998, 0.0000000000000000, 
1615           0.87266462599716477 },
1616   { 1.1112333229323361, -0.59999999999999998, 0.0000000000000000, 
1617           1.0471975511965976 },
1618   { 1.3191461190365270, -0.59999999999999998, 0.0000000000000000, 
1619           1.2217304763960306 },
1620   { 1.5332022105084773, -0.59999999999999998, 0.0000000000000000, 
1621           1.3962634015954636 },
1622   { 1.7507538029157526, -0.59999999999999998, 0.0000000000000000, 
1623           1.5707963267948966 },
1624 };
1625
1626 // Test function for k=-0.59999999999999998, nu=0.0000000000000000.
1627 template <typename Tp>
1628 void test031()
1629 {
1630   const Tp eps = std::numeric_limits<Tp>::epsilon();
1631   Tp max_abs_diff = -Tp(1);
1632   Tp max_abs_frac = -Tp(1);
1633   unsigned int num_datum = sizeof(data031)
1634                          / sizeof(testcase_ellint_3<double>);
1635   for (unsigned int i = 0; i < num_datum; ++i)
1636     {
1637       const Tp f = std::tr1::ellint_3(Tp(data031[i].k), Tp(data031[i].nu),
1638                    Tp(data031[i].phi));
1639       const Tp f0 = data031[i].f0;
1640       const Tp diff = f - f0;
1641       if (std::abs(diff) > max_abs_diff)
1642         max_abs_diff = std::abs(diff);
1643       if (std::abs(f0) > Tp(10) * eps
1644        && std::abs(f) > Tp(10) * eps)
1645         {
1646           const Tp frac = diff / f0;
1647           if (std::abs(frac) > max_abs_frac)
1648             max_abs_frac = std::abs(frac);
1649         }
1650     }
1651   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1652 }
1653
1654 // Test data for k=-0.59999999999999998, nu=0.10000000000000001.
1655 testcase_ellint_3<double> data032[] = {
1656   { -0.0000000000000000, -0.59999999999999998, 0.10000000000000001, 
1657           0.0000000000000000 },
1658   { 0.17467514275022014, -0.59999999999999998, 0.10000000000000001, 
1659           0.17453292519943295 },
1660   { 0.35021333086258255, -0.59999999999999998, 0.10000000000000001, 
1661           0.34906585039886590 },
1662   { 0.52751664092962713, -0.59999999999999998, 0.10000000000000001, 
1663           0.52359877559829882 },
1664   { 0.70752126971957885, -0.59999999999999998, 0.10000000000000001, 
1665           0.69813170079773179 },
1666   { 0.89111058756112871, -0.59999999999999998, 0.10000000000000001, 
1667           0.87266462599716477 },
1668   { 1.0789241202877768, -0.59999999999999998, 0.10000000000000001, 
1669           1.0471975511965976 },
1670   { 1.2710800210399946, -0.59999999999999998, 0.10000000000000001, 
1671           1.2217304763960306 },
1672   { 1.4669060574440276, -0.59999999999999998, 0.10000000000000001, 
1673           1.3962634015954636 },
1674   { 1.6648615773343014, -0.59999999999999998, 0.10000000000000001, 
1675           1.5707963267948966 },
1676 };
1677
1678 // Test function for k=-0.59999999999999998, nu=0.10000000000000001.
1679 template <typename Tp>
1680 void test032()
1681 {
1682   const Tp eps = std::numeric_limits<Tp>::epsilon();
1683   Tp max_abs_diff = -Tp(1);
1684   Tp max_abs_frac = -Tp(1);
1685   unsigned int num_datum = sizeof(data032)
1686                          / sizeof(testcase_ellint_3<double>);
1687   for (unsigned int i = 0; i < num_datum; ++i)
1688     {
1689       const Tp f = std::tr1::ellint_3(Tp(data032[i].k), Tp(data032[i].nu),
1690                    Tp(data032[i].phi));
1691       const Tp f0 = data032[i].f0;
1692       const Tp diff = f - f0;
1693       if (std::abs(diff) > max_abs_diff)
1694         max_abs_diff = std::abs(diff);
1695       if (std::abs(f0) > Tp(10) * eps
1696        && std::abs(f) > Tp(10) * eps)
1697         {
1698           const Tp frac = diff / f0;
1699           if (std::abs(frac) > max_abs_frac)
1700             max_abs_frac = std::abs(frac);
1701         }
1702     }
1703   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1704 }
1705
1706 // Test data for k=-0.59999999999999998, nu=0.20000000000000001.
1707 testcase_ellint_3<double> data033[] = {
1708   { -0.0000000000000000, -0.59999999999999998, 0.20000000000000001, 
1709           0.0000000000000000 },
1710   { 0.17449937871800653, -0.59999999999999998, 0.20000000000000001, 
1711           0.17453292519943295 },
1712   { 0.34884093647346553, -0.59999999999999998, 0.20000000000000001, 
1713           0.34906585039886590 },
1714   { 0.52306221119844110, -0.59999999999999998, 0.20000000000000001, 
1715           0.52359877559829882 },
1716   { 0.69749955678982223, -0.59999999999999998, 0.20000000000000001, 
1717           0.69813170079773179 },
1718   { 0.87274610682416853, -0.59999999999999998, 0.20000000000000001, 
1719           0.87266462599716477 },
1720   { 1.0494620540750792, -0.59999999999999998, 0.20000000000000001, 
1721           1.0471975511965976 },
1722   { 1.2280847305507339, -0.59999999999999998, 0.20000000000000001, 
1723           1.2217304763960306 },
1724   { 1.4085436279696886, -0.59999999999999998, 0.20000000000000001, 
1725           1.3962634015954636 },
1726   { 1.5901418016279374, -0.59999999999999998, 0.20000000000000001, 
1727           1.5707963267948966 },
1728 };
1729
1730 // Test function for k=-0.59999999999999998, nu=0.20000000000000001.
1731 template <typename Tp>
1732 void test033()
1733 {
1734   const Tp eps = std::numeric_limits<Tp>::epsilon();
1735   Tp max_abs_diff = -Tp(1);
1736   Tp max_abs_frac = -Tp(1);
1737   unsigned int num_datum = sizeof(data033)
1738                          / sizeof(testcase_ellint_3<double>);
1739   for (unsigned int i = 0; i < num_datum; ++i)
1740     {
1741       const Tp f = std::tr1::ellint_3(Tp(data033[i].k), Tp(data033[i].nu),
1742                    Tp(data033[i].phi));
1743       const Tp f0 = data033[i].f0;
1744       const Tp diff = f - f0;
1745       if (std::abs(diff) > max_abs_diff)
1746         max_abs_diff = std::abs(diff);
1747       if (std::abs(f0) > Tp(10) * eps
1748        && std::abs(f) > Tp(10) * eps)
1749         {
1750           const Tp frac = diff / f0;
1751           if (std::abs(frac) > max_abs_frac)
1752             max_abs_frac = std::abs(frac);
1753         }
1754     }
1755   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1756 }
1757
1758 // Test data for k=-0.59999999999999998, nu=0.29999999999999999.
1759 testcase_ellint_3<double> data034[] = {
1760   { -0.0000000000000000, -0.59999999999999998, 0.29999999999999999, 
1761           0.0000000000000000 },
1762   { 0.17432424744393935, -0.59999999999999998, 0.29999999999999999, 
1763           0.17453292519943295 },
1764   { 0.34748744127146447, -0.59999999999999998, 0.29999999999999999, 
1765           0.34906585039886590 },
1766   { 0.51873632743924847, -0.59999999999999998, 0.29999999999999999, 
1767           0.52359877559829882 },
1768   { 0.68794610396313127, -0.59999999999999998, 0.29999999999999999, 
1769           0.69813170079773179 },
1770   { 0.85558070175468726, -0.59999999999999998, 0.29999999999999999, 
1771           0.87266462599716477 },
1772   { 1.0224416343605653, -0.59999999999999998, 0.29999999999999999, 
1773           1.0471975511965976 },
1774   { 1.1893144457936788, -0.59999999999999998, 0.29999999999999999, 
1775           1.2217304763960306 },
1776   { 1.3566435377982575, -0.59999999999999998, 0.29999999999999999, 
1777           1.3962634015954636 },
1778   { 1.5243814243493585, -0.59999999999999998, 0.29999999999999999, 
1779           1.5707963267948966 },
1780 };
1781
1782 // Test function for k=-0.59999999999999998, nu=0.29999999999999999.
1783 template <typename Tp>
1784 void test034()
1785 {
1786   const Tp eps = std::numeric_limits<Tp>::epsilon();
1787   Tp max_abs_diff = -Tp(1);
1788   Tp max_abs_frac = -Tp(1);
1789   unsigned int num_datum = sizeof(data034)
1790                          / sizeof(testcase_ellint_3<double>);
1791   for (unsigned int i = 0; i < num_datum; ++i)
1792     {
1793       const Tp f = std::tr1::ellint_3(Tp(data034[i].k), Tp(data034[i].nu),
1794                    Tp(data034[i].phi));
1795       const Tp f0 = data034[i].f0;
1796       const Tp diff = f - f0;
1797       if (std::abs(diff) > max_abs_diff)
1798         max_abs_diff = std::abs(diff);
1799       if (std::abs(f0) > Tp(10) * eps
1800        && std::abs(f) > Tp(10) * eps)
1801         {
1802           const Tp frac = diff / f0;
1803           if (std::abs(frac) > max_abs_frac)
1804             max_abs_frac = std::abs(frac);
1805         }
1806     }
1807   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1808 }
1809
1810 // Test data for k=-0.59999999999999998, nu=0.40000000000000002.
1811 testcase_ellint_3<double> data035[] = {
1812   { -0.0000000000000000, -0.59999999999999998, 0.40000000000000002, 
1813           0.0000000000000000 },
1814   { 0.17414974487670720, -0.59999999999999998, 0.40000000000000002, 
1815           0.17453292519943295 },
1816   { 0.34615238767335027, -0.59999999999999998, 0.40000000000000002, 
1817           0.34906585039886590 },
1818   { 0.51453257838108579, -0.59999999999999998, 0.40000000000000002, 
1819           0.52359877559829882 },
1820   { 0.67882386787534410, -0.59999999999999998, 0.40000000000000002, 
1821           0.69813170079773179 },
1822   { 0.83948470233173578, -0.59999999999999998, 0.40000000000000002, 
1823           0.87266462599716477 },
1824   { 0.99753496200073977, -0.59999999999999998, 0.40000000000000002, 
1825           1.0471975511965976 },
1826   { 1.1541101404388487, -0.59999999999999998, 0.40000000000000002, 
1827           1.2217304763960306 },
1828   { 1.3100911323398814, -0.59999999999999998, 0.40000000000000002, 
1829           1.3962634015954636 },
1830   { 1.4659345278069984, -0.59999999999999998, 0.40000000000000002, 
1831           1.5707963267948966 },
1832 };
1833
1834 // Test function for k=-0.59999999999999998, nu=0.40000000000000002.
1835 template <typename Tp>
1836 void test035()
1837 {
1838   const Tp eps = std::numeric_limits<Tp>::epsilon();
1839   Tp max_abs_diff = -Tp(1);
1840   Tp max_abs_frac = -Tp(1);
1841   unsigned int num_datum = sizeof(data035)
1842                          / sizeof(testcase_ellint_3<double>);
1843   for (unsigned int i = 0; i < num_datum; ++i)
1844     {
1845       const Tp f = std::tr1::ellint_3(Tp(data035[i].k), Tp(data035[i].nu),
1846                    Tp(data035[i].phi));
1847       const Tp f0 = data035[i].f0;
1848       const Tp diff = f - f0;
1849       if (std::abs(diff) > max_abs_diff)
1850         max_abs_diff = std::abs(diff);
1851       if (std::abs(f0) > Tp(10) * eps
1852        && std::abs(f) > Tp(10) * eps)
1853         {
1854           const Tp frac = diff / f0;
1855           if (std::abs(frac) > max_abs_frac)
1856             max_abs_frac = std::abs(frac);
1857         }
1858     }
1859   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1860 }
1861
1862 // Test data for k=-0.59999999999999998, nu=0.50000000000000000.
1863 testcase_ellint_3<double> data036[] = {
1864   { -0.0000000000000000, -0.59999999999999998, 0.50000000000000000, 
1865           0.0000000000000000 },
1866   { 0.17397586700252810, -0.59999999999999998, 0.50000000000000000, 
1867           0.17453292519943295 },
1868   { 0.34483533397138516, -0.59999999999999998, 0.50000000000000000, 
1869           0.34906585039886590 },
1870   { 0.51044500461706499, -0.59999999999999998, 0.50000000000000000, 
1871           0.52359877559829882 },
1872   { 0.67009988034712675, -0.59999999999999998, 0.50000000000000000, 
1873           0.69813170079773179 },
1874   { 0.82434762375735193, -0.59999999999999998, 0.50000000000000000, 
1875           0.87266462599716477 },
1876   { 0.97447346702798998, -0.59999999999999998, 0.50000000000000000, 
1877           1.0471975511965976 },
1878   { 1.1219494000522143, -0.59999999999999998, 0.50000000000000000, 
1879           1.2217304763960306 },
1880   { 1.2680242605954486, -0.59999999999999998, 0.50000000000000000, 
1881           1.3962634015954636 },
1882   { 1.4135484285693078, -0.59999999999999998, 0.50000000000000000, 
1883           1.5707963267948966 },
1884 };
1885
1886 // Test function for k=-0.59999999999999998, nu=0.50000000000000000.
1887 template <typename Tp>
1888 void test036()
1889 {
1890   const Tp eps = std::numeric_limits<Tp>::epsilon();
1891   Tp max_abs_diff = -Tp(1);
1892   Tp max_abs_frac = -Tp(1);
1893   unsigned int num_datum = sizeof(data036)
1894                          / sizeof(testcase_ellint_3<double>);
1895   for (unsigned int i = 0; i < num_datum; ++i)
1896     {
1897       const Tp f = std::tr1::ellint_3(Tp(data036[i].k), Tp(data036[i].nu),
1898                    Tp(data036[i].phi));
1899       const Tp f0 = data036[i].f0;
1900       const Tp diff = f - f0;
1901       if (std::abs(diff) > max_abs_diff)
1902         max_abs_diff = std::abs(diff);
1903       if (std::abs(f0) > Tp(10) * eps
1904        && std::abs(f) > Tp(10) * eps)
1905         {
1906           const Tp frac = diff / f0;
1907           if (std::abs(frac) > max_abs_frac)
1908             max_abs_frac = std::abs(frac);
1909         }
1910     }
1911   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1912 }
1913
1914 // Test data for k=-0.59999999999999998, nu=0.59999999999999998.
1915 testcase_ellint_3<double> data037[] = {
1916   { -0.0000000000000000, -0.59999999999999998, 0.59999999999999998, 
1917           0.0000000000000000 },
1918   { 0.17380260984469356, -0.59999999999999998, 0.59999999999999998, 
1919           0.17453292519943295 },
1920   { 0.34353585361777839, -0.59999999999999998, 0.59999999999999998, 
1921           0.34906585039886590 },
1922   { 0.50646805774321402, -0.59999999999999998, 0.59999999999999998, 
1923           0.52359877559829882 },
1924   { 0.66174468108625517, -0.59999999999999998, 0.59999999999999998, 
1925           0.69813170079773179 },
1926   { 0.81007462280278408, -0.59999999999999998, 0.59999999999999998, 
1927           0.87266462599716477 },
1928   { 0.95303466945718729, -0.59999999999999998, 0.59999999999999998, 
1929           1.0471975511965976 },
1930   { 1.0924118588677503, -0.59999999999999998, 0.59999999999999998, 
1931           1.2217304763960306 },
1932   { 1.2297640574847937, -0.59999999999999998, 0.59999999999999998, 
1933           1.3962634015954636 },
1934   { 1.3662507535812816, -0.59999999999999998, 0.59999999999999998, 
1935           1.5707963267948966 },
1936 };
1937
1938 // Test function for k=-0.59999999999999998, nu=0.59999999999999998.
1939 template <typename Tp>
1940 void test037()
1941 {
1942   const Tp eps = std::numeric_limits<Tp>::epsilon();
1943   Tp max_abs_diff = -Tp(1);
1944   Tp max_abs_frac = -Tp(1);
1945   unsigned int num_datum = sizeof(data037)
1946                          / sizeof(testcase_ellint_3<double>);
1947   for (unsigned int i = 0; i < num_datum; ++i)
1948     {
1949       const Tp f = std::tr1::ellint_3(Tp(data037[i].k), Tp(data037[i].nu),
1950                    Tp(data037[i].phi));
1951       const Tp f0 = data037[i].f0;
1952       const Tp diff = f - f0;
1953       if (std::abs(diff) > max_abs_diff)
1954         max_abs_diff = std::abs(diff);
1955       if (std::abs(f0) > Tp(10) * eps
1956        && std::abs(f) > Tp(10) * eps)
1957         {
1958           const Tp frac = diff / f0;
1959           if (std::abs(frac) > max_abs_frac)
1960             max_abs_frac = std::abs(frac);
1961         }
1962     }
1963   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1964 }
1965
1966 // Test data for k=-0.59999999999999998, nu=0.69999999999999996.
1967 testcase_ellint_3<double> data038[] = {
1968   { -0.0000000000000000, -0.59999999999999998, 0.69999999999999996, 
1969           0.0000000000000000 },
1970   { 0.17362996946312009, -0.59999999999999998, 0.69999999999999996, 
1971           0.17453292519943295 },
1972   { 0.34225353454870588, -0.59999999999999998, 0.69999999999999996, 
1973           0.34906585039886590 },
1974   { 0.50259656397799546, -0.59999999999999998, 0.69999999999999996, 
1975           0.52359877559829882 },
1976   { 0.65373184496628944, -0.59999999999999998, 0.69999999999999996, 
1977           0.69813170079773179 },
1978   { 0.79658372884056439, -0.59999999999999998, 0.69999999999999996, 
1979           0.87266462599716477 },
1980   { 0.93303240100245421, -0.59999999999999998, 0.69999999999999996, 
1981           1.0471975511965976 },
1982   { 1.0651547944716557, -0.59999999999999998, 0.69999999999999996, 
1983           1.2217304763960306 },
1984   { 1.1947676204853441, -0.59999999999999998, 0.69999999999999996, 
1985           1.3962634015954636 },
1986   { 1.3232737468822811, -0.59999999999999998, 0.69999999999999996, 
1987           1.5707963267948966 },
1988 };
1989
1990 // Test function for k=-0.59999999999999998, nu=0.69999999999999996.
1991 template <typename Tp>
1992 void test038()
1993 {
1994   const Tp eps = std::numeric_limits<Tp>::epsilon();
1995   Tp max_abs_diff = -Tp(1);
1996   Tp max_abs_frac = -Tp(1);
1997   unsigned int num_datum = sizeof(data038)
1998                          / sizeof(testcase_ellint_3<double>);
1999   for (unsigned int i = 0; i < num_datum; ++i)
2000     {
2001       const Tp f = std::tr1::ellint_3(Tp(data038[i].k), Tp(data038[i].nu),
2002                    Tp(data038[i].phi));
2003       const Tp f0 = data038[i].f0;
2004       const Tp diff = f - f0;
2005       if (std::abs(diff) > max_abs_diff)
2006         max_abs_diff = std::abs(diff);
2007       if (std::abs(f0) > Tp(10) * eps
2008        && std::abs(f) > Tp(10) * eps)
2009         {
2010           const Tp frac = diff / f0;
2011           if (std::abs(frac) > max_abs_frac)
2012             max_abs_frac = std::abs(frac);
2013         }
2014     }
2015   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2016 }
2017
2018 // Test data for k=-0.59999999999999998, nu=0.80000000000000004.
2019 testcase_ellint_3<double> data039[] = {
2020   { -0.0000000000000000, -0.59999999999999998, 0.80000000000000004, 
2021           0.0000000000000000 },
2022   { 0.17345794195390687, -0.59999999999999998, 0.80000000000000004, 
2023           0.17453292519943295 },
2024   { 0.34098797854531027, -0.59999999999999998, 0.80000000000000004, 
2025           0.34906585039886590 },
2026   { 0.49882569168826230, -0.59999999999999998, 0.80000000000000004, 
2027           0.52359877559829882 },
2028   { 0.64603758566475511, -0.59999999999999998, 0.80000000000000004, 
2029           0.69813170079773179 },
2030   { 0.78380365594769730, -0.59999999999999998, 0.80000000000000004, 
2031           0.87266462599716477 },
2032   { 0.91430946255611190, -0.59999999999999998, 0.80000000000000004, 
2033           1.0471975511965976 },
2034   { 1.0398955217270607, -0.59999999999999998, 0.80000000000000004, 
2035           1.2217304763960306 },
2036   { 1.1625948314277676, -0.59999999999999998, 0.80000000000000004, 
2037           1.3962634015954636 },
2038   { 1.2840021261752192, -0.59999999999999998, 0.80000000000000004, 
2039           1.5707963267948966 },
2040 };
2041
2042 // Test function for k=-0.59999999999999998, nu=0.80000000000000004.
2043 template <typename Tp>
2044 void test039()
2045 {
2046   const Tp eps = std::numeric_limits<Tp>::epsilon();
2047   Tp max_abs_diff = -Tp(1);
2048   Tp max_abs_frac = -Tp(1);
2049   unsigned int num_datum = sizeof(data039)
2050                          / sizeof(testcase_ellint_3<double>);
2051   for (unsigned int i = 0; i < num_datum; ++i)
2052     {
2053       const Tp f = std::tr1::ellint_3(Tp(data039[i].k), Tp(data039[i].nu),
2054                    Tp(data039[i].phi));
2055       const Tp f0 = data039[i].f0;
2056       const Tp diff = f - f0;
2057       if (std::abs(diff) > max_abs_diff)
2058         max_abs_diff = std::abs(diff);
2059       if (std::abs(f0) > Tp(10) * eps
2060        && std::abs(f) > Tp(10) * eps)
2061         {
2062           const Tp frac = diff / f0;
2063           if (std::abs(frac) > max_abs_frac)
2064             max_abs_frac = std::abs(frac);
2065         }
2066     }
2067   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2068 }
2069
2070 // Test data for k=-0.59999999999999998, nu=0.90000000000000002.
2071 testcase_ellint_3<double> data040[] = {
2072   { -0.0000000000000000, -0.59999999999999998, 0.90000000000000002, 
2073           0.0000000000000000 },
2074   { 0.17328652344890033, -0.59999999999999998, 0.90000000000000002, 
2075           0.17453292519943295 },
2076   { 0.33973880062929018, -0.59999999999999998, 0.90000000000000002, 
2077           0.34906585039886590 },
2078   { 0.49515092233122765, -0.59999999999999998, 0.90000000000000002, 
2079           0.52359877559829882 },
2080   { 0.63864042139737043, -0.59999999999999998, 0.90000000000000002, 
2081           0.69813170079773179 },
2082   { 0.77167205646538850, -0.59999999999999998, 0.90000000000000002, 
2083           0.87266462599716477 },
2084   { 0.89673202848034383, -0.59999999999999998, 0.90000000000000002, 
2085           1.0471975511965976 },
2086   { 1.0163984492661304, -0.59999999999999998, 0.90000000000000002, 
2087           1.2217304763960306 },
2088   { 1.1328845785162431, -0.59999999999999998, 0.90000000000000002, 
2089           1.3962634015954636 },
2090   { 1.2479362973851875, -0.59999999999999998, 0.90000000000000002, 
2091           1.5707963267948966 },
2092 };
2093
2094 // Test function for k=-0.59999999999999998, nu=0.90000000000000002.
2095 template <typename Tp>
2096 void test040()
2097 {
2098   const Tp eps = std::numeric_limits<Tp>::epsilon();
2099   Tp max_abs_diff = -Tp(1);
2100   Tp max_abs_frac = -Tp(1);
2101   unsigned int num_datum = sizeof(data040)
2102                          / sizeof(testcase_ellint_3<double>);
2103   for (unsigned int i = 0; i < num_datum; ++i)
2104     {
2105       const Tp f = std::tr1::ellint_3(Tp(data040[i].k), Tp(data040[i].nu),
2106                    Tp(data040[i].phi));
2107       const Tp f0 = data040[i].f0;
2108       const Tp diff = f - f0;
2109       if (std::abs(diff) > max_abs_diff)
2110         max_abs_diff = std::abs(diff);
2111       if (std::abs(f0) > Tp(10) * eps
2112        && std::abs(f) > Tp(10) * eps)
2113         {
2114           const Tp frac = diff / f0;
2115           if (std::abs(frac) > max_abs_frac)
2116             max_abs_frac = std::abs(frac);
2117         }
2118     }
2119   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2120 }
2121
2122 // Test data for k=-0.50000000000000000, nu=0.0000000000000000.
2123 testcase_ellint_3<double> data041[] = {
2124   { -0.0000000000000000, -0.50000000000000000, 0.0000000000000000, 
2125           0.0000000000000000 },
2126   { 0.17475385514035785, -0.50000000000000000, 0.0000000000000000, 
2127           0.17453292519943295 },
2128   { 0.35081868470101585, -0.50000000000000000, 0.0000000000000000, 
2129           0.34906585039886590 },
2130   { 0.52942862705190585, -0.50000000000000000, 0.0000000000000000, 
2131           0.52359877559829882 },
2132   { 0.71164727562630326, -0.50000000000000000, 0.0000000000000000, 
2133           0.69813170079773179 },
2134   { 0.89824523594227768, -0.50000000000000000, 0.0000000000000000, 
2135           0.87266462599716477 },
2136   { 1.0895506700518851, -0.50000000000000000, 0.0000000000000000, 
2137           1.0471975511965976 },
2138   { 1.2853005857432933, -0.50000000000000000, 0.0000000000000000, 
2139           1.2217304763960306 },
2140   { 1.4845545520549484, -0.50000000000000000, 0.0000000000000000, 
2141           1.3962634015954636 },
2142   { 1.6857503548125963, -0.50000000000000000, 0.0000000000000000, 
2143           1.5707963267948966 },
2144 };
2145
2146 // Test function for k=-0.50000000000000000, nu=0.0000000000000000.
2147 template <typename Tp>
2148 void test041()
2149 {
2150   const Tp eps = std::numeric_limits<Tp>::epsilon();
2151   Tp max_abs_diff = -Tp(1);
2152   Tp max_abs_frac = -Tp(1);
2153   unsigned int num_datum = sizeof(data041)
2154                          / sizeof(testcase_ellint_3<double>);
2155   for (unsigned int i = 0; i < num_datum; ++i)
2156     {
2157       const Tp f = std::tr1::ellint_3(Tp(data041[i].k), Tp(data041[i].nu),
2158                    Tp(data041[i].phi));
2159       const Tp f0 = data041[i].f0;
2160       const Tp diff = f - f0;
2161       if (std::abs(diff) > max_abs_diff)
2162         max_abs_diff = std::abs(diff);
2163       if (std::abs(f0) > Tp(10) * eps
2164        && std::abs(f) > Tp(10) * eps)
2165         {
2166           const Tp frac = diff / f0;
2167           if (std::abs(frac) > max_abs_frac)
2168             max_abs_frac = std::abs(frac);
2169         }
2170     }
2171   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2172 }
2173
2174 // Test data for k=-0.50000000000000000, nu=0.10000000000000001.
2175 testcase_ellint_3<double> data042[] = {
2176   { -0.0000000000000000, -0.50000000000000000, 0.10000000000000001, 
2177           0.0000000000000000 },
2178   { 0.17457763120814676, -0.50000000000000000, 0.10000000000000001, 
2179           0.17453292519943295 },
2180   { 0.34943246340849154, -0.50000000000000000, 0.10000000000000001, 
2181           0.34906585039886590 },
2182   { 0.52487937869610801, -0.50000000000000000, 0.10000000000000001, 
2183           0.52359877559829882 },
2184   { 0.70127785096388395, -0.50000000000000000, 0.10000000000000001, 
2185           0.69813170079773179 },
2186   { 0.87898815988624479, -0.50000000000000000, 0.10000000000000001, 
2187           0.87266462599716477 },
2188   { 1.0582764576094172, -0.50000000000000000, 0.10000000000000001, 
2189           1.0471975511965976 },
2190   { 1.2391936844060207, -0.50000000000000000, 0.10000000000000001, 
2191           1.2217304763960306 },
2192   { 1.4214793542995841, -0.50000000000000000, 0.10000000000000001, 
2193           1.3962634015954636 },
2194   { 1.6045524936084892, -0.50000000000000000, 0.10000000000000001, 
2195           1.5707963267948966 },
2196 };
2197
2198 // Test function for k=-0.50000000000000000, nu=0.10000000000000001.
2199 template <typename Tp>
2200 void test042()
2201 {
2202   const Tp eps = std::numeric_limits<Tp>::epsilon();
2203   Tp max_abs_diff = -Tp(1);
2204   Tp max_abs_frac = -Tp(1);
2205   unsigned int num_datum = sizeof(data042)
2206                          / sizeof(testcase_ellint_3<double>);
2207   for (unsigned int i = 0; i < num_datum; ++i)
2208     {
2209       const Tp f = std::tr1::ellint_3(Tp(data042[i].k), Tp(data042[i].nu),
2210                    Tp(data042[i].phi));
2211       const Tp f0 = data042[i].f0;
2212       const Tp diff = f - f0;
2213       if (std::abs(diff) > max_abs_diff)
2214         max_abs_diff = std::abs(diff);
2215       if (std::abs(f0) > Tp(10) * eps
2216        && std::abs(f) > Tp(10) * eps)
2217         {
2218           const Tp frac = diff / f0;
2219           if (std::abs(frac) > max_abs_frac)
2220             max_abs_frac = std::abs(frac);
2221         }
2222     }
2223   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2224 }
2225
2226 // Test data for k=-0.50000000000000000, nu=0.20000000000000001.
2227 testcase_ellint_3<double> data043[] = {
2228   { -0.0000000000000000, -0.50000000000000000, 0.20000000000000001, 
2229           0.0000000000000000 },
2230   { 0.17440204336345433, -0.50000000000000000, 0.20000000000000001, 
2231           0.17453292519943295 },
2232   { 0.34806552388338824, -0.50000000000000000, 0.20000000000000001, 
2233           0.34906585039886590 },
2234   { 0.52046416757129821, -0.50000000000000000, 0.20000000000000001, 
2235           0.52359877559829882 },
2236   { 0.69140924550993876, -0.50000000000000000, 0.20000000000000001, 
2237           0.69813170079773179 },
2238   { 0.86104678636125520, -0.50000000000000000, 0.20000000000000001, 
2239           0.87266462599716477 },
2240   { 1.0297439459053981, -0.50000000000000000, 0.20000000000000001, 
2241           1.0471975511965976 },
2242   { 1.1979214112912036, -0.50000000000000000, 0.20000000000000001, 
2243           1.2217304763960306 },
2244   { 1.3659033858648930, -0.50000000000000000, 0.20000000000000001, 
2245           1.3962634015954636 },
2246   { 1.5338490483665983, -0.50000000000000000, 0.20000000000000001, 
2247           1.5707963267948966 },
2248 };
2249
2250 // Test function for k=-0.50000000000000000, nu=0.20000000000000001.
2251 template <typename Tp>
2252 void test043()
2253 {
2254   const Tp eps = std::numeric_limits<Tp>::epsilon();
2255   Tp max_abs_diff = -Tp(1);
2256   Tp max_abs_frac = -Tp(1);
2257   unsigned int num_datum = sizeof(data043)
2258                          / sizeof(testcase_ellint_3<double>);
2259   for (unsigned int i = 0; i < num_datum; ++i)
2260     {
2261       const Tp f = std::tr1::ellint_3(Tp(data043[i].k), Tp(data043[i].nu),
2262                    Tp(data043[i].phi));
2263       const Tp f0 = data043[i].f0;
2264       const Tp diff = f - f0;
2265       if (std::abs(diff) > max_abs_diff)
2266         max_abs_diff = std::abs(diff);
2267       if (std::abs(f0) > Tp(10) * eps
2268        && std::abs(f) > Tp(10) * eps)
2269         {
2270           const Tp frac = diff / f0;
2271           if (std::abs(frac) > max_abs_frac)
2272             max_abs_frac = std::abs(frac);
2273         }
2274     }
2275   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2276 }
2277
2278 // Test data for k=-0.50000000000000000, nu=0.29999999999999999.
2279 testcase_ellint_3<double> data044[] = {
2280   { -0.0000000000000000, -0.50000000000000000, 0.29999999999999999, 
2281           0.0000000000000000 },
2282   { 0.17422708752228896, -0.50000000000000000, 0.29999999999999999, 
2283           0.17453292519943295 },
2284   { 0.34671739434855858, -0.50000000000000000, 0.29999999999999999, 
2285           0.34906585039886590 },
2286   { 0.51617616305641889, -0.50000000000000000, 0.29999999999999999, 
2287           0.52359877559829882 },
2288   { 0.68200047612545178, -0.50000000000000000, 0.29999999999999999, 
2289           0.69813170079773179 },
2290   { 0.84427217869498372, -0.50000000000000000, 0.29999999999999999, 
2291           0.87266462599716477 },
2292   { 1.0035637821389782, -0.50000000000000000, 0.29999999999999999, 
2293           1.0471975511965976 },
2294   { 1.1606800483933113, -0.50000000000000000, 0.29999999999999999, 
2295           1.2217304763960306 },
2296   { 1.3164407134643459, -0.50000000000000000, 0.29999999999999999, 
2297           1.3962634015954636 },
2298   { 1.4715681939859637, -0.50000000000000000, 0.29999999999999999, 
2299           1.5707963267948966 },
2300 };
2301
2302 // Test function for k=-0.50000000000000000, nu=0.29999999999999999.
2303 template <typename Tp>
2304 void test044()
2305 {
2306   const Tp eps = std::numeric_limits<Tp>::epsilon();
2307   Tp max_abs_diff = -Tp(1);
2308   Tp max_abs_frac = -Tp(1);
2309   unsigned int num_datum = sizeof(data044)
2310                          / sizeof(testcase_ellint_3<double>);
2311   for (unsigned int i = 0; i < num_datum; ++i)
2312     {
2313       const Tp f = std::tr1::ellint_3(Tp(data044[i].k), Tp(data044[i].nu),
2314                    Tp(data044[i].phi));
2315       const Tp f0 = data044[i].f0;
2316       const Tp diff = f - f0;
2317       if (std::abs(diff) > max_abs_diff)
2318         max_abs_diff = std::abs(diff);
2319       if (std::abs(f0) > Tp(10) * eps
2320        && std::abs(f) > Tp(10) * eps)
2321         {
2322           const Tp frac = diff / f0;
2323           if (std::abs(frac) > max_abs_frac)
2324             max_abs_frac = std::abs(frac);
2325         }
2326     }
2327   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2328 }
2329
2330 // Test data for k=-0.50000000000000000, nu=0.40000000000000002.
2331 testcase_ellint_3<double> data045[] = {
2332   { -0.0000000000000000, -0.50000000000000000, 0.40000000000000002, 
2333           0.0000000000000000 },
2334   { 0.17405275963859917, -0.50000000000000000, 0.40000000000000002, 
2335           0.17453292519943295 },
2336   { 0.34538761957029329, -0.50000000000000000, 0.40000000000000002, 
2337           0.34906585039886590 },
2338   { 0.51200902646603919, -0.50000000000000000, 0.40000000000000002, 
2339           0.52359877559829882 },
2340   { 0.67301522212868792, -0.50000000000000000, 0.40000000000000002, 
2341           0.69813170079773179 },
2342   { 0.82853844466313320, -0.50000000000000000, 0.40000000000000002, 
2343           0.87266462599716477 },
2344   { 0.97942097862681488, -0.50000000000000000, 0.40000000000000002, 
2345           1.0471975511965976 },
2346   { 1.1268429801220616, -0.50000000000000000, 0.40000000000000002, 
2347           1.2217304763960306 },
2348   { 1.2720406704533922, -0.50000000000000000, 0.40000000000000002, 
2349           1.3962634015954636 },
2350   { 1.4161679518465340, -0.50000000000000000, 0.40000000000000002, 
2351           1.5707963267948966 },
2352 };
2353
2354 // Test function for k=-0.50000000000000000, nu=0.40000000000000002.
2355 template <typename Tp>
2356 void test045()
2357 {
2358   const Tp eps = std::numeric_limits<Tp>::epsilon();
2359   Tp max_abs_diff = -Tp(1);
2360   Tp max_abs_frac = -Tp(1);
2361   unsigned int num_datum = sizeof(data045)
2362                          / sizeof(testcase_ellint_3<double>);
2363   for (unsigned int i = 0; i < num_datum; ++i)
2364     {
2365       const Tp f = std::tr1::ellint_3(Tp(data045[i].k), Tp(data045[i].nu),
2366                    Tp(data045[i].phi));
2367       const Tp f0 = data045[i].f0;
2368       const Tp diff = f - f0;
2369       if (std::abs(diff) > max_abs_diff)
2370         max_abs_diff = std::abs(diff);
2371       if (std::abs(f0) > Tp(10) * eps
2372        && std::abs(f) > Tp(10) * eps)
2373         {
2374           const Tp frac = diff / f0;
2375           if (std::abs(frac) > max_abs_frac)
2376             max_abs_frac = std::abs(frac);
2377         }
2378     }
2379   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2380 }
2381
2382 // Test data for k=-0.50000000000000000, nu=0.50000000000000000.
2383 testcase_ellint_3<double> data046[] = {
2384   { -0.0000000000000000, -0.50000000000000000, 0.50000000000000000, 
2385           0.0000000000000000 },
2386   { 0.17387905570381157, -0.50000000000000000, 0.50000000000000000, 
2387           0.17453292519943295 },
2388   { 0.34407576010465207, -0.50000000000000000, 0.50000000000000000, 
2389           0.34906585039886590 },
2390   { 0.50795686560160835, -0.50000000000000000, 0.50000000000000000, 
2391           0.52359877559829882 },
2392   { 0.66442115453330175, -0.50000000000000000, 0.50000000000000000, 
2393           0.69813170079773179 },
2394   { 0.81373829119355345, -0.50000000000000000, 0.50000000000000000, 
2395           0.87266462599716477 },
2396   { 0.95705743313235825, -0.50000000000000000, 0.50000000000000000, 
2397           1.0471975511965976 },
2398   { 1.0959131991362556, -0.50000000000000000, 0.50000000000000000, 
2399           1.2217304763960306 },
2400   { 1.2318900529754597, -0.50000000000000000, 0.50000000000000000, 
2401           1.3962634015954636 },
2402   { 1.3664739530045971, -0.50000000000000000, 0.50000000000000000, 
2403           1.5707963267948966 },
2404 };
2405
2406 // Test function for k=-0.50000000000000000, nu=0.50000000000000000.
2407 template <typename Tp>
2408 void test046()
2409 {
2410   const Tp eps = std::numeric_limits<Tp>::epsilon();
2411   Tp max_abs_diff = -Tp(1);
2412   Tp max_abs_frac = -Tp(1);
2413   unsigned int num_datum = sizeof(data046)
2414                          / sizeof(testcase_ellint_3<double>);
2415   for (unsigned int i = 0; i < num_datum; ++i)
2416     {
2417       const Tp f = std::tr1::ellint_3(Tp(data046[i].k), Tp(data046[i].nu),
2418                    Tp(data046[i].phi));
2419       const Tp f0 = data046[i].f0;
2420       const Tp diff = f - f0;
2421       if (std::abs(diff) > max_abs_diff)
2422         max_abs_diff = std::abs(diff);
2423       if (std::abs(f0) > Tp(10) * eps
2424        && std::abs(f) > Tp(10) * eps)
2425         {
2426           const Tp frac = diff / f0;
2427           if (std::abs(frac) > max_abs_frac)
2428             max_abs_frac = std::abs(frac);
2429         }
2430     }
2431   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2432 }
2433
2434 // Test data for k=-0.50000000000000000, nu=0.59999999999999998.
2435 testcase_ellint_3<double> data047[] = {
2436   { -0.0000000000000000, -0.50000000000000000, 0.59999999999999998, 
2437           0.0000000000000000 },
2438   { 0.17370597174637581, -0.50000000000000000, 0.59999999999999998, 
2439           0.17453292519943295 },
2440   { 0.34278139158591414, -0.50000000000000000, 0.59999999999999998, 
2441           0.34906585039886590 },
2442   { 0.50401419439302719, -0.50000000000000000, 0.59999999999999998, 
2443           0.52359877559829882 },
2444   { 0.65618938076167221, -0.50000000000000000, 0.59999999999999998, 
2445           0.69813170079773179 },
2446   { 0.79977959248855424, -0.50000000000000000, 0.59999999999999998, 
2447           0.87266462599716477 },
2448   { 0.93625925190753545, -0.50000000000000000, 0.59999999999999998, 
2449           1.0471975511965976 },
2450   { 1.0674905658379710, -0.50000000000000000, 0.59999999999999998, 
2451           1.2217304763960306 },
2452   { 1.1953481298023048, -0.50000000000000000, 0.59999999999999998, 
2453           1.3962634015954636 },
2454   { 1.3215740290190876, -0.50000000000000000, 0.59999999999999998, 
2455           1.5707963267948966 },
2456 };
2457
2458 // Test function for k=-0.50000000000000000, nu=0.59999999999999998.
2459 template <typename Tp>
2460 void test047()
2461 {
2462   const Tp eps = std::numeric_limits<Tp>::epsilon();
2463   Tp max_abs_diff = -Tp(1);
2464   Tp max_abs_frac = -Tp(1);
2465   unsigned int num_datum = sizeof(data047)
2466                          / sizeof(testcase_ellint_3<double>);
2467   for (unsigned int i = 0; i < num_datum; ++i)
2468     {
2469       const Tp f = std::tr1::ellint_3(Tp(data047[i].k), Tp(data047[i].nu),
2470                    Tp(data047[i].phi));
2471       const Tp f0 = data047[i].f0;
2472       const Tp diff = f - f0;
2473       if (std::abs(diff) > max_abs_diff)
2474         max_abs_diff = std::abs(diff);
2475       if (std::abs(f0) > Tp(10) * eps
2476        && std::abs(f) > Tp(10) * eps)
2477         {
2478           const Tp frac = diff / f0;
2479           if (std::abs(frac) > max_abs_frac)
2480             max_abs_frac = std::abs(frac);
2481         }
2482     }
2483   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2484 }
2485
2486 // Test data for k=-0.50000000000000000, nu=0.69999999999999996.
2487 testcase_ellint_3<double> data048[] = {
2488   { -0.0000000000000000, -0.50000000000000000, 0.69999999999999996, 
2489           0.0000000000000000 },
2490   { 0.17353350383131641, -0.50000000000000000, 0.69999999999999996, 
2491           0.17453292519943295 },
2492   { 0.34150410405436771, -0.50000000000000000, 0.69999999999999996, 
2493           0.34906585039886590 },
2494   { 0.50017589696443487, -0.50000000000000000, 0.69999999999999996, 
2495           0.52359877559829882 },
2496   { 0.64829398188419962, -0.50000000000000000, 0.69999999999999996, 
2497           0.69813170079773179 },
2498   { 0.78658270782402073, -0.50000000000000000, 0.69999999999999996, 
2499           0.87266462599716477 },
2500   { 0.91684738336675053, -0.50000000000000000, 0.69999999999999996, 
2501           1.0471975511965976 },
2502   { 1.0412486789555937, -0.50000000000000000, 0.69999999999999996, 
2503           1.2217304763960306 },
2504   { 1.1619021847612001, -0.50000000000000000, 0.69999999999999996, 
2505           1.3962634015954636 },
2506   { 1.2807475181182502, -0.50000000000000000, 0.69999999999999996, 
2507           1.5707963267948966 },
2508 };
2509
2510 // Test function for k=-0.50000000000000000, nu=0.69999999999999996.
2511 template <typename Tp>
2512 void test048()
2513 {
2514   const Tp eps = std::numeric_limits<Tp>::epsilon();
2515   Tp max_abs_diff = -Tp(1);
2516   Tp max_abs_frac = -Tp(1);
2517   unsigned int num_datum = sizeof(data048)
2518                          / sizeof(testcase_ellint_3<double>);
2519   for (unsigned int i = 0; i < num_datum; ++i)
2520     {
2521       const Tp f = std::tr1::ellint_3(Tp(data048[i].k), Tp(data048[i].nu),
2522                    Tp(data048[i].phi));
2523       const Tp f0 = data048[i].f0;
2524       const Tp diff = f - f0;
2525       if (std::abs(diff) > max_abs_diff)
2526         max_abs_diff = std::abs(diff);
2527       if (std::abs(f0) > Tp(10) * eps
2528        && std::abs(f) > Tp(10) * eps)
2529         {
2530           const Tp frac = diff / f0;
2531           if (std::abs(frac) > max_abs_frac)
2532             max_abs_frac = std::abs(frac);
2533         }
2534     }
2535   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2536 }
2537
2538 // Test data for k=-0.50000000000000000, nu=0.80000000000000004.
2539 testcase_ellint_3<double> data049[] = {
2540   { -0.0000000000000000, -0.50000000000000000, 0.80000000000000004, 
2541           0.0000000000000000 },
2542   { 0.17336164805979126, -0.50000000000000000, 0.80000000000000004, 
2543           0.17453292519943295 },
2544   { 0.34024350132086773, -0.50000000000000000, 0.80000000000000004, 
2545           0.34906585039886590 },
2546   { 0.49643719555734084, -0.50000000000000000, 0.80000000000000004, 
2547           0.52359877559829882 },
2548   { 0.64071162456976150, -0.50000000000000000, 0.80000000000000004, 
2549           0.69813170079773179 },
2550   { 0.77407836177211908, -0.50000000000000000, 0.80000000000000004, 
2551           0.87266462599716477 },
2552   { 0.89867058251905652, -0.50000000000000000, 0.80000000000000004, 
2553           1.0471975511965976 },
2554   { 1.0169181822134912, -0.50000000000000000, 0.80000000000000004, 
2555           1.2217304763960306 },
2556   { 1.1311363312779448, -0.50000000000000000, 0.80000000000000004, 
2557           1.3962634015954636 },
2558   { 1.2434165408189539, -0.50000000000000000, 0.80000000000000004, 
2559           1.5707963267948966 },
2560 };
2561
2562 // Test function for k=-0.50000000000000000, nu=0.80000000000000004.
2563 template <typename Tp>
2564 void test049()
2565 {
2566   const Tp eps = std::numeric_limits<Tp>::epsilon();
2567   Tp max_abs_diff = -Tp(1);
2568   Tp max_abs_frac = -Tp(1);
2569   unsigned int num_datum = sizeof(data049)
2570                          / sizeof(testcase_ellint_3<double>);
2571   for (unsigned int i = 0; i < num_datum; ++i)
2572     {
2573       const Tp f = std::tr1::ellint_3(Tp(data049[i].k), Tp(data049[i].nu),
2574                    Tp(data049[i].phi));
2575       const Tp f0 = data049[i].f0;
2576       const Tp diff = f - f0;
2577       if (std::abs(diff) > max_abs_diff)
2578         max_abs_diff = std::abs(diff);
2579       if (std::abs(f0) > Tp(10) * eps
2580        && std::abs(f) > Tp(10) * eps)
2581         {
2582           const Tp frac = diff / f0;
2583           if (std::abs(frac) > max_abs_frac)
2584             max_abs_frac = std::abs(frac);
2585         }
2586     }
2587   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2588 }
2589
2590 // Test data for k=-0.50000000000000000, nu=0.90000000000000002.
2591 testcase_ellint_3<double> data050[] = {
2592   { -0.0000000000000000, -0.50000000000000000, 0.90000000000000002, 
2593           0.0000000000000000 },
2594   { 0.17319040056865681, -0.50000000000000000, 0.90000000000000002, 
2595           0.17453292519943295 },
2596   { 0.33899920036578557, -0.50000000000000000, 0.90000000000000002, 
2597           0.34906585039886590 },
2598   { 0.49279362182695186, -0.50000000000000000, 0.90000000000000002, 
2599           0.52359877559829882 },
2600   { 0.63342123379746151, -0.50000000000000000, 0.90000000000000002, 
2601           0.69813170079773179 },
2602   { 0.76220595179550321, -0.50000000000000000, 0.90000000000000002, 
2603           0.87266462599716477 },
2604   { 0.88160004743532294, -0.50000000000000000, 0.90000000000000002, 
2605           1.0471975511965976 },
2606   { 0.99427448642310134, -0.50000000000000000, 0.90000000000000002, 
2607           1.2217304763960306 },
2608   { 1.1027091512470093, -0.50000000000000000, 0.90000000000000002, 
2609           1.3962634015954636 },
2610   { 1.2091116095504744, -0.50000000000000000, 0.90000000000000002, 
2611           1.5707963267948966 },
2612 };
2613
2614 // Test function for k=-0.50000000000000000, nu=0.90000000000000002.
2615 template <typename Tp>
2616 void test050()
2617 {
2618   const Tp eps = std::numeric_limits<Tp>::epsilon();
2619   Tp max_abs_diff = -Tp(1);
2620   Tp max_abs_frac = -Tp(1);
2621   unsigned int num_datum = sizeof(data050)
2622                          / sizeof(testcase_ellint_3<double>);
2623   for (unsigned int i = 0; i < num_datum; ++i)
2624     {
2625       const Tp f = std::tr1::ellint_3(Tp(data050[i].k), Tp(data050[i].nu),
2626                    Tp(data050[i].phi));
2627       const Tp f0 = data050[i].f0;
2628       const Tp diff = f - f0;
2629       if (std::abs(diff) > max_abs_diff)
2630         max_abs_diff = std::abs(diff);
2631       if (std::abs(f0) > Tp(10) * eps
2632        && std::abs(f) > Tp(10) * eps)
2633         {
2634           const Tp frac = diff / f0;
2635           if (std::abs(frac) > max_abs_frac)
2636             max_abs_frac = std::abs(frac);
2637         }
2638     }
2639   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2640 }
2641
2642 // Test data for k=-0.40000000000000002, nu=0.0000000000000000.
2643 testcase_ellint_3<double> data051[] = {
2644   { -0.0000000000000000, -0.40000000000000002, 0.0000000000000000, 
2645           0.0000000000000000 },
2646   { 0.17467414669441531, -0.40000000000000002, 0.0000000000000000, 
2647           0.17453292519943295 },
2648   { 0.35018222772483443, -0.40000000000000002, 0.0000000000000000, 
2649           0.34906585039886590 },
2650   { 0.52729015917508748, -0.40000000000000002, 0.0000000000000000, 
2651           0.52359877559829882 },
2652   { 0.70662374407341255, -0.40000000000000002, 0.0000000000000000, 
2653           0.69813170079773179 },
2654   { 0.88859210497602170, -0.40000000000000002, 0.0000000000000000, 
2655           0.87266462599716477 },
2656   { 1.0733136290471379, -0.40000000000000002, 0.0000000000000000, 
2657           1.0471975511965976 },
2658   { 1.2605612170157061, -0.40000000000000002, 0.0000000000000000, 
2659           1.2217304763960306 },
2660   { 1.4497513956433437, -0.40000000000000002, 0.0000000000000000, 
2661           1.3962634015954636 },
2662   { 1.6399998658645112, -0.40000000000000002, 0.0000000000000000, 
2663           1.5707963267948966 },
2664 };
2665
2666 // Test function for k=-0.40000000000000002, nu=0.0000000000000000.
2667 template <typename Tp>
2668 void test051()
2669 {
2670   const Tp eps = std::numeric_limits<Tp>::epsilon();
2671   Tp max_abs_diff = -Tp(1);
2672   Tp max_abs_frac = -Tp(1);
2673   unsigned int num_datum = sizeof(data051)
2674                          / sizeof(testcase_ellint_3<double>);
2675   for (unsigned int i = 0; i < num_datum; ++i)
2676     {
2677       const Tp f = std::tr1::ellint_3(Tp(data051[i].k), Tp(data051[i].nu),
2678                    Tp(data051[i].phi));
2679       const Tp f0 = data051[i].f0;
2680       const Tp diff = f - f0;
2681       if (std::abs(diff) > max_abs_diff)
2682         max_abs_diff = std::abs(diff);
2683       if (std::abs(f0) > Tp(10) * eps
2684        && std::abs(f) > Tp(10) * eps)
2685         {
2686           const Tp frac = diff / f0;
2687           if (std::abs(frac) > max_abs_frac)
2688             max_abs_frac = std::abs(frac);
2689         }
2690     }
2691   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2692 }
2693
2694 // Test data for k=-0.40000000000000002, nu=0.10000000000000001.
2695 testcase_ellint_3<double> data052[] = {
2696   { -0.0000000000000000, -0.40000000000000002, 0.10000000000000001, 
2697           0.0000000000000000 },
2698   { 0.17449806706684673, -0.40000000000000002, 0.10000000000000001, 
2699           0.17453292519943295 },
2700   { 0.34880048623856075, -0.40000000000000002, 0.10000000000000001, 
2701           0.34906585039886590 },
2702   { 0.52277322065757403, -0.40000000000000002, 0.10000000000000001, 
2703           0.52359877559829882 },
2704   { 0.69638072056918376, -0.40000000000000002, 0.10000000000000001, 
2705           0.69813170079773179 },
2706   { 0.86968426619831540, -0.40000000000000002, 0.10000000000000001, 
2707           0.87266462599716477 },
2708   { 1.0428044206578095, -0.40000000000000002, 0.10000000000000001, 
2709           1.0471975511965976 },
2710   { 1.2158651158274378, -0.40000000000000002, 0.10000000000000001, 
2711           1.2217304763960306 },
2712   { 1.3889447129893322, -0.40000000000000002, 0.10000000000000001, 
2713           1.3962634015954636 },
2714   { 1.5620566886683604, -0.40000000000000002, 0.10000000000000001, 
2715           1.5707963267948966 },
2716 };
2717
2718 // Test function for k=-0.40000000000000002, nu=0.10000000000000001.
2719 template <typename Tp>
2720 void test052()
2721 {
2722   const Tp eps = std::numeric_limits<Tp>::epsilon();
2723   Tp max_abs_diff = -Tp(1);
2724   Tp max_abs_frac = -Tp(1);
2725   unsigned int num_datum = sizeof(data052)
2726                          / sizeof(testcase_ellint_3<double>);
2727   for (unsigned int i = 0; i < num_datum; ++i)
2728     {
2729       const Tp f = std::tr1::ellint_3(Tp(data052[i].k), Tp(data052[i].nu),
2730                    Tp(data052[i].phi));
2731       const Tp f0 = data052[i].f0;
2732       const Tp diff = f - f0;
2733       if (std::abs(diff) > max_abs_diff)
2734         max_abs_diff = std::abs(diff);
2735       if (std::abs(f0) > Tp(10) * eps
2736        && std::abs(f) > Tp(10) * eps)
2737         {
2738           const Tp frac = diff / f0;
2739           if (std::abs(frac) > max_abs_frac)
2740             max_abs_frac = std::abs(frac);
2741         }
2742     }
2743   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2744 }
2745
2746 // Test data for k=-0.40000000000000002, nu=0.20000000000000001.
2747 testcase_ellint_3<double> data053[] = {
2748   { -0.0000000000000000, -0.40000000000000002, 0.20000000000000001, 
2749           0.0000000000000000 },
2750   { 0.17432262290723399, -0.40000000000000002, 0.20000000000000001, 
2751           0.17453292519943295 },
2752   { 0.34743795258968596, -0.40000000000000002, 0.20000000000000001, 
2753           0.34906585039886590 },
2754   { 0.51838919472805123, -0.40000000000000002, 0.20000000000000001, 
2755           0.52359877559829882 },
2756   { 0.68663134739057918, -0.40000000000000002, 0.20000000000000001, 
2757           0.69813170079773179 },
2758   { 0.85206432981833979, -0.40000000000000002, 0.20000000000000001, 
2759           0.87266462599716477 },
2760   { 1.0149595349004430, -0.40000000000000002, 0.20000000000000001, 
2761           1.0471975511965976 },
2762   { 1.1758349405464676, -0.40000000000000002, 0.20000000000000001, 
2763           1.2217304763960306 },
2764   { 1.3353337673882635, -0.40000000000000002, 0.20000000000000001, 
2765           1.3962634015954636 },
2766   { 1.4941414344266770, -0.40000000000000002, 0.20000000000000001, 
2767           1.5707963267948966 },
2768 };
2769
2770 // Test function for k=-0.40000000000000002, nu=0.20000000000000001.
2771 template <typename Tp>
2772 void test053()
2773 {
2774   const Tp eps = std::numeric_limits<Tp>::epsilon();
2775   Tp max_abs_diff = -Tp(1);
2776   Tp max_abs_frac = -Tp(1);
2777   unsigned int num_datum = sizeof(data053)
2778                          / sizeof(testcase_ellint_3<double>);
2779   for (unsigned int i = 0; i < num_datum; ++i)
2780     {
2781       const Tp f = std::tr1::ellint_3(Tp(data053[i].k), Tp(data053[i].nu),
2782                    Tp(data053[i].phi));
2783       const Tp f0 = data053[i].f0;
2784       const Tp diff = f - f0;
2785       if (std::abs(diff) > max_abs_diff)
2786         max_abs_diff = std::abs(diff);
2787       if (std::abs(f0) > Tp(10) * eps
2788        && std::abs(f) > Tp(10) * eps)
2789         {
2790           const Tp frac = diff / f0;
2791           if (std::abs(frac) > max_abs_frac)
2792             max_abs_frac = std::abs(frac);
2793         }
2794     }
2795   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2796 }
2797
2798 // Test data for k=-0.40000000000000002, nu=0.29999999999999999.
2799 testcase_ellint_3<double> data054[] = {
2800   { -0.0000000000000000, -0.40000000000000002, 0.29999999999999999, 
2801           0.0000000000000000 },
2802   { 0.17414781013591543, -0.40000000000000002, 0.29999999999999999, 
2803           0.17453292519943295 },
2804   { 0.34609415696777285, -0.40000000000000002, 0.29999999999999999, 
2805           0.34906585039886590 },
2806   { 0.51413131295862546, -0.40000000000000002, 0.29999999999999999, 
2807           0.52359877559829882 },
2808   { 0.67733527622935630, -0.40000000000000002, 0.29999999999999999, 
2809           0.69813170079773179 },
2810   { 0.83558675182733266, -0.40000000000000002, 0.29999999999999999, 
2811           0.87266462599716477 },
2812   { 0.98940140808865906, -0.40000000000000002, 0.29999999999999999, 
2813           1.0471975511965976 },
2814   { 1.1396968797728058, -0.40000000000000002, 0.29999999999999999, 
2815           1.2217304763960306 },
2816   { 1.2875920037865087, -0.40000000000000002, 0.29999999999999999, 
2817           1.3962634015954636 },
2818   { 1.4342789859950078, -0.40000000000000002, 0.29999999999999999, 
2819           1.5707963267948966 },
2820 };
2821
2822 // Test function for k=-0.40000000000000002, nu=0.29999999999999999.
2823 template <typename Tp>
2824 void test054()
2825 {
2826   const Tp eps = std::numeric_limits<Tp>::epsilon();
2827   Tp max_abs_diff = -Tp(1);
2828   Tp max_abs_frac = -Tp(1);
2829   unsigned int num_datum = sizeof(data054)
2830                          / sizeof(testcase_ellint_3<double>);
2831   for (unsigned int i = 0; i < num_datum; ++i)
2832     {
2833       const Tp f = std::tr1::ellint_3(Tp(data054[i].k), Tp(data054[i].nu),
2834                    Tp(data054[i].phi));
2835       const Tp f0 = data054[i].f0;
2836       const Tp diff = f - f0;
2837       if (std::abs(diff) > max_abs_diff)
2838         max_abs_diff = std::abs(diff);
2839       if (std::abs(f0) > Tp(10) * eps
2840        && std::abs(f) > Tp(10) * eps)
2841         {
2842           const Tp frac = diff / f0;
2843           if (std::abs(frac) > max_abs_frac)
2844             max_abs_frac = std::abs(frac);
2845         }
2846     }
2847   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2848 }
2849
2850 // Test data for k=-0.40000000000000002, nu=0.40000000000000002.
2851 testcase_ellint_3<double> data055[] = {
2852   { -0.0000000000000000, -0.40000000000000002, 0.40000000000000002, 
2853           0.0000000000000000 },
2854   { 0.17397362471112710, -0.40000000000000002, 0.40000000000000002, 
2855           0.17453292519943295 },
2856   { 0.34476864603333196, -0.40000000000000002, 0.40000000000000002, 
2857           0.34906585039886590 },
2858   { 0.50999329415379357, -0.40000000000000002, 0.40000000000000002, 
2859           0.52359877559829882 },
2860   { 0.66845674551396017, -0.40000000000000002, 0.40000000000000002, 
2861           0.69813170079773179 },
2862   { 0.82012848346231748, -0.40000000000000002, 0.40000000000000002, 
2863           0.87266462599716477 },
2864   { 0.96582449258349057, -0.40000000000000002, 0.40000000000000002, 
2865           1.0471975511965976 },
2866   { 1.1068473749476286, -0.40000000000000002, 0.40000000000000002, 
2867           1.2217304763960306 },
2868   { 1.2447132729159986, -0.40000000000000002, 0.40000000000000002, 
2869           1.3962634015954636 },
2870   { 1.3809986210732901, -0.40000000000000002, 0.40000000000000002, 
2871           1.5707963267948966 },
2872 };
2873
2874 // Test function for k=-0.40000000000000002, nu=0.40000000000000002.
2875 template <typename Tp>
2876 void test055()
2877 {
2878   const Tp eps = std::numeric_limits<Tp>::epsilon();
2879   Tp max_abs_diff = -Tp(1);
2880   Tp max_abs_frac = -Tp(1);
2881   unsigned int num_datum = sizeof(data055)
2882                          / sizeof(testcase_ellint_3<double>);
2883   for (unsigned int i = 0; i < num_datum; ++i)
2884     {
2885       const Tp f = std::tr1::ellint_3(Tp(data055[i].k), Tp(data055[i].nu),
2886                    Tp(data055[i].phi));
2887       const Tp f0 = data055[i].f0;
2888       const Tp diff = f - f0;
2889       if (std::abs(diff) > max_abs_diff)
2890         max_abs_diff = std::abs(diff);
2891       if (std::abs(f0) > Tp(10) * eps
2892        && std::abs(f) > Tp(10) * eps)
2893         {
2894           const Tp frac = diff / f0;
2895           if (std::abs(frac) > max_abs_frac)
2896             max_abs_frac = std::abs(frac);
2897         }
2898     }
2899   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2900 }
2901
2902 // Test data for k=-0.40000000000000002, nu=0.50000000000000000.
2903 testcase_ellint_3<double> data056[] = {
2904   { -0.0000000000000000, -0.40000000000000002, 0.50000000000000000, 
2905           0.0000000000000000 },
2906   { 0.17380006262854139, -0.40000000000000002, 0.50000000000000000, 
2907           0.17453292519943295 },
2908   { 0.34346098216756610, -0.40000000000000002, 0.50000000000000000, 
2909           0.34906585039886590 },
2910   { 0.50596929935059420, -0.40000000000000002, 0.50000000000000000, 
2911           0.52359877559829882 },
2912   { 0.65996392089131262, -0.40000000000000002, 0.50000000000000000, 
2913           0.69813170079773179 },
2914   { 0.80558463511364786, -0.40000000000000002, 0.50000000000000000, 
2915           0.87266462599716477 },
2916   { 0.94397834522857704, -0.40000000000000002, 0.50000000000000000, 
2917           1.0471975511965976 },
2918   { 1.0768075114108115, -0.40000000000000002, 0.50000000000000000, 
2919           1.2217304763960306 },
2920   { 1.2059184624251329, -0.40000000000000002, 0.50000000000000000, 
2921           1.3962634015954636 },
2922   { 1.3331797176377398, -0.40000000000000002, 0.50000000000000000, 
2923           1.5707963267948966 },
2924 };
2925
2926 // Test function for k=-0.40000000000000002, nu=0.50000000000000000.
2927 template <typename Tp>
2928 void test056()
2929 {
2930   const Tp eps = std::numeric_limits<Tp>::epsilon();
2931   Tp max_abs_diff = -Tp(1);
2932   Tp max_abs_frac = -Tp(1);
2933   unsigned int num_datum = sizeof(data056)
2934                          / sizeof(testcase_ellint_3<double>);
2935   for (unsigned int i = 0; i < num_datum; ++i)
2936     {
2937       const Tp f = std::tr1::ellint_3(Tp(data056[i].k), Tp(data056[i].nu),
2938                    Tp(data056[i].phi));
2939       const Tp f0 = data056[i].f0;
2940       const Tp diff = f - f0;
2941       if (std::abs(diff) > max_abs_diff)
2942         max_abs_diff = std::abs(diff);
2943       if (std::abs(f0) > Tp(10) * eps
2944        && std::abs(f) > Tp(10) * eps)
2945         {
2946           const Tp frac = diff / f0;
2947           if (std::abs(frac) > max_abs_frac)
2948             max_abs_frac = std::abs(frac);
2949         }
2950     }
2951   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2952 }
2953
2954 // Test data for k=-0.40000000000000002, nu=0.59999999999999998.
2955 testcase_ellint_3<double> data057[] = {
2956   { -0.0000000000000000, -0.40000000000000002, 0.59999999999999998, 
2957           0.0000000000000000 },
2958   { 0.17362711992081248, -0.40000000000000002, 0.59999999999999998, 
2959           0.17453292519943295 },
2960   { 0.34217074276403953, -0.40000000000000002, 0.59999999999999998, 
2961           0.34906585039886590 },
2962   { 0.50205389185761617, -0.40000000000000002, 0.59999999999999998, 
2963           0.52359877559829882 },
2964   { 0.65182834920372745, -0.40000000000000002, 0.59999999999999998, 
2965           0.69813170079773179 },
2966   { 0.79186512820565136, -0.40000000000000002, 0.59999999999999998, 
2967           0.87266462599716477 },
2968   { 0.92365535916287134, -0.40000000000000002, 0.59999999999999998, 
2969           1.0471975511965976 },
2970   { 1.0491915663957907, -0.40000000000000002, 0.59999999999999998, 
2971           1.2217304763960306 },
2972   { 1.1705934291745104, -0.40000000000000002, 0.59999999999999998, 
2973           1.3962634015954636 },
2974   { 1.2899514672527024, -0.40000000000000002, 0.59999999999999998, 
2975           1.5707963267948966 },
2976 };
2977
2978 // Test function for k=-0.40000000000000002, nu=0.59999999999999998.
2979 template <typename Tp>
2980 void test057()
2981 {
2982   const Tp eps = std::numeric_limits<Tp>::epsilon();
2983   Tp max_abs_diff = -Tp(1);
2984   Tp max_abs_frac = -Tp(1);
2985   unsigned int num_datum = sizeof(data057)
2986                          / sizeof(testcase_ellint_3<double>);
2987   for (unsigned int i = 0; i < num_datum; ++i)
2988     {
2989       const Tp f = std::tr1::ellint_3(Tp(data057[i].k), Tp(data057[i].nu),
2990                    Tp(data057[i].phi));
2991       const Tp f0 = data057[i].f0;
2992       const Tp diff = f - f0;
2993       if (std::abs(diff) > max_abs_diff)
2994         max_abs_diff = std::abs(diff);
2995       if (std::abs(f0) > Tp(10) * eps
2996        && std::abs(f) > Tp(10) * eps)
2997         {
2998           const Tp frac = diff / f0;
2999           if (std::abs(frac) > max_abs_frac)
3000             max_abs_frac = std::abs(frac);
3001         }
3002     }
3003   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3004 }
3005
3006 // Test data for k=-0.40000000000000002, nu=0.69999999999999996.
3007 testcase_ellint_3<double> data058[] = {
3008   { -0.0000000000000000, -0.40000000000000002, 0.69999999999999996, 
3009           0.0000000000000000 },
3010   { 0.17345479265712871, -0.40000000000000002, 0.69999999999999996, 
3011           0.17453292519943295 },
3012   { 0.34089751955950354, -0.40000000000000002, 0.69999999999999996, 
3013           0.34906585039886590 },
3014   { 0.49824200167361343, -0.40000000000000002, 0.69999999999999996, 
3015           0.52359877559829882 },
3016   { 0.64402450341199413, -0.40000000000000002, 0.69999999999999996, 
3017           0.69813170079773179 },
3018   { 0.77889207804122873, -0.40000000000000002, 0.69999999999999996, 
3019           0.87266462599716477 },
3020   { 0.90468169720957992, -0.40000000000000002, 0.69999999999999996, 
3021           1.0471975511965976 },
3022   { 1.0236847823692916, -0.40000000000000002, 0.69999999999999996, 
3023           1.2217304763960306 },
3024   { 1.1382465247425164, -0.40000000000000002, 0.69999999999999996, 
3025           1.3962634015954636 },
3026   { 1.2506255923253344, -0.40000000000000002, 0.69999999999999996, 
3027           1.5707963267948966 },
3028 };
3029
3030 // Test function for k=-0.40000000000000002, nu=0.69999999999999996.
3031 template <typename Tp>
3032 void test058()
3033 {
3034   const Tp eps = std::numeric_limits<Tp>::epsilon();
3035   Tp max_abs_diff = -Tp(1);
3036   Tp max_abs_frac = -Tp(1);
3037   unsigned int num_datum = sizeof(data058)
3038                          / sizeof(testcase_ellint_3<double>);
3039   for (unsigned int i = 0; i < num_datum; ++i)
3040     {
3041       const Tp f = std::tr1::ellint_3(Tp(data058[i].k), Tp(data058[i].nu),
3042                    Tp(data058[i].phi));
3043       const Tp f0 = data058[i].f0;
3044       const Tp diff = f - f0;
3045       if (std::abs(diff) > max_abs_diff)
3046         max_abs_diff = std::abs(diff);
3047       if (std::abs(f0) > Tp(10) * eps
3048        && std::abs(f) > Tp(10) * eps)
3049         {
3050           const Tp frac = diff / f0;
3051           if (std::abs(frac) > max_abs_frac)
3052             max_abs_frac = std::abs(frac);
3053         }
3054     }
3055   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3056 }
3057
3058 // Test data for k=-0.40000000000000002, nu=0.80000000000000004.
3059 testcase_ellint_3<double> data059[] = {
3060   { -0.0000000000000000, -0.40000000000000002, 0.80000000000000004, 
3061           0.0000000000000000 },
3062   { 0.17328307694277156, -0.40000000000000002, 0.80000000000000004, 
3063           0.17453292519943295 },
3064   { 0.33964091800132007, -0.40000000000000002, 0.80000000000000004, 
3065           0.34906585039886590 },
3066   { 0.49452889372467451, -0.40000000000000002, 0.80000000000000004, 
3067           0.52359877559829882 },
3068   { 0.63652940095937327, -0.40000000000000002, 0.80000000000000004, 
3069           0.69813170079773179 },
3070   { 0.76659772511159097, -0.40000000000000002, 0.80000000000000004, 
3071           0.87266462599716477 },
3072   { 0.88691047977338111, -0.40000000000000002, 0.80000000000000004, 
3073           1.0471975511965976 },
3074   { 1.0000273200611638, -0.40000000000000002, 0.80000000000000004, 
3075           1.2217304763960306 },
3076   { 1.1084787902188007, -0.40000000000000002, 0.80000000000000004, 
3077           1.3962634015954636 },
3078   { 1.2146499565727209, -0.40000000000000002, 0.80000000000000004, 
3079           1.5707963267948966 },
3080 };
3081
3082 // Test function for k=-0.40000000000000002, nu=0.80000000000000004.
3083 template <typename Tp>
3084 void test059()
3085 {
3086   const Tp eps = std::numeric_limits<Tp>::epsilon();
3087   Tp max_abs_diff = -Tp(1);
3088   Tp max_abs_frac = -Tp(1);
3089   unsigned int num_datum = sizeof(data059)
3090                          / sizeof(testcase_ellint_3<double>);
3091   for (unsigned int i = 0; i < num_datum; ++i)
3092     {
3093       const Tp f = std::tr1::ellint_3(Tp(data059[i].k), Tp(data059[i].nu),
3094                    Tp(data059[i].phi));
3095       const Tp f0 = data059[i].f0;
3096       const Tp diff = f - f0;
3097       if (std::abs(diff) > max_abs_diff)
3098         max_abs_diff = std::abs(diff);
3099       if (std::abs(f0) > Tp(10) * eps
3100        && std::abs(f) > Tp(10) * eps)
3101         {
3102           const Tp frac = diff / f0;
3103           if (std::abs(frac) > max_abs_frac)
3104             max_abs_frac = std::abs(frac);
3105         }
3106     }
3107   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3108 }
3109
3110 // Test data for k=-0.40000000000000002, nu=0.90000000000000002.
3111 testcase_ellint_3<double> data060[] = {
3112   { -0.0000000000000000, -0.40000000000000002, 0.90000000000000002, 
3113           0.0000000000000000 },
3114   { 0.17311196891868130, -0.40000000000000002, 0.90000000000000002, 
3115           0.17453292519943295 },
3116   { 0.33840055664911906, -0.40000000000000002, 0.90000000000000002, 
3117           0.34906585039886590 },
3118   { 0.49091013944075340, -0.40000000000000002, 0.90000000000000002, 
3119           0.52359877559829882 },
3120   { 0.62932228186809591, -0.40000000000000002, 0.90000000000000002, 
3121           0.69813170079773179 },
3122   { 0.75492278323019801, -0.40000000000000002, 0.90000000000000002, 
3123           0.87266462599716477 },
3124   { 0.87021659043854294, -0.40000000000000002, 0.90000000000000002, 
3125           1.0471975511965976 },
3126   { 0.97800245228239246, -0.40000000000000002, 0.90000000000000002, 
3127           1.2217304763960306 },
3128   { 1.0809625773173694, -0.40000000000000002, 0.90000000000000002, 
3129           1.3962634015954636 },
3130   { 1.1815758115929846, -0.40000000000000002, 0.90000000000000002, 
3131           1.5707963267948966 },
3132 };
3133
3134 // Test function for k=-0.40000000000000002, nu=0.90000000000000002.
3135 template <typename Tp>
3136 void test060()
3137 {
3138   const Tp eps = std::numeric_limits<Tp>::epsilon();
3139   Tp max_abs_diff = -Tp(1);
3140   Tp max_abs_frac = -Tp(1);
3141   unsigned int num_datum = sizeof(data060)
3142                          / sizeof(testcase_ellint_3<double>);
3143   for (unsigned int i = 0; i < num_datum; ++i)
3144     {
3145       const Tp f = std::tr1::ellint_3(Tp(data060[i].k), Tp(data060[i].nu),
3146                    Tp(data060[i].phi));
3147       const Tp f0 = data060[i].f0;
3148       const Tp diff = f - f0;
3149       if (std::abs(diff) > max_abs_diff)
3150         max_abs_diff = std::abs(diff);
3151       if (std::abs(f0) > Tp(10) * eps
3152        && std::abs(f) > Tp(10) * eps)
3153         {
3154           const Tp frac = diff / f0;
3155           if (std::abs(frac) > max_abs_frac)
3156             max_abs_frac = std::abs(frac);
3157         }
3158     }
3159   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3160 }
3161
3162 // Test data for k=-0.30000000000000004, nu=0.0000000000000000.
3163 testcase_ellint_3<double> data061[] = {
3164   { -0.0000000000000000, -0.30000000000000004, 0.0000000000000000, 
3165           0.0000000000000000 },
3166   { 0.17461228653000102, -0.30000000000000004, 0.0000000000000000, 
3167           0.17453292519943295 },
3168   { 0.34969146102798415, -0.30000000000000004, 0.0000000000000000, 
3169           0.34906585039886590 },
3170   { 0.52565822873726320, -0.30000000000000004, 0.0000000000000000, 
3171           0.52359877559829882 },
3172   { 0.70284226512408532, -0.30000000000000004, 0.0000000000000000, 
3173           0.69813170079773179 },
3174   { 0.88144139195111182, -0.30000000000000004, 0.0000000000000000, 
3175           0.87266462599716477 },
3176   { 1.0614897067260523, -0.30000000000000004, 0.0000000000000000, 
3177           1.0471975511965976 },
3178   { 1.2428416824174218, -0.30000000000000004, 0.0000000000000000, 
3179           1.2217304763960306 },
3180   { 1.4251795877015925, -0.30000000000000004, 0.0000000000000000, 
3181           1.3962634015954636 },
3182   { 1.6080486199305126, -0.30000000000000004, 0.0000000000000000, 
3183           1.5707963267948966 },
3184 };
3185
3186 // Test function for k=-0.30000000000000004, nu=0.0000000000000000.
3187 template <typename Tp>
3188 void test061()
3189 {
3190   const Tp eps = std::numeric_limits<Tp>::epsilon();
3191   Tp max_abs_diff = -Tp(1);
3192   Tp max_abs_frac = -Tp(1);
3193   unsigned int num_datum = sizeof(data061)
3194                          / sizeof(testcase_ellint_3<double>);
3195   for (unsigned int i = 0; i < num_datum; ++i)
3196     {
3197       const Tp f = std::tr1::ellint_3(Tp(data061[i].k), Tp(data061[i].nu),
3198                    Tp(data061[i].phi));
3199       const Tp f0 = data061[i].f0;
3200       const Tp diff = f - f0;
3201       if (std::abs(diff) > max_abs_diff)
3202         max_abs_diff = std::abs(diff);
3203       if (std::abs(f0) > Tp(10) * eps
3204        && std::abs(f) > Tp(10) * eps)
3205         {
3206           const Tp frac = diff / f0;
3207           if (std::abs(frac) > max_abs_frac)
3208             max_abs_frac = std::abs(frac);
3209         }
3210     }
3211   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3212 }
3213
3214 // Test data for k=-0.30000000000000004, nu=0.10000000000000001.
3215 testcase_ellint_3<double> data062[] = {
3216   { -0.0000000000000000, -0.30000000000000004, 0.10000000000000001, 
3217           0.0000000000000000 },
3218   { 0.17443631884814378, -0.30000000000000004, 0.10000000000000001, 
3219           0.17453292519943295 },
3220   { 0.34831316835124926, -0.30000000000000004, 0.10000000000000001, 
3221           0.34906585039886590 },
3222   { 0.52116586276523857, -0.30000000000000004, 0.10000000000000001, 
3223           0.52359877559829882 },
3224   { 0.69269385837910036, -0.30000000000000004, 0.10000000000000001, 
3225           0.69813170079773179 },
3226   { 0.86279023163070856, -0.30000000000000004, 0.10000000000000001, 
3227           0.87266462599716477 },
3228   { 1.0315321461438265, -0.30000000000000004, 0.10000000000000001, 
3229           1.0471975511965976 },
3230   { 1.1991449111869024, -0.30000000000000004, 0.10000000000000001, 
3231           1.2217304763960306 },
3232   { 1.3659561780923211, -0.30000000000000004, 0.10000000000000001, 
3233           1.3962634015954636 },
3234   { 1.5323534693557526, -0.30000000000000004, 0.10000000000000001, 
3235           1.5707963267948966 },
3236 };
3237
3238 // Test function for k=-0.30000000000000004, nu=0.10000000000000001.
3239 template <typename Tp>
3240 void test062()
3241 {
3242   const Tp eps = std::numeric_limits<Tp>::epsilon();
3243   Tp max_abs_diff = -Tp(1);
3244   Tp max_abs_frac = -Tp(1);
3245   unsigned int num_datum = sizeof(data062)
3246                          / sizeof(testcase_ellint_3<double>);
3247   for (unsigned int i = 0; i < num_datum; ++i)
3248     {
3249       const Tp f = std::tr1::ellint_3(Tp(data062[i].k), Tp(data062[i].nu),
3250                    Tp(data062[i].phi));
3251       const Tp f0 = data062[i].f0;
3252       const Tp diff = f - f0;
3253       if (std::abs(diff) > max_abs_diff)
3254         max_abs_diff = std::abs(diff);
3255       if (std::abs(f0) > Tp(10) * eps
3256        && std::abs(f) > Tp(10) * eps)
3257         {
3258           const Tp frac = diff / f0;
3259           if (std::abs(frac) > max_abs_frac)
3260             max_abs_frac = std::abs(frac);
3261         }
3262     }
3263   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3264 }
3265
3266 // Test data for k=-0.30000000000000004, nu=0.20000000000000001.
3267 testcase_ellint_3<double> data063[] = {
3268   { -0.0000000000000000, -0.30000000000000004, 0.20000000000000001, 
3269           0.0000000000000000 },
3270   { 0.17426098615372090, -0.30000000000000004, 0.20000000000000001, 
3271           0.17453292519943295 },
3272   { 0.34695402664689923, -0.30000000000000004, 0.20000000000000001, 
3273           0.34906585039886590 },
3274   { 0.51680555567038933, -0.30000000000000004, 0.20000000000000001, 
3275           0.52359877559829882 },
3276   { 0.68303375225260210, -0.30000000000000004, 0.20000000000000001, 
3277           0.69813170079773179 },
3278   { 0.84540662891295026, -0.30000000000000004, 0.20000000000000001, 
3279           0.87266462599716477 },
3280   { 1.0041834051646927, -0.30000000000000004, 0.20000000000000001, 
3281           1.0471975511965976 },
3282   { 1.1599952702345711, -0.30000000000000004, 0.20000000000000001, 
3283           1.2217304763960306 },
3284   { 1.3137179520499163, -0.30000000000000004, 0.20000000000000001, 
3285           1.3962634015954636 },
3286   { 1.4663658145259875, -0.30000000000000004, 0.20000000000000001, 
3287           1.5707963267948966 },
3288 };
3289
3290 // Test function for k=-0.30000000000000004, nu=0.20000000000000001.
3291 template <typename Tp>
3292 void test063()
3293 {
3294   const Tp eps = std::numeric_limits<Tp>::epsilon();
3295   Tp max_abs_diff = -Tp(1);
3296   Tp max_abs_frac = -Tp(1);
3297   unsigned int num_datum = sizeof(data063)
3298                          / sizeof(testcase_ellint_3<double>);
3299   for (unsigned int i = 0; i < num_datum; ++i)
3300     {
3301       const Tp f = std::tr1::ellint_3(Tp(data063[i].k), Tp(data063[i].nu),
3302                    Tp(data063[i].phi));
3303       const Tp f0 = data063[i].f0;
3304       const Tp diff = f - f0;
3305       if (std::abs(diff) > max_abs_diff)
3306         max_abs_diff = std::abs(diff);
3307       if (std::abs(f0) > Tp(10) * eps
3308        && std::abs(f) > Tp(10) * eps)
3309         {
3310           const Tp frac = diff / f0;
3311           if (std::abs(frac) > max_abs_frac)
3312             max_abs_frac = std::abs(frac);
3313         }
3314     }
3315   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3316 }
3317
3318 // Test data for k=-0.30000000000000004, nu=0.29999999999999999.
3319 testcase_ellint_3<double> data064[] = {
3320   { -0.0000000000000000, -0.30000000000000004, 0.29999999999999999, 
3321           0.0000000000000000 },
3322   { 0.17408628437042845, -0.30000000000000004, 0.29999999999999999, 
3323           0.17453292519943295 },
3324   { 0.34561356761638401, -0.30000000000000004, 0.29999999999999999, 
3325           0.34906585039886590 },
3326   { 0.51257058617875850, -0.30000000000000004, 0.29999999999999999, 
3327           0.52359877559829882 },
3328   { 0.67382207124602866, -0.30000000000000004, 0.29999999999999999, 
3329           0.69813170079773179 },
3330   { 0.82914751587825131, -0.30000000000000004, 0.29999999999999999, 
3331           0.87266462599716477 },
3332   { 0.97907434814374950, -0.30000000000000004, 0.29999999999999999, 
3333           1.0471975511965976 },
3334   { 1.1246399297351584, -0.30000000000000004, 0.29999999999999999, 
3335           1.2217304763960306 },
3336   { 1.2671793970398146, -0.30000000000000004, 0.29999999999999999, 
3337           1.3962634015954636 },
3338   { 1.4081767433479089, -0.30000000000000004, 0.29999999999999999, 
3339           1.5707963267948966 },
3340 };
3341
3342 // Test function for k=-0.30000000000000004, nu=0.29999999999999999.
3343 template <typename Tp>
3344 void test064()
3345 {
3346   const Tp eps = std::numeric_limits<Tp>::epsilon();
3347   Tp max_abs_diff = -Tp(1);
3348   Tp max_abs_frac = -Tp(1);
3349   unsigned int num_datum = sizeof(data064)
3350                          / sizeof(testcase_ellint_3<double>);
3351   for (unsigned int i = 0; i < num_datum; ++i)
3352     {
3353       const Tp f = std::tr1::ellint_3(Tp(data064[i].k), Tp(data064[i].nu),
3354                    Tp(data064[i].phi));
3355       const Tp f0 = data064[i].f0;
3356       const Tp diff = f - f0;
3357       if (std::abs(diff) > max_abs_diff)
3358         max_abs_diff = std::abs(diff);
3359       if (std::abs(f0) > Tp(10) * eps
3360        && std::abs(f) > Tp(10) * eps)
3361         {
3362           const Tp frac = diff / f0;
3363           if (std::abs(frac) > max_abs_frac)
3364             max_abs_frac = std::abs(frac);
3365         }
3366     }
3367   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3368 }
3369
3370 // Test data for k=-0.30000000000000004, nu=0.40000000000000002.
3371 testcase_ellint_3<double> data065[] = {
3372   { -0.0000000000000000, -0.30000000000000004, 0.40000000000000002, 
3373           0.0000000000000000 },
3374   { 0.17391220945982730, -0.30000000000000004, 0.40000000000000002, 
3375           0.17453292519943295 },
3376   { 0.34429133937639689, -0.30000000000000004, 0.40000000000000002, 
3377           0.34906585039886590 },
3378   { 0.50845471668581632, -0.30000000000000004, 0.40000000000000002, 
3379           0.52359877559829882 },
3380   { 0.66502347027873854, -0.30000000000000004, 0.40000000000000002, 
3381           0.69813170079773179 },
3382   { 0.81389191978012254, -0.30000000000000004, 0.40000000000000002, 
3383           0.87266462599716477 },
3384   { 0.95590618002140593, -0.30000000000000004, 0.40000000000000002, 
3385           1.0471975511965976 },
3386   { 1.0924915195213121, -0.30000000000000004, 0.40000000000000002, 
3387           1.2217304763960306 },
3388   { 1.2253651604038058, -0.30000000000000004, 0.40000000000000002, 
3389           1.3962634015954636 },
3390   { 1.3563643538969761, -0.30000000000000004, 0.40000000000000002, 
3391           1.5707963267948966 },
3392 };
3393
3394 // Test function for k=-0.30000000000000004, nu=0.40000000000000002.
3395 template <typename Tp>
3396 void test065()
3397 {
3398   const Tp eps = std::numeric_limits<Tp>::epsilon();
3399   Tp max_abs_diff = -Tp(1);
3400   Tp max_abs_frac = -Tp(1);
3401   unsigned int num_datum = sizeof(data065)
3402                          / sizeof(testcase_ellint_3<double>);
3403   for (unsigned int i = 0; i < num_datum; ++i)
3404     {
3405       const Tp f = std::tr1::ellint_3(Tp(data065[i].k), Tp(data065[i].nu),
3406                    Tp(data065[i].phi));
3407       const Tp f0 = data065[i].f0;
3408       const Tp diff = f - f0;
3409       if (std::abs(diff) > max_abs_diff)
3410         max_abs_diff = std::abs(diff);
3411       if (std::abs(f0) > Tp(10) * eps
3412        && std::abs(f) > Tp(10) * eps)
3413         {
3414           const Tp frac = diff / f0;
3415           if (std::abs(frac) > max_abs_frac)
3416             max_abs_frac = std::abs(frac);
3417         }
3418     }
3419   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3420 }
3421
3422 // Test data for k=-0.30000000000000004, nu=0.50000000000000000.
3423 testcase_ellint_3<double> data066[] = {
3424   { -0.0000000000000000, -0.30000000000000004, 0.50000000000000000, 
3425           0.0000000000000000 },
3426   { 0.17373875742088235, -0.30000000000000004, 0.50000000000000000, 
3427           0.17453292519943295 },
3428   { 0.34298690571124157, -0.30000000000000004, 0.50000000000000000, 
3429           0.34906585039886590 },
3430   { 0.50445214859646936, -0.30000000000000004, 0.50000000000000000, 
3431           0.52359877559829882 },
3432   { 0.65660648352418516, -0.30000000000000004, 0.50000000000000000, 
3433           0.69813170079773179 },
3434   { 0.79953670639287289, -0.30000000000000004, 0.50000000000000000, 
3435           0.87266462599716477 },
3436   { 0.93443393926588558, -0.30000000000000004, 0.50000000000000000, 
3437           1.0471975511965976 },
3438   { 1.0630838369016911, -0.30000000000000004, 0.50000000000000000, 
3439           1.2217304763960306 },
3440   { 1.1875197325653026, -0.30000000000000004, 0.50000000000000000, 
3441           1.3962634015954636 },
3442   { 1.3098448759814960, -0.30000000000000004, 0.50000000000000000, 
3443           1.5707963267948966 },
3444 };
3445
3446 // Test function for k=-0.30000000000000004, nu=0.50000000000000000.
3447 template <typename Tp>
3448 void test066()
3449 {
3450   const Tp eps = std::numeric_limits<Tp>::epsilon();
3451   Tp max_abs_diff = -Tp(1);
3452   Tp max_abs_frac = -Tp(1);
3453   unsigned int num_datum = sizeof(data066)
3454                          / sizeof(testcase_ellint_3<double>);
3455   for (unsigned int i = 0; i < num_datum; ++i)
3456     {
3457       const Tp f = std::tr1::ellint_3(Tp(data066[i].k), Tp(data066[i].nu),
3458                    Tp(data066[i].phi));
3459       const Tp f0 = data066[i].f0;
3460       const Tp diff = f - f0;
3461       if (std::abs(diff) > max_abs_diff)
3462         max_abs_diff = std::abs(diff);
3463       if (std::abs(f0) > Tp(10) * eps
3464        && std::abs(f) > Tp(10) * eps)
3465         {
3466           const Tp frac = diff / f0;
3467           if (std::abs(frac) > max_abs_frac)
3468             max_abs_frac = std::abs(frac);
3469         }
3470     }
3471   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3472 }
3473
3474 // Test data for k=-0.30000000000000004, nu=0.59999999999999998.
3475 testcase_ellint_3<double> data067[] = {
3476   { -0.0000000000000000, -0.30000000000000004, 0.59999999999999998, 
3477           0.0000000000000000 },
3478   { 0.17356592428950826, -0.30000000000000004, 0.59999999999999998, 
3479           0.17453292519943295 },
3480   { 0.34169984536697379, -0.30000000000000004, 0.59999999999999998, 
3481           0.34906585039886590 },
3482   { 0.50055748266498457, -0.30000000000000004, 0.59999999999999998, 
3483           0.52359877559829882 },
3484   { 0.64854298527106768, -0.30000000000000004, 0.59999999999999998, 
3485           0.69813170079773179 },
3486   { 0.78599329284207431, -0.30000000000000004, 0.59999999999999998, 
3487           0.87266462599716477 },
3488   { 0.91445452089128221, -0.30000000000000004, 0.59999999999999998, 
3489           1.0471975511965976 },
3490   { 1.0360412952290587, -0.30000000000000004, 0.59999999999999998, 
3491           1.2217304763960306 },
3492   { 1.1530473919778639, -0.30000000000000004, 0.59999999999999998, 
3493           1.3962634015954636 },
3494   { 1.2677758800420666, -0.30000000000000004, 0.59999999999999998, 
3495           1.5707963267948966 },
3496 };
3497
3498 // Test function for k=-0.30000000000000004, nu=0.59999999999999998.
3499 template <typename Tp>
3500 void test067()
3501 {
3502   const Tp eps = std::numeric_limits<Tp>::epsilon();
3503   Tp max_abs_diff = -Tp(1);
3504   Tp max_abs_frac = -Tp(1);
3505   unsigned int num_datum = sizeof(data067)
3506                          / sizeof(testcase_ellint_3<double>);
3507   for (unsigned int i = 0; i < num_datum; ++i)
3508     {
3509       const Tp f = std::tr1::ellint_3(Tp(data067[i].k), Tp(data067[i].nu),
3510                    Tp(data067[i].phi));
3511       const Tp f0 = data067[i].f0;
3512       const Tp diff = f - f0;
3513       if (std::abs(diff) > max_abs_diff)
3514         max_abs_diff = std::abs(diff);
3515       if (std::abs(f0) > Tp(10) * eps
3516        && std::abs(f) > Tp(10) * eps)
3517         {
3518           const Tp frac = diff / f0;
3519           if (std::abs(frac) > max_abs_frac)
3520             max_abs_frac = std::abs(frac);
3521         }
3522     }
3523   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3524 }
3525
3526 // Test data for k=-0.30000000000000004, nu=0.69999999999999996.
3527 testcase_ellint_3<double> data068[] = {
3528   { -0.0000000000000000, -0.30000000000000004, 0.69999999999999996, 
3529           0.0000000000000000 },
3530   { 0.17339370613812227, -0.30000000000000004, 0.69999999999999996, 
3531           0.17453292519943295 },
3532   { 0.34042975138455933, -0.30000000000000004, 0.69999999999999996, 
3533           0.34906585039886590 },
3534   { 0.49676568368075985, -0.30000000000000004, 0.69999999999999996, 
3535           0.52359877559829882 },
3536   { 0.64080774055753720, -0.30000000000000004, 0.69999999999999996, 
3537           0.69813170079773179 },
3538   { 0.77318507779667278, -0.30000000000000004, 0.69999999999999996, 
3539           0.87266462599716477 },
3540   { 0.89579782346548631, -0.30000000000000004, 0.69999999999999996, 
3541           1.0471975511965976 },
3542   { 1.0110573286052202, -0.30000000000000004, 0.69999999999999996, 
3543           1.2217304763960306 },
3544   { 1.1214710972949633, -0.30000000000000004, 0.69999999999999996, 
3545           1.3962634015954636 },
3546   { 1.2294913236274980, -0.30000000000000004, 0.69999999999999996, 
3547           1.5707963267948966 },
3548 };
3549
3550 // Test function for k=-0.30000000000000004, nu=0.69999999999999996.
3551 template <typename Tp>
3552 void test068()
3553 {
3554   const Tp eps = std::numeric_limits<Tp>::epsilon();
3555   Tp max_abs_diff = -Tp(1);
3556   Tp max_abs_frac = -Tp(1);
3557   unsigned int num_datum = sizeof(data068)
3558                          / sizeof(testcase_ellint_3<double>);
3559   for (unsigned int i = 0; i < num_datum; ++i)
3560     {
3561       const Tp f = std::tr1::ellint_3(Tp(data068[i].k), Tp(data068[i].nu),
3562                    Tp(data068[i].phi));
3563       const Tp f0 = data068[i].f0;
3564       const Tp diff = f - f0;
3565       if (std::abs(diff) > max_abs_diff)
3566         max_abs_diff = std::abs(diff);
3567       if (std::abs(f0) > Tp(10) * eps
3568        && std::abs(f) > Tp(10) * eps)
3569         {
3570           const Tp frac = diff / f0;
3571           if (std::abs(frac) > max_abs_frac)
3572             max_abs_frac = std::abs(frac);
3573         }
3574     }
3575   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3576 }
3577
3578 // Test data for k=-0.30000000000000004, nu=0.80000000000000004.
3579 testcase_ellint_3<double> data069[] = {
3580   { -0.0000000000000000, -0.30000000000000004, 0.80000000000000004, 
3581           0.0000000000000000 },
3582   { 0.17322209907520361, -0.30000000000000004, 0.80000000000000004, 
3583           0.17453292519943295 },
3584   { 0.33917623046949996, -0.30000000000000004, 0.80000000000000004, 
3585           0.34906585039886590 },
3586   { 0.49307204894329176, -0.30000000000000004, 0.80000000000000004, 
3587           0.52359877559829882 },
3588   { 0.63337802830291723, -0.30000000000000004, 0.80000000000000004, 
3589           0.69813170079773179 },
3590   { 0.76104540997689407, -0.30000000000000004, 0.80000000000000004, 
3591           0.87266462599716477 },
3592   { 0.87832009635450736, -0.30000000000000004, 0.80000000000000004, 
3593           1.0471975511965976 },
3594   { 0.98787879723171790, -0.30000000000000004, 0.80000000000000004, 
3595           1.2217304763960306 },
3596   { 1.0924036340069336, -0.30000000000000004, 0.80000000000000004, 
3597           1.3962634015954636 },
3598   { 1.1944567571590046, -0.30000000000000004, 0.80000000000000004, 
3599           1.5707963267948966 },
3600 };
3601
3602 // Test function for k=-0.30000000000000004, nu=0.80000000000000004.
3603 template <typename Tp>
3604 void test069()
3605 {
3606   const Tp eps = std::numeric_limits<Tp>::epsilon();
3607   Tp max_abs_diff = -Tp(1);
3608   Tp max_abs_frac = -Tp(1);
3609   unsigned int num_datum = sizeof(data069)
3610                          / sizeof(testcase_ellint_3<double>);
3611   for (unsigned int i = 0; i < num_datum; ++i)
3612     {
3613       const Tp f = std::tr1::ellint_3(Tp(data069[i].k), Tp(data069[i].nu),
3614                    Tp(data069[i].phi));
3615       const Tp f0 = data069[i].f0;
3616       const Tp diff = f - f0;
3617       if (std::abs(diff) > max_abs_diff)
3618         max_abs_diff = std::abs(diff);
3619       if (std::abs(f0) > Tp(10) * eps
3620        && 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 k=-0.30000000000000004, nu=0.90000000000000002.
3631 testcase_ellint_3<double> data070[] = {
3632   { -0.0000000000000000, -0.30000000000000004, 0.90000000000000002, 
3633           0.0000000000000000 },
3634   { 0.17305109924485948, -0.30000000000000004, 0.90000000000000002, 
3635           0.17453292519943295 },
3636   { 0.33793890239556984, -0.30000000000000004, 0.90000000000000002, 
3637           0.34906585039886590 },
3638   { 0.48947218005089738, -0.30000000000000004, 0.90000000000000002, 
3639           0.52359877559829882 },
3640   { 0.62623332340775151, -0.30000000000000004, 0.90000000000000002, 
3641           0.69813170079773179 },
3642   { 0.74951596581511148, -0.30000000000000004, 0.90000000000000002, 
3643           0.87266462599716477 },
3644   { 0.86189886597756005, -0.30000000000000004, 0.90000000000000002, 
3645           1.0471975511965976 },
3646   { 0.96629451153092005, -0.30000000000000004, 0.90000000000000002, 
3647           1.2217304763960306 },
3648   { 1.0655269133492680, -0.30000000000000004, 0.90000000000000002, 
3649           1.3962634015954636 },
3650   { 1.1622376896064912, -0.30000000000000004, 0.90000000000000002, 
3651           1.5707963267948966 },
3652 };
3653
3654 // Test function for k=-0.30000000000000004, nu=0.90000000000000002.
3655 template <typename Tp>
3656 void test070()
3657 {
3658   const Tp eps = std::numeric_limits<Tp>::epsilon();
3659   Tp max_abs_diff = -Tp(1);
3660   Tp max_abs_frac = -Tp(1);
3661   unsigned int num_datum = sizeof(data070)
3662                          / sizeof(testcase_ellint_3<double>);
3663   for (unsigned int i = 0; i < num_datum; ++i)
3664     {
3665       const Tp f = std::tr1::ellint_3(Tp(data070[i].k), Tp(data070[i].nu),
3666                    Tp(data070[i].phi));
3667       const Tp f0 = data070[i].f0;
3668       const Tp diff = f - f0;
3669       if (std::abs(diff) > max_abs_diff)
3670         max_abs_diff = std::abs(diff);
3671       if (std::abs(f0) > Tp(10) * eps
3672        && std::abs(f) > Tp(10) * eps)
3673         {
3674           const Tp frac = diff / f0;
3675           if (std::abs(frac) > max_abs_frac)
3676             max_abs_frac = std::abs(frac);
3677         }
3678     }
3679   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3680 }
3681
3682 // Test data for k=-0.19999999999999996, nu=0.0000000000000000.
3683 testcase_ellint_3<double> data071[] = {
3684   { -0.0000000000000000, -0.19999999999999996, 0.0000000000000000, 
3685           0.0000000000000000 },
3686   { 0.17456817290292811, -0.19999999999999996, 0.0000000000000000, 
3687           0.17453292519943295 },
3688   { 0.34934315932086801, -0.19999999999999996, 0.0000000000000000, 
3689           0.34906585039886590 },
3690   { 0.52450880529443988, -0.19999999999999996, 0.0000000000000000, 
3691           0.52359877559829882 },
3692   { 0.70020491009844910, -0.19999999999999996, 0.0000000000000000, 
3693           0.69813170079773179 },
3694   { 0.87651006649967955, -0.19999999999999996, 0.0000000000000000, 
3695           0.87266462599716477 },
3696   { 1.0534305870298994, -0.19999999999999996, 0.0000000000000000, 
3697           1.0471975511965976 },
3698   { 1.2308975521670784, -0.19999999999999996, 0.0000000000000000, 
3699           1.2217304763960306 },
3700   { 1.4087733584990738, -0.19999999999999996, 0.0000000000000000, 
3701           1.3962634015954636 },
3702   { 1.5868678474541664, -0.19999999999999996, 0.0000000000000000, 
3703           1.5707963267948966 },
3704 };
3705
3706 // Test function for k=-0.19999999999999996, nu=0.0000000000000000.
3707 template <typename Tp>
3708 void test071()
3709 {
3710   const Tp eps = std::numeric_limits<Tp>::epsilon();
3711   Tp max_abs_diff = -Tp(1);
3712   Tp max_abs_frac = -Tp(1);
3713   unsigned int num_datum = sizeof(data071)
3714                          / sizeof(testcase_ellint_3<double>);
3715   for (unsigned int i = 0; i < num_datum; ++i)
3716     {
3717       const Tp f = std::tr1::ellint_3(Tp(data071[i].k), Tp(data071[i].nu),
3718                    Tp(data071[i].phi));
3719       const Tp f0 = data071[i].f0;
3720       const Tp diff = f - f0;
3721       if (std::abs(diff) > max_abs_diff)
3722         max_abs_diff = std::abs(diff);
3723       if (std::abs(f0) > Tp(10) * eps
3724        && std::abs(f) > Tp(10) * eps)
3725         {
3726           const Tp frac = diff / f0;
3727           if (std::abs(frac) > max_abs_frac)
3728             max_abs_frac = std::abs(frac);
3729         }
3730     }
3731   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3732 }
3733
3734 // Test data for k=-0.19999999999999996, nu=0.10000000000000001.
3735 testcase_ellint_3<double> data072[] = {
3736   { -0.0000000000000000, -0.19999999999999996, 0.10000000000000001, 
3737           0.0000000000000000 },
3738   { 0.17439228502691750, -0.19999999999999996, 0.10000000000000001, 
3739           0.17453292519943295 },
3740   { 0.34796731137565740, -0.19999999999999996, 0.10000000000000001, 
3741           0.34906585039886590 },
3742   { 0.52003370294544848, -0.19999999999999996, 0.10000000000000001, 
3743           0.52359877559829882 },
3744   { 0.69012222258631495, -0.19999999999999996, 0.10000000000000001, 
3745           0.69813170079773179 },
3746   { 0.85803491465566772, -0.19999999999999996, 0.10000000000000001, 
3747           0.87266462599716477 },
3748   { 1.0238463961099364, -0.19999999999999996, 0.10000000000000001, 
3749           1.0471975511965976 },
3750   { 1.1878691059202153, -0.19999999999999996, 0.10000000000000001, 
3751           1.2217304763960306 },
3752   { 1.3505985031831940, -0.19999999999999996, 0.10000000000000001, 
3753           1.3962634015954636 },
3754   { 1.5126513474261092, -0.19999999999999996, 0.10000000000000001, 
3755           1.5707963267948966 },
3756 };
3757
3758 // Test function for k=-0.19999999999999996, nu=0.10000000000000001.
3759 template <typename Tp>
3760 void test072()
3761 {
3762   const Tp eps = std::numeric_limits<Tp>::epsilon();
3763   Tp max_abs_diff = -Tp(1);
3764   Tp max_abs_frac = -Tp(1);
3765   unsigned int num_datum = sizeof(data072)
3766                          / sizeof(testcase_ellint_3<double>);
3767   for (unsigned int i = 0; i < num_datum; ++i)
3768     {
3769       const Tp f = std::tr1::ellint_3(Tp(data072[i].k), Tp(data072[i].nu),
3770                    Tp(data072[i].phi));
3771       const Tp f0 = data072[i].f0;
3772       const Tp diff = f - f0;
3773       if (std::abs(diff) > max_abs_diff)
3774         max_abs_diff = std::abs(diff);
3775       if (std::abs(f0) > Tp(10) * eps
3776        && std::abs(f) > Tp(10) * eps)
3777         {
3778           const Tp frac = diff / f0;
3779           if (std::abs(frac) > max_abs_frac)
3780             max_abs_frac = std::abs(frac);
3781         }
3782     }
3783   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3784 }
3785
3786 // Test data for k=-0.19999999999999996, nu=0.20000000000000001.
3787 testcase_ellint_3<double> data073[] = {
3788   { -0.0000000000000000, -0.19999999999999996, 0.20000000000000001, 
3789           0.0000000000000000 },
3790   { 0.17421703179583750, -0.19999999999999996, 0.20000000000000001, 
3791           0.17453292519943295 },
3792   { 0.34661057411998791, -0.19999999999999996, 0.20000000000000001, 
3793           0.34906585039886590 },
3794   { 0.51569006052647393, -0.19999999999999996, 0.20000000000000001, 
3795           0.52359877559829882 },
3796   { 0.68052412821107278, -0.19999999999999996, 0.20000000000000001, 
3797           0.69813170079773179 },
3798   { 0.84081341263313825, -0.19999999999999996, 0.20000000000000001, 
3799           0.87266462599716477 },
3800   { 0.99683359988842890, -0.19999999999999996, 0.20000000000000001, 
3801           1.0471975511965976 },
3802   { 1.1493086715118852, -0.19999999999999996, 0.20000000000000001, 
3803           1.2217304763960306 },
3804   { 1.2992699693957541, -0.19999999999999996, 0.20000000000000001, 
3805           1.3962634015954636 },
3806   { 1.4479323932249568, -0.19999999999999996, 0.20000000000000001, 
3807           1.5707963267948966 },
3808 };
3809
3810 // Test function for k=-0.19999999999999996, nu=0.20000000000000001.
3811 template <typename Tp>
3812 void test073()
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(data073)
3818                          / sizeof(testcase_ellint_3<double>);
3819   for (unsigned int i = 0; i < num_datum; ++i)
3820     {
3821       const Tp f = std::tr1::ellint_3(Tp(data073[i].k), Tp(data073[i].nu),
3822                    Tp(data073[i].phi));
3823       const Tp f0 = data073[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
3828        && std::abs(f) > Tp(10) * eps)
3829         {
3830           const Tp frac = diff / f0;
3831           if (std::abs(frac) > max_abs_frac)
3832             max_abs_frac = std::abs(frac);
3833         }
3834     }
3835   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3836 }
3837
3838 // Test data for k=-0.19999999999999996, nu=0.29999999999999999.
3839 testcase_ellint_3<double> data074[] = {
3840   { -0.0000000000000000, -0.19999999999999996, 0.29999999999999999, 
3841           0.0000000000000000 },
3842   { 0.17404240913577707, -0.19999999999999996, 0.29999999999999999, 
3843           0.17453292519943295 },
3844   { 0.34527248032587193, -0.19999999999999996, 0.29999999999999999, 
3845           0.34906585039886590 },
3846   { 0.51147118981668416, -0.19999999999999996, 0.29999999999999999, 
3847           0.52359877559829882 },
3848   { 0.67137107867777635, -0.19999999999999996, 0.29999999999999999, 
3849           0.69813170079773179 },
3850   { 0.82470418188668893, -0.19999999999999996, 0.29999999999999999, 
3851           0.87266462599716477 },
3852   { 0.97202873223594299, -0.19999999999999996, 0.29999999999999999, 
3853           1.0471975511965976 },
3854   { 1.1144773569375266, -0.19999999999999996, 0.29999999999999999, 
3855           1.2217304763960306 },
3856   { 1.2535292433701000, -0.19999999999999996, 0.29999999999999999, 
3857           1.3962634015954636 },
3858   { 1.3908453514752481, -0.19999999999999996, 0.29999999999999999, 
3859           1.5707963267948966 },
3860 };
3861
3862 // Test function for k=-0.19999999999999996, nu=0.29999999999999999.
3863 template <typename Tp>
3864 void test074()
3865 {
3866   const Tp eps = std::numeric_limits<Tp>::epsilon();
3867   Tp max_abs_diff = -Tp(1);
3868   Tp max_abs_frac = -Tp(1);
3869   unsigned int num_datum = sizeof(data074)
3870                          / sizeof(testcase_ellint_3<double>);
3871   for (unsigned int i = 0; i < num_datum; ++i)
3872     {
3873       const Tp f = std::tr1::ellint_3(Tp(data074[i].k), Tp(data074[i].nu),
3874                    Tp(data074[i].phi));
3875       const Tp f0 = data074[i].f0;
3876       const Tp diff = f - f0;
3877       if (std::abs(diff) > max_abs_diff)
3878         max_abs_diff = std::abs(diff);
3879       if (std::abs(f0) > Tp(10) * eps
3880        && std::abs(f) > Tp(10) * eps)
3881         {
3882           const Tp frac = diff / f0;
3883           if (std::abs(frac) > max_abs_frac)
3884             max_abs_frac = std::abs(frac);
3885         }
3886     }
3887   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3888 }
3889
3890 // Test data for k=-0.19999999999999996, nu=0.40000000000000002.
3891 testcase_ellint_3<double> data075[] = {
3892   { -0.0000000000000000, -0.19999999999999996, 0.40000000000000002, 
3893           0.0000000000000000 },
3894   { 0.17386841301066677, -0.19999999999999996, 0.40000000000000002, 
3895           0.17453292519943295 },
3896   { 0.34395257914113253, -0.19999999999999996, 0.40000000000000002, 
3897           0.34906585039886590 },
3898   { 0.50737088376869466, -0.19999999999999996, 0.40000000000000002, 
3899           0.52359877559829882 },
3900   { 0.66262801717277664, -0.19999999999999996, 0.40000000000000002, 
3901           0.69813170079773179 },
3902   { 0.80958766645079094, -0.19999999999999996, 0.40000000000000002, 
3903           0.87266462599716477 },
3904   { 0.94913754236162040, -0.19999999999999996, 0.40000000000000002, 
3905           1.0471975511965976 },
3906   { 1.0827985514223000, -0.19999999999999996, 0.40000000000000002, 
3907           1.2217304763960306 },
3908   { 1.2124212429050478, -0.19999999999999996, 0.40000000000000002, 
3909           1.3962634015954636 },
3910   { 1.3400002519661010, -0.19999999999999996, 0.40000000000000002, 
3911           1.5707963267948966 },
3912 };
3913
3914 // Test function for k=-0.19999999999999996, nu=0.40000000000000002.
3915 template <typename Tp>
3916 void test075()
3917 {
3918   const Tp eps = std::numeric_limits<Tp>::epsilon();
3919   Tp max_abs_diff = -Tp(1);
3920   Tp max_abs_frac = -Tp(1);
3921   unsigned int num_datum = sizeof(data075)
3922                          / sizeof(testcase_ellint_3<double>);
3923   for (unsigned int i = 0; i < num_datum; ++i)
3924     {
3925       const Tp f = std::tr1::ellint_3(Tp(data075[i].k), Tp(data075[i].nu),
3926                    Tp(data075[i].phi));
3927       const Tp f0 = data075[i].f0;
3928       const Tp diff = f - f0;
3929       if (std::abs(diff) > max_abs_diff)
3930         max_abs_diff = std::abs(diff);
3931       if (std::abs(f0) > Tp(10) * eps
3932        && std::abs(f) > Tp(10) * eps)
3933         {
3934           const Tp frac = diff / f0;
3935           if (std::abs(frac) > max_abs_frac)
3936             max_abs_frac = std::abs(frac);
3937         }
3938     }
3939   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3940 }
3941
3942 // Test data for k=-0.19999999999999996, nu=0.50000000000000000.
3943 testcase_ellint_3<double> data076[] = {
3944   { -0.0000000000000000, -0.19999999999999996, 0.50000000000000000, 
3945           0.0000000000000000 },
3946   { 0.17369503942181802, -0.19999999999999996, 0.50000000000000000, 
3947           0.17453292519943295 },
3948   { 0.34265043534362660, -0.19999999999999996, 0.50000000000000000, 
3949           0.34906585039886590 },
3950   { 0.50338337208655415, -0.19999999999999996, 0.50000000000000000, 
3951           0.52359877559829882 },
3952   { 0.65426373297163642, -0.19999999999999996, 0.50000000000000000, 
3953           0.69813170079773179 },
3954   { 0.79536193036145808, -0.19999999999999996, 0.50000000000000000, 
3955           0.87266462599716477 },
3956   { 0.92791875910061605, -0.19999999999999996, 0.50000000000000000, 
3957           1.0471975511965976 },
3958   { 1.0538145052725829, -0.19999999999999996, 0.50000000000000000, 
3959           1.2217304763960306 },
3960   { 1.1752060022875899, -0.19999999999999996, 0.50000000000000000, 
3961           1.3962634015954636 },
3962   { 1.2943374404397376, -0.19999999999999996, 0.50000000000000000, 
3963           1.5707963267948966 },
3964 };
3965
3966 // Test function for k=-0.19999999999999996, nu=0.50000000000000000.
3967 template <typename Tp>
3968 void test076()
3969 {
3970   const Tp eps = std::numeric_limits<Tp>::epsilon();
3971   Tp max_abs_diff = -Tp(1);
3972   Tp max_abs_frac = -Tp(1);
3973   unsigned int num_datum = sizeof(data076)
3974                          / sizeof(testcase_ellint_3<double>);
3975   for (unsigned int i = 0; i < num_datum; ++i)
3976     {
3977       const Tp f = std::tr1::ellint_3(Tp(data076[i].k), Tp(data076[i].nu),
3978                    Tp(data076[i].phi));
3979       const Tp f0 = data076[i].f0;
3980       const Tp diff = f - f0;
3981       if (std::abs(diff) > max_abs_diff)
3982         max_abs_diff = std::abs(diff);
3983       if (std::abs(f0) > Tp(10) * eps
3984        && std::abs(f) > Tp(10) * eps)
3985         {
3986           const Tp frac = diff / f0;
3987           if (std::abs(frac) > max_abs_frac)
3988             max_abs_frac = std::abs(frac);
3989         }
3990     }
3991   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3992 }
3993
3994 // Test data for k=-0.19999999999999996, nu=0.59999999999999998.
3995 testcase_ellint_3<double> data077[] = {
3996   { -0.0000000000000000, -0.19999999999999996, 0.59999999999999998, 
3997           0.0000000000000000 },
3998   { 0.17352228440746928, -0.19999999999999996, 0.59999999999999998, 
3999           0.17453292519943295 },
4000   { 0.34136562863713626, -0.19999999999999996, 0.59999999999999998, 
4001           0.34906585039886590 },
4002   { 0.49950328177638481, -0.19999999999999996, 0.59999999999999998, 
4003           0.52359877559829882 },
4004   { 0.64625032705690832, -0.19999999999999996, 0.59999999999999998, 
4005           0.69813170079773179 },
4006   { 0.78193941198403094, -0.19999999999999996, 0.59999999999999998, 
4007           0.87266462599716477 },
4008   { 0.90817230934317128, -0.19999999999999996, 0.59999999999999998, 
4009           1.0471975511965976 },
4010   { 1.0271563751276462, -0.19999999999999996, 0.59999999999999998, 
4011           1.2217304763960306 },
4012   { 1.1412999379040518, -0.19999999999999996, 0.59999999999999998, 
4013           1.3962634015954636 },
4014   { 1.2530330675914561, -0.19999999999999996, 0.59999999999999998, 
4015           1.5707963267948966 },
4016 };
4017
4018 // Test function for k=-0.19999999999999996, nu=0.59999999999999998.
4019 template <typename Tp>
4020 void test077()
4021 {
4022   const Tp eps = std::numeric_limits<Tp>::epsilon();
4023   Tp max_abs_diff = -Tp(1);
4024   Tp max_abs_frac = -Tp(1);
4025   unsigned int num_datum = sizeof(data077)
4026                          / sizeof(testcase_ellint_3<double>);
4027   for (unsigned int i = 0; i < num_datum; ++i)
4028     {
4029       const Tp f = std::tr1::ellint_3(Tp(data077[i].k), Tp(data077[i].nu),
4030                    Tp(data077[i].phi));
4031       const Tp f0 = data077[i].f0;
4032       const Tp diff = f - f0;
4033       if (std::abs(diff) > max_abs_diff)
4034         max_abs_diff = std::abs(diff);
4035       if (std::abs(f0) > Tp(10) * eps
4036        && std::abs(f) > Tp(10) * eps)
4037         {
4038           const Tp frac = diff / f0;
4039           if (std::abs(frac) > max_abs_frac)
4040             max_abs_frac = std::abs(frac);
4041         }
4042     }
4043   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4044 }
4045
4046 // Test data for k=-0.19999999999999996, nu=0.69999999999999996.
4047 testcase_ellint_3<double> data078[] = {
4048   { -0.0000000000000000, -0.19999999999999996, 0.69999999999999996, 
4049           0.0000000000000000 },
4050   { 0.17335014404233898, -0.19999999999999996, 0.69999999999999996, 
4051           0.17453292519943295 },
4052   { 0.34009775298617811, -0.19999999999999996, 0.69999999999999996, 
4053           0.34906585039886590 },
4054   { 0.49572560201923810, -0.19999999999999996, 0.69999999999999996, 
4055           0.52359877559829882 },
4056   { 0.63856276669886525, -0.19999999999999996, 0.69999999999999996, 
4057           0.69813170079773179 },
4058   { 0.76924438644867565, -0.19999999999999996, 0.69999999999999996, 
4059           0.87266462599716477 },
4060   { 0.88973060843856466, -0.19999999999999996, 0.69999999999999996, 
4061           1.0471975511965976 },
4062   { 1.0025230471636377, -0.19999999999999996, 0.69999999999999996, 
4063           1.2217304763960306 },
4064   { 1.1102356376093103, -0.19999999999999996, 0.69999999999999996, 
4065           1.3962634015954636 },
4066   { 1.2154356555075867, -0.19999999999999996, 0.69999999999999996, 
4067           1.5707963267948966 },
4068 };
4069
4070 // Test function for k=-0.19999999999999996, nu=0.69999999999999996.
4071 template <typename Tp>
4072 void test078()
4073 {
4074   const Tp eps = std::numeric_limits<Tp>::epsilon();
4075   Tp max_abs_diff = -Tp(1);
4076   Tp max_abs_frac = -Tp(1);
4077   unsigned int num_datum = sizeof(data078)
4078                          / sizeof(testcase_ellint_3<double>);
4079   for (unsigned int i = 0; i < num_datum; ++i)
4080     {
4081       const Tp f = std::tr1::ellint_3(Tp(data078[i].k), Tp(data078[i].nu),
4082                    Tp(data078[i].phi));
4083       const Tp f0 = data078[i].f0;
4084       const Tp diff = f - f0;
4085       if (std::abs(diff) > max_abs_diff)
4086         max_abs_diff = std::abs(diff);
4087       if (std::abs(f0) > Tp(10) * eps
4088        && std::abs(f) > Tp(10) * eps)
4089         {
4090           const Tp frac = diff / f0;
4091           if (std::abs(frac) > max_abs_frac)
4092             max_abs_frac = std::abs(frac);
4093         }
4094     }
4095   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4096 }
4097
4098 // Test data for k=-0.19999999999999996, nu=0.80000000000000004.
4099 testcase_ellint_3<double> data079[] = {
4100   { -0.0000000000000000, -0.19999999999999996, 0.80000000000000004, 
4101           0.0000000000000000 },
4102   { 0.17317861443718541, -0.19999999999999996, 0.80000000000000004, 
4103           0.17453292519943295 },
4104   { 0.33884641598718701, -0.19999999999999996, 0.80000000000000004, 
4105           0.34906585039886590 },
4106   { 0.49204565281259494, -0.19999999999999996, 0.80000000000000004, 
4107           0.52359877559829882 },
4108   { 0.63117851188220353, -0.19999999999999996, 0.80000000000000004, 
4109           0.69813170079773179 },
4110   { 0.75721095949544170, -0.19999999999999996, 0.80000000000000004, 
4111           0.87266462599716477 },
4112   { 0.87245201443919118, -0.19999999999999996, 0.80000000000000004, 
4113           1.0471975511965976 },
4114   { 0.97966584238831089, -0.19999999999999996, 0.80000000000000004, 
4115           1.2217304763960306 },
4116   { 1.0816336325174360, -0.19999999999999996, 0.80000000000000004, 
4117           1.3962634015954636 },
4118   { 1.1810223448909913, -0.19999999999999996, 0.80000000000000004, 
4119           1.5707963267948966 },
4120 };
4121
4122 // Test function for k=-0.19999999999999996, nu=0.80000000000000004.
4123 template <typename Tp>
4124 void test079()
4125 {
4126   const Tp eps = std::numeric_limits<Tp>::epsilon();
4127   Tp max_abs_diff = -Tp(1);
4128   Tp max_abs_frac = -Tp(1);
4129   unsigned int num_datum = sizeof(data079)
4130                          / sizeof(testcase_ellint_3<double>);
4131   for (unsigned int i = 0; i < num_datum; ++i)
4132     {
4133       const Tp f = std::tr1::ellint_3(Tp(data079[i].k), Tp(data079[i].nu),
4134                    Tp(data079[i].phi));
4135       const Tp f0 = data079[i].f0;
4136       const Tp diff = f - f0;
4137       if (std::abs(diff) > max_abs_diff)
4138         max_abs_diff = std::abs(diff);
4139       if (std::abs(f0) > Tp(10) * eps
4140        && std::abs(f) > Tp(10) * eps)
4141         {
4142           const Tp frac = diff / f0;
4143           if (std::abs(frac) > max_abs_frac)
4144             max_abs_frac = std::abs(frac);
4145         }
4146     }
4147   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4148 }
4149
4150 // Test data for k=-0.19999999999999996, nu=0.90000000000000002.
4151 testcase_ellint_3<double> data080[] = {
4152   { -0.0000000000000000, -0.19999999999999996, 0.90000000000000002, 
4153           0.0000000000000000 },
4154   { 0.17300769173837280, -0.19999999999999996, 0.90000000000000002, 
4155           0.17453292519943295 },
4156   { 0.33761123827372508, -0.19999999999999996, 0.90000000000000002, 
4157           0.34906585039886590 },
4158   { 0.48845905690769426, -0.19999999999999996, 0.90000000000000002, 
4159           0.52359877559829882 },
4160   { 0.62407720017324986, -0.19999999999999996, 0.90000000000000002, 
4161           0.69813170079773179 },
4162   { 0.74578146525124289, -0.19999999999999996, 0.90000000000000002, 
4163           0.87266462599716477 },
4164   { 0.85621583540073076, -0.19999999999999996, 0.90000000000000002, 
4165           1.0471975511965976 },
4166   { 0.95837725988001199, -0.19999999999999996, 0.90000000000000002, 
4167           1.2217304763960306 },
4168   { 1.0551821412633928, -0.19999999999999996, 0.90000000000000002, 
4169           1.3962634015954636 },
4170   { 1.1493679916141863, -0.19999999999999996, 0.90000000000000002, 
4171           1.5707963267948966 },
4172 };
4173
4174 // Test function for k=-0.19999999999999996, nu=0.90000000000000002.
4175 template <typename Tp>
4176 void test080()
4177 {
4178   const Tp eps = std::numeric_limits<Tp>::epsilon();
4179   Tp max_abs_diff = -Tp(1);
4180   Tp max_abs_frac = -Tp(1);
4181   unsigned int num_datum = sizeof(data080)
4182                          / sizeof(testcase_ellint_3<double>);
4183   for (unsigned int i = 0; i < num_datum; ++i)
4184     {
4185       const Tp f = std::tr1::ellint_3(Tp(data080[i].k), Tp(data080[i].nu),
4186                    Tp(data080[i].phi));
4187       const Tp f0 = data080[i].f0;
4188       const Tp diff = f - f0;
4189       if (std::abs(diff) > max_abs_diff)
4190         max_abs_diff = std::abs(diff);
4191       if (std::abs(f0) > Tp(10) * eps
4192        && std::abs(f) > Tp(10) * eps)
4193         {
4194           const Tp frac = diff / f0;
4195           if (std::abs(frac) > max_abs_frac)
4196             max_abs_frac = std::abs(frac);
4197         }
4198     }
4199   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4200 }
4201
4202 // Test data for k=-0.099999999999999978, nu=0.0000000000000000.
4203 testcase_ellint_3<double> data081[] = {
4204   { -0.0000000000000000, -0.099999999999999978, 0.0000000000000000, 
4205           0.0000000000000000 },
4206   { 0.17454173353063665, -0.099999999999999978, 0.0000000000000000, 
4207           0.17453292519943295 },
4208   { 0.34913506721468085, -0.099999999999999978, 0.0000000000000000, 
4209           0.34906585039886590 },
4210   { 0.52382550016538953, -0.099999999999999978, 0.0000000000000000, 
4211           0.52359877559829882 },
4212   { 0.69864700854177031, -0.099999999999999978, 0.0000000000000000, 
4213           0.69813170079773179 },
4214   { 0.87361792586964870, -0.099999999999999978, 0.0000000000000000, 
4215           0.87266462599716477 },
4216   { 1.0487386319621685, -0.099999999999999978, 0.0000000000000000, 
4217           1.0471975511965976 },
4218   { 1.2239913752078757, -0.099999999999999978, 0.0000000000000000, 
4219           1.2217304763960306 },
4220   { 1.3993423113684049, -0.099999999999999978, 0.0000000000000000, 
4221           1.3962634015954636 },
4222   { 1.5747455615173562, -0.099999999999999978, 0.0000000000000000, 
4223           1.5707963267948966 },
4224 };
4225
4226 // Test function for k=-0.099999999999999978, nu=0.0000000000000000.
4227 template <typename Tp>
4228 void test081()
4229 {
4230   const Tp eps = std::numeric_limits<Tp>::epsilon();
4231   Tp max_abs_diff = -Tp(1);
4232   Tp max_abs_frac = -Tp(1);
4233   unsigned int num_datum = sizeof(data081)
4234                          / sizeof(testcase_ellint_3<double>);
4235   for (unsigned int i = 0; i < num_datum; ++i)
4236     {
4237       const Tp f = std::tr1::ellint_3(Tp(data081[i].k), Tp(data081[i].nu),
4238                    Tp(data081[i].phi));
4239       const Tp f0 = data081[i].f0;
4240       const Tp diff = f - f0;
4241       if (std::abs(diff) > max_abs_diff)
4242         max_abs_diff = std::abs(diff);
4243       if (std::abs(f0) > Tp(10) * eps
4244        && std::abs(f) > Tp(10) * eps)
4245         {
4246           const Tp frac = diff / f0;
4247           if (std::abs(frac) > max_abs_frac)
4248             max_abs_frac = std::abs(frac);
4249         }
4250     }
4251   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4252 }
4253
4254 // Test data for k=-0.099999999999999978, nu=0.10000000000000001.
4255 testcase_ellint_3<double> data082[] = {
4256   { -0.0000000000000000, -0.099999999999999978, 0.10000000000000001, 
4257           0.0000000000000000 },
4258   { 0.17436589347616618, -0.099999999999999978, 0.10000000000000001, 
4259           0.17453292519943295 },
4260   { 0.34776067871237354, -0.099999999999999978, 0.10000000000000001, 
4261           0.34906585039886590 },
4262   { 0.51936064354727807, -0.099999999999999978, 0.10000000000000001, 
4263           0.52359877559829882 },
4264   { 0.68860303749364360, -0.099999999999999978, 0.10000000000000001, 
4265           0.69813170079773179 },
4266   { 0.85524561882332051, -0.099999999999999978, 0.10000000000000001, 
4267           0.87266462599716477 },
4268   { 1.0193708301908337, -0.099999999999999978, 0.10000000000000001, 
4269           1.0471975511965976 },
4270   { 1.1813474067123044, -0.099999999999999978, 0.10000000000000001, 
4271           1.2217304763960306 },
4272   { 1.3417670770424983, -0.099999999999999978, 0.10000000000000001, 
4273           1.3962634015954636 },
4274   { 1.5013711111199950, -0.099999999999999978, 0.10000000000000001, 
4275           1.5707963267948966 },
4276 };
4277
4278 // Test function for k=-0.099999999999999978, nu=0.10000000000000001.
4279 template <typename Tp>
4280 void test082()
4281 {
4282   const Tp eps = std::numeric_limits<Tp>::epsilon();
4283   Tp max_abs_diff = -Tp(1);
4284   Tp max_abs_frac = -Tp(1);
4285   unsigned int num_datum = sizeof(data082)
4286                          / sizeof(testcase_ellint_3<double>);
4287   for (unsigned int i = 0; i < num_datum; ++i)
4288     {
4289       const Tp f = std::tr1::ellint_3(Tp(data082[i].k), Tp(data082[i].nu),
4290                    Tp(data082[i].phi));
4291       const Tp f0 = data082[i].f0;
4292       const Tp diff = f - f0;
4293       if (std::abs(diff) > max_abs_diff)
4294         max_abs_diff = std::abs(diff);
4295       if (std::abs(f0) > Tp(10) * eps
4296        && std::abs(f) > Tp(10) * eps)
4297         {
4298           const Tp frac = diff / f0;
4299           if (std::abs(frac) > max_abs_frac)
4300             max_abs_frac = std::abs(frac);
4301         }
4302     }
4303   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4304 }
4305
4306 // Test data for k=-0.099999999999999978, nu=0.20000000000000001.
4307 testcase_ellint_3<double> data083[] = {
4308   { -0.0000000000000000, -0.099999999999999978, 0.20000000000000001, 
4309           0.0000000000000000 },
4310   { 0.17419068786141345, -0.099999999999999978, 0.20000000000000001, 
4311           0.17453292519943295 },
4312   { 0.34640537686230127, -0.099999999999999978, 0.20000000000000001, 
4313           0.34906585039886590 },
4314   { 0.51502689171753957, -0.099999999999999978, 0.20000000000000001, 
4315           0.52359877559829882 },
4316   { 0.67904147863672726, -0.099999999999999978, 0.20000000000000001, 
4317           0.69813170079773179 },
4318   { 0.83811885126105179, -0.099999999999999978, 0.20000000000000001, 
4319           0.87266462599716477 },
4320   { 0.99255278555742810, -0.099999999999999978, 0.20000000000000001, 
4321           1.0471975511965976 },
4322   { 1.1431260546194930, -0.099999999999999978, 0.20000000000000001, 
4323           1.2217304763960306 },
4324   { 1.2909589656532101, -0.099999999999999978, 0.20000000000000001, 
4325           1.3962634015954636 },
4326   { 1.4373749386463430, -0.099999999999999978, 0.20000000000000001, 
4327           1.5707963267948966 },
4328 };
4329
4330 // Test function for k=-0.099999999999999978, nu=0.20000000000000001.
4331 template <typename Tp>
4332 void test083()
4333 {
4334   const Tp eps = std::numeric_limits<Tp>::epsilon();
4335   Tp max_abs_diff = -Tp(1);
4336   Tp max_abs_frac = -Tp(1);
4337   unsigned int num_datum = sizeof(data083)
4338                          / sizeof(testcase_ellint_3<double>);
4339   for (unsigned int i = 0; i < num_datum; ++i)
4340     {
4341       const Tp f = std::tr1::ellint_3(Tp(data083[i].k), Tp(data083[i].nu),
4342                    Tp(data083[i].phi));
4343       const Tp f0 = data083[i].f0;
4344       const Tp diff = f - f0;
4345       if (std::abs(diff) > max_abs_diff)
4346         max_abs_diff = std::abs(diff);
4347       if (std::abs(f0) > Tp(10) * eps
4348        && std::abs(f) > Tp(10) * eps)
4349         {
4350           const Tp frac = diff / f0;
4351           if (std::abs(frac) > max_abs_frac)
4352             max_abs_frac = std::abs(frac);
4353         }
4354     }
4355   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4356 }
4357
4358 // Test data for k=-0.099999999999999978, nu=0.29999999999999999.
4359 testcase_ellint_3<double> data084[] = {
4360   { -0.0000000000000000, -0.099999999999999978, 0.29999999999999999, 
4361           0.0000000000000000 },
4362   { 0.17401611261390110, -0.099999999999999978, 0.29999999999999999, 
4363           0.17453292519943295 },
4364   { 0.34506869507511767, -0.099999999999999978, 0.29999999999999999, 
4365           0.34906585039886590 },
4366   { 0.51081757604259870, -0.099999999999999978, 0.29999999999999999, 
4367           0.52359877559829882 },
4368   { 0.66992297597712303, -0.099999999999999978, 0.29999999999999999, 
4369           0.69813170079773179 },
4370   { 0.82209722856174228, -0.099999999999999978, 0.29999999999999999, 
4371           0.87266462599716477 },
4372   { 0.96792430487669612, -0.099999999999999978, 0.29999999999999999, 
4373           1.0471975511965976 },
4374   { 1.1085964108954092, -0.099999999999999978, 0.29999999999999999, 
4375           1.2217304763960306 },
4376   { 1.2456748370836999, -0.099999999999999978, 0.29999999999999999, 
4377           1.3962634015954636 },
4378   { 1.3809159606704959, -0.099999999999999978, 0.29999999999999999, 
4379           1.5707963267948966 },
4380 };
4381
4382 // Test function for k=-0.099999999999999978, nu=0.29999999999999999.
4383 template <typename Tp>
4384 void test084()
4385 {
4386   const Tp eps = std::numeric_limits<Tp>::epsilon();
4387   Tp max_abs_diff = -Tp(1);
4388   Tp max_abs_frac = -Tp(1);
4389   unsigned int num_datum = sizeof(data084)
4390                          / sizeof(testcase_ellint_3<double>);
4391   for (unsigned int i = 0; i < num_datum; ++i)
4392     {
4393       const Tp f = std::tr1::ellint_3(Tp(data084[i].k), Tp(data084[i].nu),
4394                    Tp(data084[i].phi));
4395       const Tp f0 = data084[i].f0;
4396       const Tp diff = f - f0;
4397       if (std::abs(diff) > max_abs_diff)
4398         max_abs_diff = std::abs(diff);
4399       if (std::abs(f0) > Tp(10) * eps
4400        && std::abs(f) > Tp(10) * eps)
4401         {
4402           const Tp frac = diff / f0;
4403           if (std::abs(frac) > max_abs_frac)
4404             max_abs_frac = std::abs(frac);
4405         }
4406     }
4407   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4408 }
4409
4410 // Test data for k=-0.099999999999999978, nu=0.40000000000000002.
4411 testcase_ellint_3<double> data085[] = {
4412   { -0.0000000000000000, -0.099999999999999978, 0.40000000000000002, 
4413           0.0000000000000000 },
4414   { 0.17384216369897937, -0.099999999999999978, 0.40000000000000002, 
4415           0.17453292519943295 },
4416   { 0.34375018311376782, -0.099999999999999978, 0.40000000000000002, 
4417           0.34906585039886590 },
4418   { 0.50672650758380455, -0.099999999999999978, 0.40000000000000002, 
4419           0.52359877559829882 },
4420   { 0.66121264213337616, -0.099999999999999978, 0.40000000000000002, 
4421           0.69813170079773179 },
4422   { 0.80706202005774441, -0.099999999999999978, 0.40000000000000002, 
4423           0.87266462599716477 },
4424   { 0.94519376138245892, -0.099999999999999978, 0.40000000000000002, 
4425           1.0471975511965976 },
4426   { 1.0771880300759584, -0.099999999999999978, 0.40000000000000002, 
4427           1.2217304763960306 },
4428   { 1.2049711557188272, -0.099999999999999978, 0.40000000000000002, 
4429           1.3962634015954636 },
4430   { 1.3306223265207477, -0.099999999999999978, 0.40000000000000002, 
4431           1.5707963267948966 },
4432 };
4433
4434 // Test function for k=-0.099999999999999978, nu=0.40000000000000002.
4435 template <typename Tp>
4436 void test085()
4437 {
4438   const Tp eps = std::numeric_limits<Tp>::epsilon();
4439   Tp max_abs_diff = -Tp(1);
4440   Tp max_abs_frac = -Tp(1);
4441   unsigned int num_datum = sizeof(data085)
4442                          / sizeof(testcase_ellint_3<double>);
4443   for (unsigned int i = 0; i < num_datum; ++i)
4444     {
4445       const Tp f = std::tr1::ellint_3(Tp(data085[i].k), Tp(data085[i].nu),
4446                    Tp(data085[i].phi));
4447       const Tp f0 = data085[i].f0;
4448       const Tp diff = f - f0;
4449       if (std::abs(diff) > max_abs_diff)
4450         max_abs_diff = std::abs(diff);
4451       if (std::abs(f0) > Tp(10) * eps
4452        && std::abs(f) > Tp(10) * eps)
4453         {
4454           const Tp frac = diff / f0;
4455           if (std::abs(frac) > max_abs_frac)
4456             max_abs_frac = std::abs(frac);
4457         }
4458     }
4459   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4460 }
4461
4462 // Test data for k=-0.099999999999999978, nu=0.50000000000000000.
4463 testcase_ellint_3<double> data086[] = {
4464   { -0.0000000000000000, -0.099999999999999978, 0.50000000000000000, 
4465           0.0000000000000000 },
4466   { 0.17366883711936554, -0.099999999999999978, 0.50000000000000000, 
4467           0.17453292519943295 },
4468   { 0.34244940634881876, -0.099999999999999978, 0.50000000000000000, 
4469           0.34906585039886590 },
4470   { 0.50274793281634378, -0.099999999999999978, 0.50000000000000000, 
4471           0.52359877559829882 },
4472   { 0.65287941633275093, -0.099999999999999978, 0.50000000000000000, 
4473           0.69813170079773179 },
4474   { 0.79291198790315398, -0.099999999999999978, 0.50000000000000000, 
4475           0.87266462599716477 },
4476   { 0.92412201537880345, -0.099999999999999978, 0.50000000000000000, 
4477           1.0471975511965976 },
4478   { 1.0484480076799370, -0.099999999999999978, 0.50000000000000000, 
4479           1.2217304763960306 },
4480   { 1.1681168130475206, -0.099999999999999978, 0.50000000000000000, 
4481           1.3962634015954636 },
4482   { 1.2854480708580160, -0.099999999999999978, 0.50000000000000000, 
4483           1.5707963267948966 },
4484 };
4485
4486 // Test function for k=-0.099999999999999978, nu=0.50000000000000000.
4487 template <typename Tp>
4488 void test086()
4489 {
4490   const Tp eps = std::numeric_limits<Tp>::epsilon();
4491   Tp max_abs_diff = -Tp(1);
4492   Tp max_abs_frac = -Tp(1);
4493   unsigned int num_datum = sizeof(data086)
4494                          / sizeof(testcase_ellint_3<double>);
4495   for (unsigned int i = 0; i < num_datum; ++i)
4496     {
4497       const Tp f = std::tr1::ellint_3(Tp(data086[i].k), Tp(data086[i].nu),
4498                    Tp(data086[i].phi));
4499       const Tp f0 = data086[i].f0;
4500       const Tp diff = f - f0;
4501       if (std::abs(diff) > max_abs_diff)
4502         max_abs_diff = std::abs(diff);
4503       if (std::abs(f0) > Tp(10) * eps
4504        && std::abs(f) > Tp(10) * eps)
4505         {
4506           const Tp frac = diff / f0;
4507           if (std::abs(frac) > max_abs_frac)
4508             max_abs_frac = std::abs(frac);
4509         }
4510     }
4511   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4512 }
4513
4514 // Test data for k=-0.099999999999999978, nu=0.59999999999999998.
4515 testcase_ellint_3<double> data087[] = {
4516   { -0.0000000000000000, -0.099999999999999978, 0.59999999999999998, 
4517           0.0000000000000000 },
4518   { 0.17349612891469018, -0.099999999999999978, 0.59999999999999998, 
4519           0.17453292519943295 },
4520   { 0.34116594505539438, -0.099999999999999978, 0.59999999999999998, 
4521           0.34906585039886590 },
4522   { 0.49887649430466685, -0.099999999999999978, 0.59999999999999998, 
4523           0.52359877559829882 },
4524   { 0.64489553282165157, -0.099999999999999978, 0.59999999999999998, 
4525           0.69813170079773179 },
4526   { 0.77956016553782437, -0.099999999999999978, 0.59999999999999998, 
4527           0.87266462599716477 },
4528   { 0.90451074530096309, -0.099999999999999978, 0.59999999999999998, 
4529           1.0471975511965976 },
4530   { 1.0220113666961632, -0.099999999999999978, 0.59999999999999998, 
4531           1.2217304763960306 },
4532   { 1.1345351441065563, -0.099999999999999978, 0.59999999999999998, 
4533           1.3962634015954636 },
4534   { 1.2445798942989255, -0.099999999999999978, 0.59999999999999998, 
4535           1.5707963267948966 },
4536 };
4537
4538 // Test function for k=-0.099999999999999978, nu=0.59999999999999998.
4539 template <typename Tp>
4540 void test087()
4541 {
4542   const Tp eps = std::numeric_limits<Tp>::epsilon();
4543   Tp max_abs_diff = -Tp(1);
4544   Tp max_abs_frac = -Tp(1);
4545   unsigned int num_datum = sizeof(data087)
4546                          / sizeof(testcase_ellint_3<double>);
4547   for (unsigned int i = 0; i < num_datum; ++i)
4548     {
4549       const Tp f = std::tr1::ellint_3(Tp(data087[i].k), Tp(data087[i].nu),
4550                    Tp(data087[i].phi));
4551       const Tp f0 = data087[i].f0;
4552       const Tp diff = f - f0;
4553       if (std::abs(diff) > max_abs_diff)
4554         max_abs_diff = std::abs(diff);
4555       if (std::abs(f0) > Tp(10) * eps
4556        && std::abs(f) > Tp(10) * eps)
4557         {
4558           const Tp frac = diff / f0;
4559           if (std::abs(frac) > max_abs_frac)
4560             max_abs_frac = std::abs(frac);
4561         }
4562     }
4563   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4564 }
4565
4566 // Test data for k=-0.099999999999999978, nu=0.69999999999999996.
4567 testcase_ellint_3<double> data088[] = {
4568   { -0.0000000000000000, -0.099999999999999978, 0.69999999999999996, 
4569           0.0000000000000000 },
4570   { 0.17332403516105052, -0.099999999999999978, 0.69999999999999996, 
4571           0.17453292519943295 },
4572   { 0.33989939374896877, -0.099999999999999978, 0.69999999999999996, 
4573           0.34906585039886590 },
4574   { 0.49510719568614081, -0.099999999999999978, 0.69999999999999996, 
4575           0.52359877559829882 },
4576   { 0.63723607776354974, -0.099999999999999978, 0.69999999999999996, 
4577           0.69813170079773179 },
4578   { 0.76693133887935327, -0.099999999999999978, 0.69999999999999996, 
4579           0.87266462599716477 },
4580   { 0.88619382078823827, -0.099999999999999978, 0.69999999999999996, 
4581           1.0471975511965976 },
4582   { 0.99758012018676490, -0.099999999999999978, 0.69999999999999996, 
4583           1.2217304763960306 },
4584   { 1.1037642270814410, -0.099999999999999978, 0.69999999999999996, 
4585           1.3962634015954636 },
4586   { 1.2073745911083187, -0.099999999999999978, 0.69999999999999996, 
4587           1.5707963267948966 },
4588 };
4589
4590 // Test function for k=-0.099999999999999978, nu=0.69999999999999996.
4591 template <typename Tp>
4592 void test088()
4593 {
4594   const Tp eps = std::numeric_limits<Tp>::epsilon();
4595   Tp max_abs_diff = -Tp(1);
4596   Tp max_abs_frac = -Tp(1);
4597   unsigned int num_datum = sizeof(data088)
4598                          / sizeof(testcase_ellint_3<double>);
4599   for (unsigned int i = 0; i < num_datum; ++i)
4600     {
4601       const Tp f = std::tr1::ellint_3(Tp(data088[i].k), Tp(data088[i].nu),
4602                    Tp(data088[i].phi));
4603       const Tp f0 = data088[i].f0;
4604       const Tp diff = f - f0;
4605       if (std::abs(diff) > max_abs_diff)
4606         max_abs_diff = std::abs(diff);
4607       if (std::abs(f0) > Tp(10) * eps
4608        && std::abs(f) > Tp(10) * eps)
4609         {
4610           const Tp frac = diff / f0;
4611           if (std::abs(frac) > max_abs_frac)
4612             max_abs_frac = std::abs(frac);
4613         }
4614     }
4615   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4616 }
4617
4618 // Test data for k=-0.099999999999999978, nu=0.80000000000000004.
4619 testcase_ellint_3<double> data089[] = {
4620   { -0.0000000000000000, -0.099999999999999978, 0.80000000000000004, 
4621           0.0000000000000000 },
4622   { 0.17315255197057020, -0.099999999999999978, 0.80000000000000004, 
4623           0.17453292519943295 },
4624   { 0.33864936055747985, -0.099999999999999978, 0.80000000000000004, 
4625           0.34906585039886590 },
4626   { 0.49143537041117619, -0.099999999999999978, 0.80000000000000004, 
4627           0.52359877559829882 },
4628   { 0.62987861760047492, -0.099999999999999978, 0.80000000000000004, 
4629           0.69813170079773179 },
4630   { 0.75496005490917517, -0.099999999999999978, 0.80000000000000004, 
4631           0.87266462599716477 },
4632   { 0.86903081862701903, -0.099999999999999978, 0.80000000000000004, 
4633           1.0471975511965976 },
4634   { 0.97490814820725591, -0.099999999999999978, 0.80000000000000004, 
4635           1.2217304763960306 },
4636   { 1.0754290107171083, -0.099999999999999978, 0.80000000000000004, 
4637           1.3962634015954636 },
4638   { 1.1733158866987732, -0.099999999999999978, 0.80000000000000004, 
4639           1.5707963267948966 },
4640 };
4641
4642 // Test function for k=-0.099999999999999978, nu=0.80000000000000004.
4643 template <typename Tp>
4644 void test089()
4645 {
4646   const Tp eps = std::numeric_limits<Tp>::epsilon();
4647   Tp max_abs_diff = -Tp(1);
4648   Tp max_abs_frac = -Tp(1);
4649   unsigned int num_datum = sizeof(data089)
4650                          / sizeof(testcase_ellint_3<double>);
4651   for (unsigned int i = 0; i < num_datum; ++i)
4652     {
4653       const Tp f = std::tr1::ellint_3(Tp(data089[i].k), Tp(data089[i].nu),
4654                    Tp(data089[i].phi));
4655       const Tp f0 = data089[i].f0;
4656       const Tp diff = f - f0;
4657       if (std::abs(diff) > max_abs_diff)
4658         max_abs_diff = std::abs(diff);
4659       if (std::abs(f0) > Tp(10) * eps
4660        && std::abs(f) > Tp(10) * eps)
4661         {
4662           const Tp frac = diff / f0;
4663           if (std::abs(frac) > max_abs_frac)
4664             max_abs_frac = std::abs(frac);
4665         }
4666     }
4667   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4668 }
4669
4670 // Test data for k=-0.099999999999999978, nu=0.90000000000000002.
4671 testcase_ellint_3<double> data090[] = {
4672   { -0.0000000000000000, -0.099999999999999978, 0.90000000000000002, 
4673           0.0000000000000000 },
4674   { 0.17298167549096569, -0.099999999999999978, 0.90000000000000002, 
4675           0.17453292519943295 },
4676   { 0.33741546662741584, -0.099999999999999978, 0.90000000000000002, 
4677           0.34906585039886590 },
4678   { 0.48785665376856879, -0.099999999999999978, 0.90000000000000002, 
4679           0.52359877559829882 },
4680   { 0.62280288554518959, -0.099999999999999978, 0.90000000000000002, 
4681           0.69813170079773179 },
4682   { 0.74358903115455199, -0.099999999999999978, 0.90000000000000002, 
4683           0.87266462599716477 },
4684   { 0.85290207679298358, -0.099999999999999978, 0.90000000000000002, 
4685           1.0471975511965976 },
4686   { 0.95379006645397379, -0.099999999999999978, 0.90000000000000002, 
4687           1.2217304763960306 },
4688   { 1.0492213119872327, -0.099999999999999978, 0.90000000000000002, 
4689           1.3962634015954636 },
4690   { 1.1419839485283374, -0.099999999999999978, 0.90000000000000002, 
4691           1.5707963267948966 },
4692 };
4693
4694 // Test function for k=-0.099999999999999978, nu=0.90000000000000002.
4695 template <typename Tp>
4696 void test090()
4697 {
4698   const Tp eps = std::numeric_limits<Tp>::epsilon();
4699   Tp max_abs_diff = -Tp(1);
4700   Tp max_abs_frac = -Tp(1);
4701   unsigned int num_datum = sizeof(data090)
4702                          / sizeof(testcase_ellint_3<double>);
4703   for (unsigned int i = 0; i < num_datum; ++i)
4704     {
4705       const Tp f = std::tr1::ellint_3(Tp(data090[i].k), Tp(data090[i].nu),
4706                    Tp(data090[i].phi));
4707       const Tp f0 = data090[i].f0;
4708       const Tp diff = f - f0;
4709       if (std::abs(diff) > max_abs_diff)
4710         max_abs_diff = std::abs(diff);
4711       if (std::abs(f0) > Tp(10) * eps
4712        && std::abs(f) > Tp(10) * eps)
4713         {
4714           const Tp frac = diff / f0;
4715           if (std::abs(frac) > max_abs_frac)
4716             max_abs_frac = std::abs(frac);
4717         }
4718     }
4719   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4720 }
4721
4722 // Test data for k=0.0000000000000000, nu=0.0000000000000000.
4723 testcase_ellint_3<double> data091[] = {
4724   { -0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 
4725           0.0000000000000000 },
4726   { 0.17453292519943295, 0.0000000000000000, 0.0000000000000000, 
4727           0.17453292519943295 },
4728   { 0.34906585039886584, 0.0000000000000000, 0.0000000000000000, 
4729           0.34906585039886590 },
4730   { 0.52359877559829882, 0.0000000000000000, 0.0000000000000000, 
4731           0.52359877559829882 },
4732   { 0.69813170079773179, 0.0000000000000000, 0.0000000000000000, 
4733           0.69813170079773179 },
4734   { 0.87266462599716477, 0.0000000000000000, 0.0000000000000000, 
4735           0.87266462599716477 },
4736   { 1.0471975511965976, 0.0000000000000000, 0.0000000000000000, 
4737           1.0471975511965976 },
4738   { 1.2217304763960304, 0.0000000000000000, 0.0000000000000000, 
4739           1.2217304763960306 },
4740   { 1.3962634015954631, 0.0000000000000000, 0.0000000000000000, 
4741           1.3962634015954636 },
4742   { 1.5707963267948966, 0.0000000000000000, 0.0000000000000000, 
4743           1.5707963267948966 },
4744 };
4745
4746 // Test function for k=0.0000000000000000, nu=0.0000000000000000.
4747 template <typename Tp>
4748 void test091()
4749 {
4750   const Tp eps = std::numeric_limits<Tp>::epsilon();
4751   Tp max_abs_diff = -Tp(1);
4752   Tp max_abs_frac = -Tp(1);
4753   unsigned int num_datum = sizeof(data091)
4754                          / sizeof(testcase_ellint_3<double>);
4755   for (unsigned int i = 0; i < num_datum; ++i)
4756     {
4757       const Tp f = std::tr1::ellint_3(Tp(data091[i].k), Tp(data091[i].nu),
4758                    Tp(data091[i].phi));
4759       const Tp f0 = data091[i].f0;
4760       const Tp diff = f - f0;
4761       if (std::abs(diff) > max_abs_diff)
4762         max_abs_diff = std::abs(diff);
4763       if (std::abs(f0) > Tp(10) * eps
4764        && std::abs(f) > Tp(10) * eps)
4765         {
4766           const Tp frac = diff / f0;
4767           if (std::abs(frac) > max_abs_frac)
4768             max_abs_frac = std::abs(frac);
4769         }
4770     }
4771   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4772 }
4773
4774 // Test data for k=0.0000000000000000, nu=0.10000000000000001.
4775 testcase_ellint_3<double> data092[] = {
4776   { -0.0000000000000000, 0.0000000000000000, 0.10000000000000001, 
4777           0.0000000000000000 },
4778   { 0.17435710107516608, 0.0000000000000000, 0.10000000000000001, 
4779           0.17453292519943295 },
4780   { 0.34769194715329604, 0.0000000000000000, 0.10000000000000001, 
4781           0.34906585039886590 },
4782   { 0.51913731575866118, 0.0000000000000000, 0.10000000000000001, 
4783           0.52359877559829882 },
4784   { 0.68810051897078461, 0.0000000000000000, 0.10000000000000001, 
4785           0.69813170079773179 },
4786   { 0.85432615661706823, 0.0000000000000000, 0.10000000000000001, 
4787           0.87266462599716477 },
4788   { 1.0179006647340796, 0.0000000000000000, 0.10000000000000001, 
4789           1.0471975511965976 },
4790   { 1.1792120640746322, 0.0000000000000000, 0.10000000000000001, 
4791           1.2217304763960306 },
4792   { 1.3388834245070498, 0.0000000000000000, 0.10000000000000001, 
4793           1.3962634015954636 },
4794   { 1.4976955329233277, 0.0000000000000000, 0.10000000000000001, 
4795           1.5707963267948966 },
4796 };
4797
4798 // Test function for k=0.0000000000000000, nu=0.10000000000000001.
4799 template <typename Tp>
4800 void test092()
4801 {
4802   const Tp eps = std::numeric_limits<Tp>::epsilon();
4803   Tp max_abs_diff = -Tp(1);
4804   Tp max_abs_frac = -Tp(1);
4805   unsigned int num_datum = sizeof(data092)
4806                          / sizeof(testcase_ellint_3<double>);
4807   for (unsigned int i = 0; i < num_datum; ++i)
4808     {
4809       const Tp f = std::tr1::ellint_3(Tp(data092[i].k), Tp(data092[i].nu),
4810                    Tp(data092[i].phi));
4811       const Tp f0 = data092[i].f0;
4812       const Tp diff = f - f0;
4813       if (std::abs(diff) > max_abs_diff)
4814         max_abs_diff = std::abs(diff);
4815       if (std::abs(f0) > Tp(10) * eps
4816        && std::abs(f) > Tp(10) * eps)
4817         {
4818           const Tp frac = diff / f0;
4819           if (std::abs(frac) > max_abs_frac)
4820             max_abs_frac = std::abs(frac);
4821         }
4822     }
4823   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4824 }
4825
4826 // Test data for k=0.0000000000000000, nu=0.20000000000000001.
4827 testcase_ellint_3<double> data093[] = {
4828   { -0.0000000000000000, 0.0000000000000000, 0.20000000000000001, 
4829           0.0000000000000000 },
4830   { 0.17418191132226077, 0.0000000000000000, 0.20000000000000001, 
4831           0.17453292519943295 },
4832   { 0.34633712256943405, 0.0000000000000000, 0.20000000000000001, 
4833           0.34906585039886590 },
4834   { 0.51480684302043711, 0.0000000000000000, 0.20000000000000001, 
4835           0.52359877559829882 },
4836   { 0.67855102942481949, 0.0000000000000000, 0.20000000000000001, 
4837           0.69813170079773179 },
4838   { 0.83723056090326253, 0.0000000000000000, 0.20000000000000001, 
4839           0.87266462599716477 },
4840   { 0.99114645269578183, 0.0000000000000000, 0.20000000000000001, 
4841           1.0471975511965976 },
4842   { 1.1411014627915537, 0.0000000000000000, 0.20000000000000001, 
4843           1.2217304763960306 },
4844   { 1.2882448138013969, 0.0000000000000000, 0.20000000000000001, 
4845           1.3962634015954636 },
4846   { 1.4339343023863691, 0.0000000000000000, 0.20000000000000001, 
4847           1.5707963267948966 },
4848 };
4849
4850 // Test function for k=0.0000000000000000, nu=0.20000000000000001.
4851 template <typename Tp>
4852 void test093()
4853 {
4854   const Tp eps = std::numeric_limits<Tp>::epsilon();
4855   Tp max_abs_diff = -Tp(1);
4856   Tp max_abs_frac = -Tp(1);
4857   unsigned int num_datum = sizeof(data093)
4858                          / sizeof(testcase_ellint_3<double>);
4859   for (unsigned int i = 0; i < num_datum; ++i)
4860     {
4861       const Tp f = std::tr1::ellint_3(Tp(data093[i].k), Tp(data093[i].nu),
4862                    Tp(data093[i].phi));
4863       const Tp f0 = data093[i].f0;
4864       const Tp diff = f - f0;
4865       if (std::abs(diff) > max_abs_diff)
4866         max_abs_diff = std::abs(diff);
4867       if (std::abs(f0) > Tp(10) * eps
4868        && std::abs(f) > Tp(10) * eps)
4869         {
4870           const Tp frac = diff / f0;
4871           if (std::abs(frac) > max_abs_frac)
4872             max_abs_frac = std::abs(frac);
4873         }
4874     }
4875   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4876 }
4877
4878 // Test data for k=0.0000000000000000, nu=0.29999999999999999.
4879 testcase_ellint_3<double> data094[] = {
4880   { -0.0000000000000000, 0.0000000000000000, 0.29999999999999999, 
4881           0.0000000000000000 },
4882   { 0.17400735186871727, 0.0000000000000000, 0.29999999999999999, 
4883           0.17453292519943295 },
4884   { 0.34500091027020219, 0.0000000000000000, 0.29999999999999999, 
4885           0.34906585039886590 },
4886   { 0.51060069523901541, 0.0000000000000000, 0.29999999999999999, 
4887           0.52359877559829882 },
4888   { 0.66944393961375459, 0.0000000000000000, 0.29999999999999999, 
4889           0.69813170079773179 },
4890   { 0.82123776744538157, 0.0000000000000000, 0.29999999999999999, 
4891           0.87266462599716477 },
4892   { 0.96657579245516523, 0.0000000000000000, 0.29999999999999999, 
4893           1.0471975511965976 },
4894   { 1.1066703663542414, 0.0000000000000000, 0.29999999999999999, 
4895           1.2217304763960306 },
4896   { 1.2431094251944901, 0.0000000000000000, 0.29999999999999999, 
4897           1.3962634015954636 },
4898   { 1.3776795151134889, 0.0000000000000000, 0.29999999999999999, 
4899           1.5707963267948966 },
4900 };
4901
4902 // Test function for k=0.0000000000000000, nu=0.29999999999999999.
4903 template <typename Tp>
4904 void test094()
4905 {
4906   const Tp eps = std::numeric_limits<Tp>::epsilon();
4907   Tp max_abs_diff = -Tp(1);
4908   Tp max_abs_frac = -Tp(1);
4909   unsigned int num_datum = sizeof(data094)
4910                          / sizeof(testcase_ellint_3<double>);
4911   for (unsigned int i = 0; i < num_datum; ++i)
4912     {
4913       const Tp f = std::tr1::ellint_3(Tp(data094[i].k), Tp(data094[i].nu),
4914                    Tp(data094[i].phi));
4915       const Tp f0 = data094[i].f0;
4916       const Tp diff = f - f0;
4917       if (std::abs(diff) > max_abs_diff)
4918         max_abs_diff = std::abs(diff);
4919       if (std::abs(f0) > Tp(10) * eps
4920        && std::abs(f) > Tp(10) * eps)
4921         {
4922           const Tp frac = diff / f0;
4923           if (std::abs(frac) > max_abs_frac)
4924             max_abs_frac = std::abs(frac);
4925         }
4926     }
4927   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4928 }
4929
4930 // Test data for k=0.0000000000000000, nu=0.40000000000000002.
4931 testcase_ellint_3<double> data095[] = {
4932   { -0.0000000000000000, 0.0000000000000000, 0.40000000000000002, 
4933           0.0000000000000000 },
4934   { 0.17383341868035865, 0.0000000000000000, 0.40000000000000002, 
4935           0.17453292519943295 },
4936   { 0.34368286022299821, 0.0000000000000000, 0.40000000000000002, 
4937           0.34906585039886590 },
4938   { 0.50651268947499406, 0.0000000000000000, 0.40000000000000002, 
4939           0.52359877559829882 },
4940   { 0.66074441806097550, 0.0000000000000000, 0.40000000000000002, 
4941           0.69813170079773179 },
4942   { 0.80622931670113485, 0.0000000000000000, 0.40000000000000002, 
4943           0.87266462599716477 },
4944   { 0.94389791565435233, 0.0000000000000000, 0.40000000000000002, 
4945           1.0471975511965976 },
4946   { 1.0753503387899728, 0.0000000000000000, 0.40000000000000002, 
4947           1.2217304763960306 },
4948   { 1.2025374759127518, 0.0000000000000000, 0.40000000000000002, 
4949           1.3962634015954636 },
4950   { 1.3275651989026322, 0.0000000000000000, 0.40000000000000002, 
4951           1.5707963267948966 },
4952 };
4953
4954 // Test function for k=0.0000000000000000, nu=0.40000000000000002.
4955 template <typename Tp>
4956 void test095()
4957 {
4958   const Tp eps = std::numeric_limits<Tp>::epsilon();
4959   Tp max_abs_diff = -Tp(1);
4960   Tp max_abs_frac = -Tp(1);
4961   unsigned int num_datum = sizeof(data095)
4962                          / sizeof(testcase_ellint_3<double>);
4963   for (unsigned int i = 0; i < num_datum; ++i)
4964     {
4965       const Tp f = std::tr1::ellint_3(Tp(data095[i].k), Tp(data095[i].nu),
4966                    Tp(data095[i].phi));
4967       const Tp f0 = data095[i].f0;
4968       const Tp diff = f - f0;
4969       if (std::abs(diff) > max_abs_diff)
4970         max_abs_diff = std::abs(diff);
4971       if (std::abs(f0) > Tp(10) * eps
4972        && std::abs(f) > Tp(10) * eps)
4973         {
4974           const Tp frac = diff / f0;
4975           if (std::abs(frac) > max_abs_frac)
4976             max_abs_frac = std::abs(frac);
4977         }
4978     }
4979   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4980 }
4981
4982 // Test data for k=0.0000000000000000, nu=0.50000000000000000.
4983 testcase_ellint_3<double> data096[] = {
4984   { -0.0000000000000000, 0.0000000000000000, 0.50000000000000000, 
4985           0.0000000000000000 },
4986   { 0.17366010776037047, 0.0000000000000000, 0.50000000000000000, 
4987           0.17453292519943295 },
4988   { 0.34238253799539309, 0.0000000000000000, 0.50000000000000000, 
4989           0.34906585039886590 },
4990   { 0.50253707775976408, 0.0000000000000000, 0.50000000000000000, 
4991           0.52359877559829882 },
4992   { 0.65242145347295766, 0.0000000000000000, 0.50000000000000000, 
4993           0.69813170079773179 },
4994   { 0.79210420018698058, 0.0000000000000000, 0.50000000000000000, 
4995           0.87266462599716477 },
4996   { 0.92287437995632193, 0.0000000000000000, 0.50000000000000000, 
4997           1.0471975511965976 },
4998   { 1.0466900550798661, 0.0000000000000000, 0.50000000000000000, 
4999           1.2217304763960306 },
5000   { 1.1658007366618623, 0.0000000000000000, 0.50000000000000000, 
5001           1.3962634015954636 },
5002   { 1.2825498301618641, 0.0000000000000000, 0.50000000000000000, 
5003           1.5707963267948966 },
5004 };
5005
5006 // Test function for k=0.0000000000000000, nu=0.50000000000000000.
5007 template <typename Tp>
5008 void test096()
5009 {
5010   const Tp eps = std::numeric_limits<Tp>::epsilon();
5011   Tp max_abs_diff = -Tp(1);
5012   Tp max_abs_frac = -Tp(1);
5013   unsigned int num_datum = sizeof(data096)
5014                          / sizeof(testcase_ellint_3<double>);
5015   for (unsigned int i = 0; i < num_datum; ++i)
5016     {
5017       const Tp f = std::tr1::ellint_3(Tp(data096[i].k), Tp(data096[i].nu),
5018                    Tp(data096[i].phi));
5019       const Tp f0 = data096[i].f0;
5020       const Tp diff = f - f0;
5021       if (std::abs(diff) > max_abs_diff)
5022         max_abs_diff = std::abs(diff);
5023       if (std::abs(f0) > Tp(10) * eps
5024        && std::abs(f) > Tp(10) * eps)
5025         {
5026           const Tp frac = diff / f0;
5027           if (std::abs(frac) > max_abs_frac)
5028             max_abs_frac = std::abs(frac);
5029         }
5030     }
5031   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5032 }
5033
5034 // Test data for k=0.0000000000000000, nu=0.59999999999999998.
5035 testcase_ellint_3<double> data097[] = {
5036   { -0.0000000000000000, 0.0000000000000000, 0.59999999999999998, 
5037           0.0000000000000000 },
5038   { 0.17348741514884702, 0.0000000000000000, 0.59999999999999998, 
5039           0.17453292519943295 },
5040   { 0.34109952405241289, 0.0000000000000000, 0.59999999999999998, 
5041           0.34906585039886590 },
5042   { 0.49866850781226296, 0.0000000000000000, 0.59999999999999998, 
5043           0.52359877559829882 },
5044   { 0.64444732407062510, 0.0000000000000000, 0.59999999999999998, 
5045           0.69813170079773179 },
5046   { 0.77877564686544720, 0.0000000000000000, 0.59999999999999998, 
5047           0.87266462599716477 },
5048   { 0.90330743691883497, 0.0000000000000000, 0.59999999999999998, 
5049           1.0471975511965976 },
5050   { 1.0203257987604104, 0.0000000000000000, 0.59999999999999998, 
5051           1.2217304763960306 },
5052   { 1.1323247918768631, 0.0000000000000000, 0.59999999999999998, 
5053           1.3962634015954636 },
5054   { 1.2418235332245127, 0.0000000000000000, 0.59999999999999998, 
5055           1.5707963267948966 },
5056 };
5057
5058 // Test function for k=0.0000000000000000, nu=0.59999999999999998.
5059 template <typename Tp>
5060 void test097()
5061 {
5062   const Tp eps = std::numeric_limits<Tp>::epsilon();
5063   Tp max_abs_diff = -Tp(1);
5064   Tp max_abs_frac = -Tp(1);
5065   unsigned int num_datum = sizeof(data097)
5066                          / sizeof(testcase_ellint_3<double>);
5067   for (unsigned int i = 0; i < num_datum; ++i)
5068     {
5069       const Tp f = std::tr1::ellint_3(Tp(data097[i].k), Tp(data097[i].nu),
5070                    Tp(data097[i].phi));
5071       const Tp f0 = data097[i].f0;
5072       const Tp diff = f - f0;
5073       if (std::abs(diff) > max_abs_diff)
5074         max_abs_diff = std::abs(diff);
5075       if (std::abs(f0) > Tp(10) * eps
5076        && std::abs(f) > Tp(10) * eps)
5077         {
5078           const Tp frac = diff / f0;
5079           if (std::abs(frac) > max_abs_frac)
5080             max_abs_frac = std::abs(frac);
5081         }
5082     }
5083   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5084 }
5085
5086 // Test data for k=0.0000000000000000, nu=0.69999999999999996.
5087 testcase_ellint_3<double> data098[] = {
5088   { -0.0000000000000000, 0.0000000000000000, 0.69999999999999996, 
5089           0.0000000000000000 },
5090   { 0.17331533692234477, 0.0000000000000000, 0.69999999999999996, 
5091           0.17453292519943295 },
5092   { 0.33983341309265941, 0.0000000000000000, 0.69999999999999996, 
5093           0.34906585039886590 },
5094   { 0.49490198805931990, 0.0000000000000000, 0.69999999999999996, 
5095           0.52359877559829882 },
5096   { 0.63679715525145308, 0.0000000000000000, 0.69999999999999996, 
5097           0.69813170079773179 },
5098   { 0.76616861049481944, 0.0000000000000000, 0.69999999999999996, 
5099           0.87266462599716477 },
5100   { 0.88503143209004220, 0.0000000000000000, 0.69999999999999996, 
5101           1.0471975511965976 },
5102   { 0.99596060249112173, 0.0000000000000000, 0.69999999999999996, 
5103           1.2217304763960306 },
5104   { 1.1016495050260424, 0.0000000000000000, 0.69999999999999996, 
5105           1.3962634015954636 },
5106   { 1.2047457872617382, 0.0000000000000000, 0.69999999999999996, 
5107           1.5707963267948966 },
5108 };
5109
5110 // Test function for k=0.0000000000000000, nu=0.69999999999999996.
5111 template <typename Tp>
5112 void test098()
5113 {
5114   const Tp eps = std::numeric_limits<Tp>::epsilon();
5115   Tp max_abs_diff = -Tp(1);
5116   Tp max_abs_frac = -Tp(1);
5117   unsigned int num_datum = sizeof(data098)
5118                          / sizeof(testcase_ellint_3<double>);
5119   for (unsigned int i = 0; i < num_datum; ++i)
5120     {
5121       const Tp f = std::tr1::ellint_3(Tp(data098[i].k), Tp(data098[i].nu),
5122                    Tp(data098[i].phi));
5123       const Tp f0 = data098[i].f0;
5124       const Tp diff = f - f0;
5125       if (std::abs(diff) > max_abs_diff)
5126         max_abs_diff = std::abs(diff);
5127       if (std::abs(f0) > Tp(10) * eps
5128        && std::abs(f) > Tp(10) * eps)
5129         {
5130           const Tp frac = diff / f0;
5131           if (std::abs(frac) > max_abs_frac)
5132             max_abs_frac = std::abs(frac);
5133         }
5134     }
5135   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5136 }
5137
5138 // Test data for k=0.0000000000000000, nu=0.80000000000000004.
5139 testcase_ellint_3<double> data099[] = {
5140   { -0.0000000000000000, 0.0000000000000000, 0.80000000000000004, 
5141           0.0000000000000000 },
5142   { 0.17314386919344213, 0.0000000000000000, 0.80000000000000004, 
5143           0.17453292519943295 },
5144   { 0.33858381342073240, 0.0000000000000000, 0.80000000000000004, 
5145           0.34906585039886590 },
5146   { 0.49123285640844738, 0.0000000000000000, 0.80000000000000004, 
5147           0.52359877559829882 },
5148   { 0.62944854858904520, 0.0000000000000000, 0.80000000000000004, 
5149           0.69813170079773179 },
5150   { 0.75421778305499343, 0.0000000000000000, 0.80000000000000004, 
5151           0.87266462599716477 },
5152   { 0.86790634112156639, 0.0000000000000000, 0.80000000000000004, 
5153           1.0471975511965976 },
5154   { 0.97334918087427558, 0.0000000000000000, 0.80000000000000004, 
5155           1.2217304763960306 },
5156   { 1.0734012615283985, 0.0000000000000000, 0.80000000000000004, 
5157           1.3962634015954636 },
5158   { 1.1708024551734544, 0.0000000000000000, 0.80000000000000004, 
5159           1.5707963267948966 },
5160 };
5161
5162 // Test function for k=0.0000000000000000, nu=0.80000000000000004.
5163 template <typename Tp>
5164 void test099()
5165 {
5166   const Tp eps = std::numeric_limits<Tp>::epsilon();
5167   Tp max_abs_diff = -Tp(1);
5168   Tp max_abs_frac = -Tp(1);
5169   unsigned int num_datum = sizeof(data099)
5170                          / sizeof(testcase_ellint_3<double>);
5171   for (unsigned int i = 0; i < num_datum; ++i)
5172     {
5173       const Tp f = std::tr1::ellint_3(Tp(data099[i].k), Tp(data099[i].nu),
5174                    Tp(data099[i].phi));
5175       const Tp f0 = data099[i].f0;
5176       const Tp diff = f - f0;
5177       if (std::abs(diff) > max_abs_diff)
5178         max_abs_diff = std::abs(diff);
5179       if (std::abs(f0) > Tp(10) * eps
5180        && std::abs(f) > Tp(10) * eps)
5181         {
5182           const Tp frac = diff / f0;
5183           if (std::abs(frac) > max_abs_frac)
5184             max_abs_frac = std::abs(frac);
5185         }
5186     }
5187   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5188 }
5189
5190 // Test data for k=0.0000000000000000, nu=0.90000000000000002.
5191 testcase_ellint_3<double> data100[] = {
5192   { -0.0000000000000000, 0.0000000000000000, 0.90000000000000002, 
5193           0.0000000000000000 },
5194   { 0.17297300811030600, 0.0000000000000000, 0.90000000000000002, 
5195           0.17453292519943295 },
5196   { 0.33735034635360817, 0.0000000000000000, 0.90000000000000002, 
5197           0.34906585039886590 },
5198   { 0.48765675230233141, 0.0000000000000000, 0.90000000000000002, 
5199           0.52359877559829882 },
5200   { 0.62238126886123568, 0.0000000000000000, 0.90000000000000002, 
5201           0.69813170079773179 },
5202   { 0.74286600807269243, 0.0000000000000000, 0.90000000000000002, 
5203           0.87266462599716477 },
5204   { 0.85181283909264971, 0.0000000000000000, 0.90000000000000002, 
5205           1.0471975511965976 },
5206   { 0.95228683995371122, 0.0000000000000000, 0.90000000000000002, 
5207           1.2217304763960306 },
5208   { 1.0472730487412552, 0.0000000000000000, 0.90000000000000002, 
5209           1.3962634015954636 },
5210   { 1.1395754288497419, 0.0000000000000000, 0.90000000000000002, 
5211           1.5707963267948966 },
5212 };
5213
5214 // Test function for k=0.0000000000000000, nu=0.90000000000000002.
5215 template <typename Tp>
5216 void test100()
5217 {
5218   const Tp eps = std::numeric_limits<Tp>::epsilon();
5219   Tp max_abs_diff = -Tp(1);
5220   Tp max_abs_frac = -Tp(1);
5221   unsigned int num_datum = sizeof(data100)
5222                          / sizeof(testcase_ellint_3<double>);
5223   for (unsigned int i = 0; i < num_datum; ++i)
5224     {
5225       const Tp f = std::tr1::ellint_3(Tp(data100[i].k), Tp(data100[i].nu),
5226                    Tp(data100[i].phi));
5227       const Tp f0 = data100[i].f0;
5228       const Tp diff = f - f0;
5229       if (std::abs(diff) > max_abs_diff)
5230         max_abs_diff = std::abs(diff);
5231       if (std::abs(f0) > Tp(10) * eps
5232        && std::abs(f) > Tp(10) * eps)
5233         {
5234           const Tp frac = diff / f0;
5235           if (std::abs(frac) > max_abs_frac)
5236             max_abs_frac = std::abs(frac);
5237         }
5238     }
5239   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5240 }
5241
5242 // Test data for k=0.10000000000000009, nu=0.0000000000000000.
5243 testcase_ellint_3<double> data101[] = {
5244   { -0.0000000000000000, 0.10000000000000009, 0.0000000000000000, 
5245           0.0000000000000000 },
5246   { 0.17454173353063665, 0.10000000000000009, 0.0000000000000000, 
5247           0.17453292519943295 },
5248   { 0.34913506721468085, 0.10000000000000009, 0.0000000000000000, 
5249           0.34906585039886590 },
5250   { 0.52382550016538953, 0.10000000000000009, 0.0000000000000000, 
5251           0.52359877559829882 },
5252   { 0.69864700854177031, 0.10000000000000009, 0.0000000000000000, 
5253           0.69813170079773179 },
5254   { 0.87361792586964870, 0.10000000000000009, 0.0000000000000000, 
5255           0.87266462599716477 },
5256   { 1.0487386319621685, 0.10000000000000009, 0.0000000000000000, 
5257           1.0471975511965976 },
5258   { 1.2239913752078757, 0.10000000000000009, 0.0000000000000000, 
5259           1.2217304763960306 },
5260   { 1.3993423113684049, 0.10000000000000009, 0.0000000000000000, 
5261           1.3962634015954636 },
5262   { 1.5747455615173562, 0.10000000000000009, 0.0000000000000000, 
5263           1.5707963267948966 },
5264 };
5265
5266 // Test function for k=0.10000000000000009, nu=0.0000000000000000.
5267 template <typename Tp>
5268 void test101()
5269 {
5270   const Tp eps = std::numeric_limits<Tp>::epsilon();
5271   Tp max_abs_diff = -Tp(1);
5272   Tp max_abs_frac = -Tp(1);
5273   unsigned int num_datum = sizeof(data101)
5274                          / sizeof(testcase_ellint_3<double>);
5275   for (unsigned int i = 0; i < num_datum; ++i)
5276     {
5277       const Tp f = std::tr1::ellint_3(Tp(data101[i].k), Tp(data101[i].nu),
5278                    Tp(data101[i].phi));
5279       const Tp f0 = data101[i].f0;
5280       const Tp diff = f - f0;
5281       if (std::abs(diff) > max_abs_diff)
5282         max_abs_diff = std::abs(diff);
5283       if (std::abs(f0) > Tp(10) * eps
5284        && std::abs(f) > Tp(10) * eps)
5285         {
5286           const Tp frac = diff / f0;
5287           if (std::abs(frac) > max_abs_frac)
5288             max_abs_frac = std::abs(frac);
5289         }
5290     }
5291   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5292 }
5293
5294 // Test data for k=0.10000000000000009, nu=0.10000000000000001.
5295 testcase_ellint_3<double> data102[] = {
5296   { -0.0000000000000000, 0.10000000000000009, 0.10000000000000001, 
5297           0.0000000000000000 },
5298   { 0.17436589347616618, 0.10000000000000009, 0.10000000000000001, 
5299           0.17453292519943295 },
5300   { 0.34776067871237354, 0.10000000000000009, 0.10000000000000001, 
5301           0.34906585039886590 },
5302   { 0.51936064354727807, 0.10000000000000009, 0.10000000000000001, 
5303           0.52359877559829882 },
5304   { 0.68860303749364360, 0.10000000000000009, 0.10000000000000001, 
5305           0.69813170079773179 },
5306   { 0.85524561882332051, 0.10000000000000009, 0.10000000000000001, 
5307           0.87266462599716477 },
5308   { 1.0193708301908337, 0.10000000000000009, 0.10000000000000001, 
5309           1.0471975511965976 },
5310   { 1.1813474067123044, 0.10000000000000009, 0.10000000000000001, 
5311           1.2217304763960306 },
5312   { 1.3417670770424983, 0.10000000000000009, 0.10000000000000001, 
5313           1.3962634015954636 },
5314   { 1.5013711111199950, 0.10000000000000009, 0.10000000000000001, 
5315           1.5707963267948966 },
5316 };
5317
5318 // Test function for k=0.10000000000000009, nu=0.10000000000000001.
5319 template <typename Tp>
5320 void test102()
5321 {
5322   const Tp eps = std::numeric_limits<Tp>::epsilon();
5323   Tp max_abs_diff = -Tp(1);
5324   Tp max_abs_frac = -Tp(1);
5325   unsigned int num_datum = sizeof(data102)
5326                          / sizeof(testcase_ellint_3<double>);
5327   for (unsigned int i = 0; i < num_datum; ++i)
5328     {
5329       const Tp f = std::tr1::ellint_3(Tp(data102[i].k), Tp(data102[i].nu),
5330                    Tp(data102[i].phi));
5331       const Tp f0 = data102[i].f0;
5332       const Tp diff = f - f0;
5333       if (std::abs(diff) > max_abs_diff)
5334         max_abs_diff = std::abs(diff);
5335       if (std::abs(f0) > Tp(10) * eps
5336        && std::abs(f) > Tp(10) * eps)
5337         {
5338           const Tp frac = diff / f0;
5339           if (std::abs(frac) > max_abs_frac)
5340             max_abs_frac = std::abs(frac);
5341         }
5342     }
5343   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5344 }
5345
5346 // Test data for k=0.10000000000000009, nu=0.20000000000000001.
5347 testcase_ellint_3<double> data103[] = {
5348   { -0.0000000000000000, 0.10000000000000009, 0.20000000000000001, 
5349           0.0000000000000000 },
5350   { 0.17419068786141345, 0.10000000000000009, 0.20000000000000001, 
5351           0.17453292519943295 },
5352   { 0.34640537686230127, 0.10000000000000009, 0.20000000000000001, 
5353           0.34906585039886590 },
5354   { 0.51502689171753957, 0.10000000000000009, 0.20000000000000001, 
5355           0.52359877559829882 },
5356   { 0.67904147863672726, 0.10000000000000009, 0.20000000000000001, 
5357           0.69813170079773179 },
5358   { 0.83811885126105179, 0.10000000000000009, 0.20000000000000001, 
5359           0.87266462599716477 },
5360   { 0.99255278555742810, 0.10000000000000009, 0.20000000000000001, 
5361           1.0471975511965976 },
5362   { 1.1431260546194930, 0.10000000000000009, 0.20000000000000001, 
5363           1.2217304763960306 },
5364   { 1.2909589656532101, 0.10000000000000009, 0.20000000000000001, 
5365           1.3962634015954636 },
5366   { 1.4373749386463430, 0.10000000000000009, 0.20000000000000001, 
5367           1.5707963267948966 },
5368 };
5369
5370 // Test function for k=0.10000000000000009, nu=0.20000000000000001.
5371 template <typename Tp>
5372 void test103()
5373 {
5374   const Tp eps = std::numeric_limits<Tp>::epsilon();
5375   Tp max_abs_diff = -Tp(1);
5376   Tp max_abs_frac = -Tp(1);
5377   unsigned int num_datum = sizeof(data103)
5378                          / sizeof(testcase_ellint_3<double>);
5379   for (unsigned int i = 0; i < num_datum; ++i)
5380     {
5381       const Tp f = std::tr1::ellint_3(Tp(data103[i].k), Tp(data103[i].nu),
5382                    Tp(data103[i].phi));
5383       const Tp f0 = data103[i].f0;
5384       const Tp diff = f - f0;
5385       if (std::abs(diff) > max_abs_diff)
5386         max_abs_diff = std::abs(diff);
5387       if (std::abs(f0) > Tp(10) * eps
5388        && std::abs(f) > Tp(10) * eps)
5389         {
5390           const Tp frac = diff / f0;
5391           if (std::abs(frac) > max_abs_frac)
5392             max_abs_frac = std::abs(frac);
5393         }
5394     }
5395   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5396 }
5397
5398 // Test data for k=0.10000000000000009, nu=0.29999999999999999.
5399 testcase_ellint_3<double> data104[] = {
5400   { -0.0000000000000000, 0.10000000000000009, 0.29999999999999999, 
5401           0.0000000000000000 },
5402   { 0.17401611261390110, 0.10000000000000009, 0.29999999999999999, 
5403           0.17453292519943295 },
5404   { 0.34506869507511767, 0.10000000000000009, 0.29999999999999999, 
5405           0.34906585039886590 },
5406   { 0.51081757604259870, 0.10000000000000009, 0.29999999999999999, 
5407           0.52359877559829882 },
5408   { 0.66992297597712303, 0.10000000000000009, 0.29999999999999999, 
5409           0.69813170079773179 },
5410   { 0.82209722856174228, 0.10000000000000009, 0.29999999999999999, 
5411           0.87266462599716477 },
5412   { 0.96792430487669612, 0.10000000000000009, 0.29999999999999999, 
5413           1.0471975511965976 },
5414   { 1.1085964108954092, 0.10000000000000009, 0.29999999999999999, 
5415           1.2217304763960306 },
5416   { 1.2456748370836999, 0.10000000000000009, 0.29999999999999999, 
5417           1.3962634015954636 },
5418   { 1.3809159606704959, 0.10000000000000009, 0.29999999999999999, 
5419           1.5707963267948966 },
5420 };
5421
5422 // Test function for k=0.10000000000000009, nu=0.29999999999999999.
5423 template <typename Tp>
5424 void test104()
5425 {
5426   const Tp eps = std::numeric_limits<Tp>::epsilon();
5427   Tp max_abs_diff = -Tp(1);
5428   Tp max_abs_frac = -Tp(1);
5429   unsigned int num_datum = sizeof(data104)
5430                          / sizeof(testcase_ellint_3<double>);
5431   for (unsigned int i = 0; i < num_datum; ++i)
5432     {
5433       const Tp f = std::tr1::ellint_3(Tp(data104[i].k), Tp(data104[i].nu),
5434                    Tp(data104[i].phi));
5435       const Tp f0 = data104[i].f0;
5436       const Tp diff = f - f0;
5437       if (std::abs(diff) > max_abs_diff)
5438         max_abs_diff = std::abs(diff);
5439       if (std::abs(f0) > Tp(10) * eps
5440        && std::abs(f) > Tp(10) * eps)
5441         {
5442           const Tp frac = diff / f0;
5443           if (std::abs(frac) > max_abs_frac)
5444             max_abs_frac = std::abs(frac);
5445         }
5446     }
5447   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5448 }
5449
5450 // Test data for k=0.10000000000000009, nu=0.40000000000000002.
5451 testcase_ellint_3<double> data105[] = {
5452   { -0.0000000000000000, 0.10000000000000009, 0.40000000000000002, 
5453           0.0000000000000000 },
5454   { 0.17384216369897937, 0.10000000000000009, 0.40000000000000002, 
5455           0.17453292519943295 },
5456   { 0.34375018311376782, 0.10000000000000009, 0.40000000000000002, 
5457           0.34906585039886590 },
5458   { 0.50672650758380455, 0.10000000000000009, 0.40000000000000002, 
5459           0.52359877559829882 },
5460   { 0.66121264213337616, 0.10000000000000009, 0.40000000000000002, 
5461           0.69813170079773179 },
5462   { 0.80706202005774441, 0.10000000000000009, 0.40000000000000002, 
5463           0.87266462599716477 },
5464   { 0.94519376138245892, 0.10000000000000009, 0.40000000000000002, 
5465           1.0471975511965976 },
5466   { 1.0771880300759584, 0.10000000000000009, 0.40000000000000002, 
5467           1.2217304763960306 },
5468   { 1.2049711557188272, 0.10000000000000009, 0.40000000000000002, 
5469           1.3962634015954636 },
5470   { 1.3306223265207477, 0.10000000000000009, 0.40000000000000002, 
5471           1.5707963267948966 },
5472 };
5473
5474 // Test function for k=0.10000000000000009, nu=0.40000000000000002.
5475 template <typename Tp>
5476 void test105()
5477 {
5478   const Tp eps = std::numeric_limits<Tp>::epsilon();
5479   Tp max_abs_diff = -Tp(1);
5480   Tp max_abs_frac = -Tp(1);
5481   unsigned int num_datum = sizeof(data105)
5482                          / sizeof(testcase_ellint_3<double>);
5483   for (unsigned int i = 0; i < num_datum; ++i)
5484     {
5485       const Tp f = std::tr1::ellint_3(Tp(data105[i].k), Tp(data105[i].nu),
5486                    Tp(data105[i].phi));
5487       const Tp f0 = data105[i].f0;
5488       const Tp diff = f - f0;
5489       if (std::abs(diff) > max_abs_diff)
5490         max_abs_diff = std::abs(diff);
5491       if (std::abs(f0) > Tp(10) * eps
5492        && std::abs(f) > Tp(10) * eps)
5493         {
5494           const Tp frac = diff / f0;
5495           if (std::abs(frac) > max_abs_frac)
5496             max_abs_frac = std::abs(frac);
5497         }
5498     }
5499   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5500 }
5501
5502 // Test data for k=0.10000000000000009, nu=0.50000000000000000.
5503 testcase_ellint_3<double> data106[] = {
5504   { -0.0000000000000000, 0.10000000000000009, 0.50000000000000000, 
5505           0.0000000000000000 },
5506   { 0.17366883711936554, 0.10000000000000009, 0.50000000000000000, 
5507           0.17453292519943295 },
5508   { 0.34244940634881876, 0.10000000000000009, 0.50000000000000000, 
5509           0.34906585039886590 },
5510   { 0.50274793281634378, 0.10000000000000009, 0.50000000000000000, 
5511           0.52359877559829882 },
5512   { 0.65287941633275093, 0.10000000000000009, 0.50000000000000000, 
5513           0.69813170079773179 },
5514   { 0.79291198790315398, 0.10000000000000009, 0.50000000000000000, 
5515           0.87266462599716477 },
5516   { 0.92412201537880345, 0.10000000000000009, 0.50000000000000000, 
5517           1.0471975511965976 },
5518   { 1.0484480076799370, 0.10000000000000009, 0.50000000000000000, 
5519           1.2217304763960306 },
5520   { 1.1681168130475206, 0.10000000000000009, 0.50000000000000000, 
5521           1.3962634015954636 },
5522   { 1.2854480708580160, 0.10000000000000009, 0.50000000000000000, 
5523           1.5707963267948966 },
5524 };
5525
5526 // Test function for k=0.10000000000000009, nu=0.50000000000000000.
5527 template <typename Tp>
5528 void test106()
5529 {
5530   const Tp eps = std::numeric_limits<Tp>::epsilon();
5531   Tp max_abs_diff = -Tp(1);
5532   Tp max_abs_frac = -Tp(1);
5533   unsigned int num_datum = sizeof(data106)
5534                          / sizeof(testcase_ellint_3<double>);
5535   for (unsigned int i = 0; i < num_datum; ++i)
5536     {
5537       const Tp f = std::tr1::ellint_3(Tp(data106[i].k), Tp(data106[i].nu),
5538                    Tp(data106[i].phi));
5539       const Tp f0 = data106[i].f0;
5540       const Tp diff = f - f0;
5541       if (std::abs(diff) > max_abs_diff)
5542         max_abs_diff = std::abs(diff);
5543       if (std::abs(f0) > Tp(10) * eps
5544        && std::abs(f) > Tp(10) * eps)
5545         {
5546           const Tp frac = diff / f0;
5547           if (std::abs(frac) > max_abs_frac)
5548             max_abs_frac = std::abs(frac);
5549         }
5550     }
5551   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5552 }
5553
5554 // Test data for k=0.10000000000000009, nu=0.59999999999999998.
5555 testcase_ellint_3<double> data107[] = {
5556   { -0.0000000000000000, 0.10000000000000009, 0.59999999999999998, 
5557           0.0000000000000000 },
5558   { 0.17349612891469018, 0.10000000000000009, 0.59999999999999998, 
5559           0.17453292519943295 },
5560   { 0.34116594505539438, 0.10000000000000009, 0.59999999999999998, 
5561           0.34906585039886590 },
5562   { 0.49887649430466685, 0.10000000000000009, 0.59999999999999998, 
5563           0.52359877559829882 },
5564   { 0.64489553282165157, 0.10000000000000009, 0.59999999999999998, 
5565           0.69813170079773179 },
5566   { 0.77956016553782437, 0.10000000000000009, 0.59999999999999998, 
5567           0.87266462599716477 },
5568   { 0.90451074530096309, 0.10000000000000009, 0.59999999999999998, 
5569           1.0471975511965976 },
5570   { 1.0220113666961632, 0.10000000000000009, 0.59999999999999998, 
5571           1.2217304763960306 },
5572   { 1.1345351441065563, 0.10000000000000009, 0.59999999999999998, 
5573           1.3962634015954636 },
5574   { 1.2445798942989255, 0.10000000000000009, 0.59999999999999998, 
5575           1.5707963267948966 },
5576 };
5577
5578 // Test function for k=0.10000000000000009, nu=0.59999999999999998.
5579 template <typename Tp>
5580 void test107()
5581 {
5582   const Tp eps = std::numeric_limits<Tp>::epsilon();
5583   Tp max_abs_diff = -Tp(1);
5584   Tp max_abs_frac = -Tp(1);
5585   unsigned int num_datum = sizeof(data107)
5586                          / sizeof(testcase_ellint_3<double>);
5587   for (unsigned int i = 0; i < num_datum; ++i)
5588     {
5589       const Tp f = std::tr1::ellint_3(Tp(data107[i].k), Tp(data107[i].nu),
5590                    Tp(data107[i].phi));
5591       const Tp f0 = data107[i].f0;
5592       const Tp diff = f - f0;
5593       if (std::abs(diff) > max_abs_diff)
5594         max_abs_diff = std::abs(diff);
5595       if (std::abs(f0) > Tp(10) * eps
5596        && std::abs(f) > Tp(10) * eps)
5597         {
5598           const Tp frac = diff / f0;
5599           if (std::abs(frac) > max_abs_frac)
5600             max_abs_frac = std::abs(frac);
5601         }
5602     }
5603   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5604 }
5605
5606 // Test data for k=0.10000000000000009, nu=0.69999999999999996.
5607 testcase_ellint_3<double> data108[] = {
5608   { -0.0000000000000000, 0.10000000000000009, 0.69999999999999996, 
5609           0.0000000000000000 },
5610   { 0.17332403516105052, 0.10000000000000009, 0.69999999999999996, 
5611           0.17453292519943295 },
5612   { 0.33989939374896877, 0.10000000000000009, 0.69999999999999996, 
5613           0.34906585039886590 },
5614   { 0.49510719568614081, 0.10000000000000009, 0.69999999999999996, 
5615           0.52359877559829882 },
5616   { 0.63723607776354974, 0.10000000000000009, 0.69999999999999996, 
5617           0.69813170079773179 },
5618   { 0.76693133887935327, 0.10000000000000009, 0.69999999999999996, 
5619           0.87266462599716477 },
5620   { 0.88619382078823827, 0.10000000000000009, 0.69999999999999996, 
5621           1.0471975511965976 },
5622   { 0.99758012018676490, 0.10000000000000009, 0.69999999999999996, 
5623           1.2217304763960306 },
5624   { 1.1037642270814410, 0.10000000000000009, 0.69999999999999996, 
5625           1.3962634015954636 },
5626   { 1.2073745911083187, 0.10000000000000009, 0.69999999999999996, 
5627           1.5707963267948966 },
5628 };
5629
5630 // Test function for k=0.10000000000000009, nu=0.69999999999999996.
5631 template <typename Tp>
5632 void test108()
5633 {
5634   const Tp eps = std::numeric_limits<Tp>::epsilon();
5635   Tp max_abs_diff = -Tp(1);
5636   Tp max_abs_frac = -Tp(1);
5637   unsigned int num_datum = sizeof(data108)
5638                          / sizeof(testcase_ellint_3<double>);
5639   for (unsigned int i = 0; i < num_datum; ++i)
5640     {
5641       const Tp f = std::tr1::ellint_3(Tp(data108[i].k), Tp(data108[i].nu),
5642                    Tp(data108[i].phi));
5643       const Tp f0 = data108[i].f0;
5644       const Tp diff = f - f0;
5645       if (std::abs(diff) > max_abs_diff)
5646         max_abs_diff = std::abs(diff);
5647       if (std::abs(f0) > Tp(10) * eps
5648        && std::abs(f) > Tp(10) * eps)
5649         {
5650           const Tp frac = diff / f0;
5651           if (std::abs(frac) > max_abs_frac)
5652             max_abs_frac = std::abs(frac);
5653         }
5654     }
5655   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5656 }
5657
5658 // Test data for k=0.10000000000000009, nu=0.80000000000000004.
5659 testcase_ellint_3<double> data109[] = {
5660   { -0.0000000000000000, 0.10000000000000009, 0.80000000000000004, 
5661           0.0000000000000000 },
5662   { 0.17315255197057020, 0.10000000000000009, 0.80000000000000004, 
5663           0.17453292519943295 },
5664   { 0.33864936055747985, 0.10000000000000009, 0.80000000000000004, 
5665           0.34906585039886590 },
5666   { 0.49143537041117619, 0.10000000000000009, 0.80000000000000004, 
5667           0.52359877559829882 },
5668   { 0.62987861760047492, 0.10000000000000009, 0.80000000000000004, 
5669           0.69813170079773179 },
5670   { 0.75496005490917517, 0.10000000000000009, 0.80000000000000004, 
5671           0.87266462599716477 },
5672   { 0.86903081862701903, 0.10000000000000009, 0.80000000000000004, 
5673           1.0471975511965976 },
5674   { 0.97490814820725591, 0.10000000000000009, 0.80000000000000004, 
5675           1.2217304763960306 },
5676   { 1.0754290107171083, 0.10000000000000009, 0.80000000000000004, 
5677           1.3962634015954636 },
5678   { 1.1733158866987732, 0.10000000000000009, 0.80000000000000004, 
5679           1.5707963267948966 },
5680 };
5681
5682 // Test function for k=0.10000000000000009, nu=0.80000000000000004.
5683 template <typename Tp>
5684 void test109()
5685 {
5686   const Tp eps = std::numeric_limits<Tp>::epsilon();
5687   Tp max_abs_diff = -Tp(1);
5688   Tp max_abs_frac = -Tp(1);
5689   unsigned int num_datum = sizeof(data109)
5690                          / sizeof(testcase_ellint_3<double>);
5691   for (unsigned int i = 0; i < num_datum; ++i)
5692     {
5693       const Tp f = std::tr1::ellint_3(Tp(data109[i].k), Tp(data109[i].nu),
5694                    Tp(data109[i].phi));
5695       const Tp f0 = data109[i].f0;
5696       const Tp diff = f - f0;
5697       if (std::abs(diff) > max_abs_diff)
5698         max_abs_diff = std::abs(diff);
5699       if (std::abs(f0) > Tp(10) * eps
5700        && std::abs(f) > Tp(10) * eps)
5701         {
5702           const Tp frac = diff / f0;
5703           if (std::abs(frac) > max_abs_frac)
5704             max_abs_frac = std::abs(frac);
5705         }
5706     }
5707   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5708 }
5709
5710 // Test data for k=0.10000000000000009, nu=0.90000000000000002.
5711 testcase_ellint_3<double> data110[] = {
5712   { -0.0000000000000000, 0.10000000000000009, 0.90000000000000002, 
5713           0.0000000000000000 },
5714   { 0.17298167549096569, 0.10000000000000009, 0.90000000000000002, 
5715           0.17453292519943295 },
5716   { 0.33741546662741584, 0.10000000000000009, 0.90000000000000002, 
5717           0.34906585039886590 },
5718   { 0.48785665376856879, 0.10000000000000009, 0.90000000000000002, 
5719           0.52359877559829882 },
5720   { 0.62280288554518959, 0.10000000000000009, 0.90000000000000002, 
5721           0.69813170079773179 },
5722   { 0.74358903115455199, 0.10000000000000009, 0.90000000000000002, 
5723           0.87266462599716477 },
5724   { 0.85290207679298358, 0.10000000000000009, 0.90000000000000002, 
5725           1.0471975511965976 },
5726   { 0.95379006645397379, 0.10000000000000009, 0.90000000000000002, 
5727           1.2217304763960306 },
5728   { 1.0492213119872327, 0.10000000000000009, 0.90000000000000002, 
5729           1.3962634015954636 },
5730   { 1.1419839485283374, 0.10000000000000009, 0.90000000000000002, 
5731           1.5707963267948966 },
5732 };
5733
5734 // Test function for k=0.10000000000000009, nu=0.90000000000000002.
5735 template <typename Tp>
5736 void test110()
5737 {
5738   const Tp eps = std::numeric_limits<Tp>::epsilon();
5739   Tp max_abs_diff = -Tp(1);
5740   Tp max_abs_frac = -Tp(1);
5741   unsigned int num_datum = sizeof(data110)
5742                          / sizeof(testcase_ellint_3<double>);
5743   for (unsigned int i = 0; i < num_datum; ++i)
5744     {
5745       const Tp f = std::tr1::ellint_3(Tp(data110[i].k), Tp(data110[i].nu),
5746                    Tp(data110[i].phi));
5747       const Tp f0 = data110[i].f0;
5748       const Tp diff = f - f0;
5749       if (std::abs(diff) > max_abs_diff)
5750         max_abs_diff = std::abs(diff);
5751       if (std::abs(f0) > Tp(10) * eps
5752        && std::abs(f) > Tp(10) * eps)
5753         {
5754           const Tp frac = diff / f0;
5755           if (std::abs(frac) > max_abs_frac)
5756             max_abs_frac = std::abs(frac);
5757         }
5758     }
5759   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5760 }
5761
5762 // Test data for k=0.19999999999999996, nu=0.0000000000000000.
5763 testcase_ellint_3<double> data111[] = {
5764   { -0.0000000000000000, 0.19999999999999996, 0.0000000000000000, 
5765           0.0000000000000000 },
5766   { 0.17456817290292811, 0.19999999999999996, 0.0000000000000000, 
5767           0.17453292519943295 },
5768   { 0.34934315932086801, 0.19999999999999996, 0.0000000000000000, 
5769           0.34906585039886590 },
5770   { 0.52450880529443988, 0.19999999999999996, 0.0000000000000000, 
5771           0.52359877559829882 },
5772   { 0.70020491009844910, 0.19999999999999996, 0.0000000000000000, 
5773           0.69813170079773179 },
5774   { 0.87651006649967955, 0.19999999999999996, 0.0000000000000000, 
5775           0.87266462599716477 },
5776   { 1.0534305870298994, 0.19999999999999996, 0.0000000000000000, 
5777           1.0471975511965976 },
5778   { 1.2308975521670784, 0.19999999999999996, 0.0000000000000000, 
5779           1.2217304763960306 },
5780   { 1.4087733584990738, 0.19999999999999996, 0.0000000000000000, 
5781           1.3962634015954636 },
5782   { 1.5868678474541664, 0.19999999999999996, 0.0000000000000000, 
5783           1.5707963267948966 },
5784 };
5785
5786 // Test function for k=0.19999999999999996, nu=0.0000000000000000.
5787 template <typename Tp>
5788 void test111()
5789 {
5790   const Tp eps = std::numeric_limits<Tp>::epsilon();
5791   Tp max_abs_diff = -Tp(1);
5792   Tp max_abs_frac = -Tp(1);
5793   unsigned int num_datum = sizeof(data111)
5794                          / sizeof(testcase_ellint_3<double>);
5795   for (unsigned int i = 0; i < num_datum; ++i)
5796     {
5797       const Tp f = std::tr1::ellint_3(Tp(data111[i].k), Tp(data111[i].nu),
5798                    Tp(data111[i].phi));
5799       const Tp f0 = data111[i].f0;
5800       const Tp diff = f - f0;
5801       if (std::abs(diff) > max_abs_diff)
5802         max_abs_diff = std::abs(diff);
5803       if (std::abs(f0) > Tp(10) * eps
5804        && std::abs(f) > Tp(10) * eps)
5805         {
5806           const Tp frac = diff / f0;
5807           if (std::abs(frac) > max_abs_frac)
5808             max_abs_frac = std::abs(frac);
5809         }
5810     }
5811   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5812 }
5813
5814 // Test data for k=0.19999999999999996, nu=0.10000000000000001.
5815 testcase_ellint_3<double> data112[] = {
5816   { -0.0000000000000000, 0.19999999999999996, 0.10000000000000001, 
5817           0.0000000000000000 },
5818   { 0.17439228502691750, 0.19999999999999996, 0.10000000000000001, 
5819           0.17453292519943295 },
5820   { 0.34796731137565740, 0.19999999999999996, 0.10000000000000001, 
5821           0.34906585039886590 },
5822   { 0.52003370294544848, 0.19999999999999996, 0.10000000000000001, 
5823           0.52359877559829882 },
5824   { 0.69012222258631495, 0.19999999999999996, 0.10000000000000001, 
5825           0.69813170079773179 },
5826   { 0.85803491465566772, 0.19999999999999996, 0.10000000000000001, 
5827           0.87266462599716477 },
5828   { 1.0238463961099364, 0.19999999999999996, 0.10000000000000001, 
5829           1.0471975511965976 },
5830   { 1.1878691059202153, 0.19999999999999996, 0.10000000000000001, 
5831           1.2217304763960306 },
5832   { 1.3505985031831940, 0.19999999999999996, 0.10000000000000001, 
5833           1.3962634015954636 },
5834   { 1.5126513474261092, 0.19999999999999996, 0.10000000000000001, 
5835           1.5707963267948966 },
5836 };
5837
5838 // Test function for k=0.19999999999999996, nu=0.10000000000000001.
5839 template <typename Tp>
5840 void test112()
5841 {
5842   const Tp eps = std::numeric_limits<Tp>::epsilon();
5843   Tp max_abs_diff = -Tp(1);
5844   Tp max_abs_frac = -Tp(1);
5845   unsigned int num_datum = sizeof(data112)
5846                          / sizeof(testcase_ellint_3<double>);
5847   for (unsigned int i = 0; i < num_datum; ++i)
5848     {
5849       const Tp f = std::tr1::ellint_3(Tp(data112[i].k), Tp(data112[i].nu),
5850                    Tp(data112[i].phi));
5851       const Tp f0 = data112[i].f0;
5852       const Tp diff = f - f0;
5853       if (std::abs(diff) > max_abs_diff)
5854         max_abs_diff = std::abs(diff);
5855       if (std::abs(f0) > Tp(10) * eps
5856        && std::abs(f) > Tp(10) * eps)
5857         {
5858           const Tp frac = diff / f0;
5859           if (std::abs(frac) > max_abs_frac)
5860             max_abs_frac = std::abs(frac);
5861         }
5862     }
5863   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5864 }
5865
5866 // Test data for k=0.19999999999999996, nu=0.20000000000000001.
5867 testcase_ellint_3<double> data113[] = {
5868   { -0.0000000000000000, 0.19999999999999996, 0.20000000000000001, 
5869           0.0000000000000000 },
5870   { 0.17421703179583750, 0.19999999999999996, 0.20000000000000001, 
5871           0.17453292519943295 },
5872   { 0.34661057411998791, 0.19999999999999996, 0.20000000000000001, 
5873           0.34906585039886590 },
5874   { 0.51569006052647393, 0.19999999999999996, 0.20000000000000001, 
5875           0.52359877559829882 },
5876   { 0.68052412821107278, 0.19999999999999996, 0.20000000000000001, 
5877           0.69813170079773179 },
5878   { 0.84081341263313825, 0.19999999999999996, 0.20000000000000001, 
5879           0.87266462599716477 },
5880   { 0.99683359988842890, 0.19999999999999996, 0.20000000000000001, 
5881           1.0471975511965976 },
5882   { 1.1493086715118852, 0.19999999999999996, 0.20000000000000001, 
5883           1.2217304763960306 },
5884   { 1.2992699693957541, 0.19999999999999996, 0.20000000000000001, 
5885           1.3962634015954636 },
5886   { 1.4479323932249568, 0.19999999999999996, 0.20000000000000001, 
5887           1.5707963267948966 },
5888 };
5889
5890 // Test function for k=0.19999999999999996, nu=0.20000000000000001.
5891 template <typename Tp>
5892 void test113()
5893 {
5894   const Tp eps = std::numeric_limits<Tp>::epsilon();
5895   Tp max_abs_diff = -Tp(1);
5896   Tp max_abs_frac = -Tp(1);
5897   unsigned int num_datum = sizeof(data113)
5898                          / sizeof(testcase_ellint_3<double>);
5899   for (unsigned int i = 0; i < num_datum; ++i)
5900     {
5901       const Tp f = std::tr1::ellint_3(Tp(data113[i].k), Tp(data113[i].nu),
5902                    Tp(data113[i].phi));
5903       const Tp f0 = data113[i].f0;
5904       const Tp diff = f - f0;
5905       if (std::abs(diff) > max_abs_diff)
5906         max_abs_diff = std::abs(diff);
5907       if (std::abs(f0) > Tp(10) * eps
5908        && std::abs(f) > Tp(10) * eps)
5909         {
5910           const Tp frac = diff / f0;
5911           if (std::abs(frac) > max_abs_frac)
5912             max_abs_frac = std::abs(frac);
5913         }
5914     }
5915   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5916 }
5917
5918 // Test data for k=0.19999999999999996, nu=0.29999999999999999.
5919 testcase_ellint_3<double> data114[] = {
5920   { -0.0000000000000000, 0.19999999999999996, 0.29999999999999999, 
5921           0.0000000000000000 },
5922   { 0.17404240913577707, 0.19999999999999996, 0.29999999999999999, 
5923           0.17453292519943295 },
5924   { 0.34527248032587193, 0.19999999999999996, 0.29999999999999999, 
5925           0.34906585039886590 },
5926   { 0.51147118981668416, 0.19999999999999996, 0.29999999999999999, 
5927           0.52359877559829882 },
5928   { 0.67137107867777635, 0.19999999999999996, 0.29999999999999999, 
5929           0.69813170079773179 },
5930   { 0.82470418188668893, 0.19999999999999996, 0.29999999999999999, 
5931           0.87266462599716477 },
5932   { 0.97202873223594299, 0.19999999999999996, 0.29999999999999999, 
5933           1.0471975511965976 },
5934   { 1.1144773569375266, 0.19999999999999996, 0.29999999999999999, 
5935           1.2217304763960306 },
5936   { 1.2535292433701000, 0.19999999999999996, 0.29999999999999999, 
5937           1.3962634015954636 },
5938   { 1.3908453514752481, 0.19999999999999996, 0.29999999999999999, 
5939           1.5707963267948966 },
5940 };
5941
5942 // Test function for k=0.19999999999999996, nu=0.29999999999999999.
5943 template <typename Tp>
5944 void test114()
5945 {
5946   const Tp eps = std::numeric_limits<Tp>::epsilon();
5947   Tp max_abs_diff = -Tp(1);
5948   Tp max_abs_frac = -Tp(1);
5949   unsigned int num_datum = sizeof(data114)
5950                          / sizeof(testcase_ellint_3<double>);
5951   for (unsigned int i = 0; i < num_datum; ++i)
5952     {
5953       const Tp f = std::tr1::ellint_3(Tp(data114[i].k), Tp(data114[i].nu),
5954                    Tp(data114[i].phi));
5955       const Tp f0 = data114[i].f0;
5956       const Tp diff = f - f0;
5957       if (std::abs(diff) > max_abs_diff)
5958         max_abs_diff = std::abs(diff);
5959       if (std::abs(f0) > Tp(10) * eps
5960        && std::abs(f) > Tp(10) * eps)
5961         {
5962           const Tp frac = diff / f0;
5963           if (std::abs(frac) > max_abs_frac)
5964             max_abs_frac = std::abs(frac);
5965         }
5966     }
5967   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5968 }
5969
5970 // Test data for k=0.19999999999999996, nu=0.40000000000000002.
5971 testcase_ellint_3<double> data115[] = {
5972   { -0.0000000000000000, 0.19999999999999996, 0.40000000000000002, 
5973           0.0000000000000000 },
5974   { 0.17386841301066677, 0.19999999999999996, 0.40000000000000002, 
5975           0.17453292519943295 },
5976   { 0.34395257914113253, 0.19999999999999996, 0.40000000000000002, 
5977           0.34906585039886590 },
5978   { 0.50737088376869466, 0.19999999999999996, 0.40000000000000002, 
5979           0.52359877559829882 },
5980   { 0.66262801717277664, 0.19999999999999996, 0.40000000000000002, 
5981           0.69813170079773179 },
5982   { 0.80958766645079094, 0.19999999999999996, 0.40000000000000002, 
5983           0.87266462599716477 },
5984   { 0.94913754236162040, 0.19999999999999996, 0.40000000000000002, 
5985           1.0471975511965976 },
5986   { 1.0827985514223000, 0.19999999999999996, 0.40000000000000002, 
5987           1.2217304763960306 },
5988   { 1.2124212429050478, 0.19999999999999996, 0.40000000000000002, 
5989           1.3962634015954636 },
5990   { 1.3400002519661010, 0.19999999999999996, 0.40000000000000002, 
5991           1.5707963267948966 },
5992 };
5993
5994 // Test function for k=0.19999999999999996, nu=0.40000000000000002.
5995 template <typename Tp>
5996 void test115()
5997 {
5998   const Tp eps = std::numeric_limits<Tp>::epsilon();
5999   Tp max_abs_diff = -Tp(1);
6000   Tp max_abs_frac = -Tp(1);
6001   unsigned int num_datum = sizeof(data115)
6002                          / sizeof(testcase_ellint_3<double>);
6003   for (unsigned int i = 0; i < num_datum; ++i)
6004     {
6005       const Tp f = std::tr1::ellint_3(Tp(data115[i].k), Tp(data115[i].nu),
6006                    Tp(data115[i].phi));
6007       const Tp f0 = data115[i].f0;
6008       const Tp diff = f - f0;
6009       if (std::abs(diff) > max_abs_diff)
6010         max_abs_diff = std::abs(diff);
6011       if (std::abs(f0) > Tp(10) * eps
6012        && std::abs(f) > Tp(10) * eps)
6013         {
6014           const Tp frac = diff / f0;
6015           if (std::abs(frac) > max_abs_frac)
6016             max_abs_frac = std::abs(frac);
6017         }
6018     }
6019   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6020 }
6021
6022 // Test data for k=0.19999999999999996, nu=0.50000000000000000.
6023 testcase_ellint_3<double> data116[] = {
6024   { -0.0000000000000000, 0.19999999999999996, 0.50000000000000000, 
6025           0.0000000000000000 },
6026   { 0.17369503942181802, 0.19999999999999996, 0.50000000000000000, 
6027           0.17453292519943295 },
6028   { 0.34265043534362660, 0.19999999999999996, 0.50000000000000000, 
6029           0.34906585039886590 },
6030   { 0.50338337208655415, 0.19999999999999996, 0.50000000000000000, 
6031           0.52359877559829882 },
6032   { 0.65426373297163642, 0.19999999999999996, 0.50000000000000000, 
6033           0.69813170079773179 },
6034   { 0.79536193036145808, 0.19999999999999996, 0.50000000000000000, 
6035           0.87266462599716477 },
6036   { 0.92791875910061605, 0.19999999999999996, 0.50000000000000000, 
6037           1.0471975511965976 },
6038   { 1.0538145052725829, 0.19999999999999996, 0.50000000000000000, 
6039           1.2217304763960306 },
6040   { 1.1752060022875899, 0.19999999999999996, 0.50000000000000000, 
6041           1.3962634015954636 },
6042   { 1.2943374404397376, 0.19999999999999996, 0.50000000000000000, 
6043           1.5707963267948966 },
6044 };
6045
6046 // Test function for k=0.19999999999999996, nu=0.50000000000000000.
6047 template <typename Tp>
6048 void test116()
6049 {
6050   const Tp eps = std::numeric_limits<Tp>::epsilon();
6051   Tp max_abs_diff = -Tp(1);
6052   Tp max_abs_frac = -Tp(1);
6053   unsigned int num_datum = sizeof(data116)
6054                          / sizeof(testcase_ellint_3<double>);
6055   for (unsigned int i = 0; i < num_datum; ++i)
6056     {
6057       const Tp f = std::tr1::ellint_3(Tp(data116[i].k), Tp(data116[i].nu),
6058                    Tp(data116[i].phi));
6059       const Tp f0 = data116[i].f0;
6060       const Tp diff = f - f0;
6061       if (std::abs(diff) > max_abs_diff)
6062         max_abs_diff = std::abs(diff);
6063       if (std::abs(f0) > Tp(10) * eps
6064        && std::abs(f) > Tp(10) * eps)
6065         {
6066           const Tp frac = diff / f0;
6067           if (std::abs(frac) > max_abs_frac)
6068             max_abs_frac = std::abs(frac);
6069         }
6070     }
6071   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6072 }
6073
6074 // Test data for k=0.19999999999999996, nu=0.59999999999999998.
6075 testcase_ellint_3<double> data117[] = {
6076   { -0.0000000000000000, 0.19999999999999996, 0.59999999999999998, 
6077           0.0000000000000000 },
6078   { 0.17352228440746928, 0.19999999999999996, 0.59999999999999998, 
6079           0.17453292519943295 },
6080   { 0.34136562863713626, 0.19999999999999996, 0.59999999999999998, 
6081           0.34906585039886590 },
6082   { 0.49950328177638481, 0.19999999999999996, 0.59999999999999998, 
6083           0.52359877559829882 },
6084   { 0.64625032705690832, 0.19999999999999996, 0.59999999999999998, 
6085           0.69813170079773179 },
6086   { 0.78193941198403094, 0.19999999999999996, 0.59999999999999998, 
6087           0.87266462599716477 },
6088   { 0.90817230934317128, 0.19999999999999996, 0.59999999999999998, 
6089           1.0471975511965976 },
6090   { 1.0271563751276462, 0.19999999999999996, 0.59999999999999998, 
6091           1.2217304763960306 },
6092   { 1.1412999379040518, 0.19999999999999996, 0.59999999999999998, 
6093           1.3962634015954636 },
6094   { 1.2530330675914561, 0.19999999999999996, 0.59999999999999998, 
6095           1.5707963267948966 },
6096 };
6097
6098 // Test function for k=0.19999999999999996, nu=0.59999999999999998.
6099 template <typename Tp>
6100 void test117()
6101 {
6102   const Tp eps = std::numeric_limits<Tp>::epsilon();
6103   Tp max_abs_diff = -Tp(1);
6104   Tp max_abs_frac = -Tp(1);
6105   unsigned int num_datum = sizeof(data117)
6106                          / sizeof(testcase_ellint_3<double>);
6107   for (unsigned int i = 0; i < num_datum; ++i)
6108     {
6109       const Tp f = std::tr1::ellint_3(Tp(data117[i].k), Tp(data117[i].nu),
6110                    Tp(data117[i].phi));
6111       const Tp f0 = data117[i].f0;
6112       const Tp diff = f - f0;
6113       if (std::abs(diff) > max_abs_diff)
6114         max_abs_diff = std::abs(diff);
6115       if (std::abs(f0) > Tp(10) * eps
6116        && std::abs(f) > Tp(10) * eps)
6117         {
6118           const Tp frac = diff / f0;
6119           if (std::abs(frac) > max_abs_frac)
6120             max_abs_frac = std::abs(frac);
6121         }
6122     }
6123   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6124 }
6125
6126 // Test data for k=0.19999999999999996, nu=0.69999999999999996.
6127 testcase_ellint_3<double> data118[] = {
6128   { -0.0000000000000000, 0.19999999999999996, 0.69999999999999996, 
6129           0.0000000000000000 },
6130   { 0.17335014404233898, 0.19999999999999996, 0.69999999999999996, 
6131           0.17453292519943295 },
6132   { 0.34009775298617811, 0.19999999999999996, 0.69999999999999996, 
6133           0.34906585039886590 },
6134   { 0.49572560201923810, 0.19999999999999996, 0.69999999999999996, 
6135           0.52359877559829882 },
6136   { 0.63856276669886525, 0.19999999999999996, 0.69999999999999996, 
6137           0.69813170079773179 },
6138   { 0.76924438644867565, 0.19999999999999996, 0.69999999999999996, 
6139           0.87266462599716477 },
6140   { 0.88973060843856466, 0.19999999999999996, 0.69999999999999996, 
6141           1.0471975511965976 },
6142   { 1.0025230471636377, 0.19999999999999996, 0.69999999999999996, 
6143           1.2217304763960306 },
6144   { 1.1102356376093103, 0.19999999999999996, 0.69999999999999996, 
6145           1.3962634015954636 },
6146   { 1.2154356555075867, 0.19999999999999996, 0.69999999999999996, 
6147           1.5707963267948966 },
6148 };
6149
6150 // Test function for k=0.19999999999999996, nu=0.69999999999999996.
6151 template <typename Tp>
6152 void test118()
6153 {
6154   const Tp eps = std::numeric_limits<Tp>::epsilon();
6155   Tp max_abs_diff = -Tp(1);
6156   Tp max_abs_frac = -Tp(1);
6157   unsigned int num_datum = sizeof(data118)
6158                          / sizeof(testcase_ellint_3<double>);
6159   for (unsigned int i = 0; i < num_datum; ++i)
6160     {
6161       const Tp f = std::tr1::ellint_3(Tp(data118[i].k), Tp(data118[i].nu),
6162                    Tp(data118[i].phi));
6163       const Tp f0 = data118[i].f0;
6164       const Tp diff = f - f0;
6165       if (std::abs(diff) > max_abs_diff)
6166         max_abs_diff = std::abs(diff);
6167       if (std::abs(f0) > Tp(10) * eps
6168        && std::abs(f) > Tp(10) * eps)
6169         {
6170           const Tp frac = diff / f0;
6171           if (std::abs(frac) > max_abs_frac)
6172             max_abs_frac = std::abs(frac);
6173         }
6174     }
6175   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6176 }
6177
6178 // Test data for k=0.19999999999999996, nu=0.80000000000000004.
6179 testcase_ellint_3<double> data119[] = {
6180   { -0.0000000000000000, 0.19999999999999996, 0.80000000000000004, 
6181           0.0000000000000000 },
6182   { 0.17317861443718541, 0.19999999999999996, 0.80000000000000004, 
6183           0.17453292519943295 },
6184   { 0.33884641598718701, 0.19999999999999996, 0.80000000000000004, 
6185           0.34906585039886590 },
6186   { 0.49204565281259494, 0.19999999999999996, 0.80000000000000004, 
6187           0.52359877559829882 },
6188   { 0.63117851188220353, 0.19999999999999996, 0.80000000000000004, 
6189           0.69813170079773179 },
6190   { 0.75721095949544170, 0.19999999999999996, 0.80000000000000004, 
6191           0.87266462599716477 },
6192   { 0.87245201443919118, 0.19999999999999996, 0.80000000000000004, 
6193           1.0471975511965976 },
6194   { 0.97966584238831089, 0.19999999999999996, 0.80000000000000004, 
6195           1.2217304763960306 },
6196   { 1.0816336325174360, 0.19999999999999996, 0.80000000000000004, 
6197           1.3962634015954636 },
6198   { 1.1810223448909913, 0.19999999999999996, 0.80000000000000004, 
6199           1.5707963267948966 },
6200 };
6201
6202 // Test function for k=0.19999999999999996, nu=0.80000000000000004.
6203 template <typename Tp>
6204 void test119()
6205 {
6206   const Tp eps = std::numeric_limits<Tp>::epsilon();
6207   Tp max_abs_diff = -Tp(1);
6208   Tp max_abs_frac = -Tp(1);
6209   unsigned int num_datum = sizeof(data119)
6210                          / sizeof(testcase_ellint_3<double>);
6211   for (unsigned int i = 0; i < num_datum; ++i)
6212     {
6213       const Tp f = std::tr1::ellint_3(Tp(data119[i].k), Tp(data119[i].nu),
6214                    Tp(data119[i].phi));
6215       const Tp f0 = data119[i].f0;
6216       const Tp diff = f - f0;
6217       if (std::abs(diff) > max_abs_diff)
6218         max_abs_diff = std::abs(diff);
6219       if (std::abs(f0) > Tp(10) * eps
6220        && std::abs(f) > Tp(10) * eps)
6221         {
6222           const Tp frac = diff / f0;
6223           if (std::abs(frac) > max_abs_frac)
6224             max_abs_frac = std::abs(frac);
6225         }
6226     }
6227   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6228 }
6229
6230 // Test data for k=0.19999999999999996, nu=0.90000000000000002.
6231 testcase_ellint_3<double> data120[] = {
6232   { -0.0000000000000000, 0.19999999999999996, 0.90000000000000002, 
6233           0.0000000000000000 },
6234   { 0.17300769173837280, 0.19999999999999996, 0.90000000000000002, 
6235           0.17453292519943295 },
6236   { 0.33761123827372508, 0.19999999999999996, 0.90000000000000002, 
6237           0.34906585039886590 },
6238   { 0.48845905690769426, 0.19999999999999996, 0.90000000000000002, 
6239           0.52359877559829882 },
6240   { 0.62407720017324986, 0.19999999999999996, 0.90000000000000002, 
6241           0.69813170079773179 },
6242   { 0.74578146525124289, 0.19999999999999996, 0.90000000000000002, 
6243           0.87266462599716477 },
6244   { 0.85621583540073076, 0.19999999999999996, 0.90000000000000002, 
6245           1.0471975511965976 },
6246   { 0.95837725988001199, 0.19999999999999996, 0.90000000000000002, 
6247           1.2217304763960306 },
6248   { 1.0551821412633928, 0.19999999999999996, 0.90000000000000002, 
6249           1.3962634015954636 },
6250   { 1.1493679916141863, 0.19999999999999996, 0.90000000000000002, 
6251           1.5707963267948966 },
6252 };
6253
6254 // Test function for k=0.19999999999999996, nu=0.90000000000000002.
6255 template <typename Tp>
6256 void test120()
6257 {
6258   const Tp eps = std::numeric_limits<Tp>::epsilon();
6259   Tp max_abs_diff = -Tp(1);
6260   Tp max_abs_frac = -Tp(1);
6261   unsigned int num_datum = sizeof(data120)
6262                          / sizeof(testcase_ellint_3<double>);
6263   for (unsigned int i = 0; i < num_datum; ++i)
6264     {
6265       const Tp f = std::tr1::ellint_3(Tp(data120[i].k), Tp(data120[i].nu),
6266                    Tp(data120[i].phi));
6267       const Tp f0 = data120[i].f0;
6268       const Tp diff = f - f0;
6269       if (std::abs(diff) > max_abs_diff)
6270         max_abs_diff = std::abs(diff);
6271       if (std::abs(f0) > Tp(10) * eps
6272        && std::abs(f) > Tp(10) * eps)
6273         {
6274           const Tp frac = diff / f0;
6275           if (std::abs(frac) > max_abs_frac)
6276             max_abs_frac = std::abs(frac);
6277         }
6278     }
6279   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6280 }
6281
6282 // Test data for k=0.30000000000000004, nu=0.0000000000000000.
6283 testcase_ellint_3<double> data121[] = {
6284   { -0.0000000000000000, 0.30000000000000004, 0.0000000000000000, 
6285           0.0000000000000000 },
6286   { 0.17461228653000102, 0.30000000000000004, 0.0000000000000000, 
6287           0.17453292519943295 },
6288   { 0.34969146102798415, 0.30000000000000004, 0.0000000000000000, 
6289           0.34906585039886590 },
6290   { 0.52565822873726320, 0.30000000000000004, 0.0000000000000000, 
6291           0.52359877559829882 },
6292   { 0.70284226512408532, 0.30000000000000004, 0.0000000000000000, 
6293           0.69813170079773179 },
6294   { 0.88144139195111182, 0.30000000000000004, 0.0000000000000000, 
6295           0.87266462599716477 },
6296   { 1.0614897067260523, 0.30000000000000004, 0.0000000000000000, 
6297           1.0471975511965976 },
6298   { 1.2428416824174218, 0.30000000000000004, 0.0000000000000000, 
6299           1.2217304763960306 },
6300   { 1.4251795877015925, 0.30000000000000004, 0.0000000000000000, 
6301           1.3962634015954636 },
6302   { 1.6080486199305126, 0.30000000000000004, 0.0000000000000000, 
6303           1.5707963267948966 },
6304 };
6305
6306 // Test function for k=0.30000000000000004, nu=0.0000000000000000.
6307 template <typename Tp>
6308 void test121()
6309 {
6310   const Tp eps = std::numeric_limits<Tp>::epsilon();
6311   Tp max_abs_diff = -Tp(1);
6312   Tp max_abs_frac = -Tp(1);
6313   unsigned int num_datum = sizeof(data121)
6314                          / sizeof(testcase_ellint_3<double>);
6315   for (unsigned int i = 0; i < num_datum; ++i)
6316     {
6317       const Tp f = std::tr1::ellint_3(Tp(data121[i].k), Tp(data121[i].nu),
6318                    Tp(data121[i].phi));
6319       const Tp f0 = data121[i].f0;
6320       const Tp diff = f - f0;
6321       if (std::abs(diff) > max_abs_diff)
6322         max_abs_diff = std::abs(diff);
6323       if (std::abs(f0) > Tp(10) * eps
6324        && std::abs(f) > Tp(10) * eps)
6325         {
6326           const Tp frac = diff / f0;
6327           if (std::abs(frac) > max_abs_frac)
6328             max_abs_frac = std::abs(frac);
6329         }
6330     }
6331   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6332 }
6333
6334 // Test data for k=0.30000000000000004, nu=0.10000000000000001.
6335 testcase_ellint_3<double> data122[] = {
6336   { -0.0000000000000000, 0.30000000000000004, 0.10000000000000001, 
6337           0.0000000000000000 },
6338   { 0.17443631884814378, 0.30000000000000004, 0.10000000000000001, 
6339           0.17453292519943295 },
6340   { 0.34831316835124926, 0.30000000000000004, 0.10000000000000001, 
6341           0.34906585039886590 },
6342   { 0.52116586276523857, 0.30000000000000004, 0.10000000000000001, 
6343           0.52359877559829882 },
6344   { 0.69269385837910036, 0.30000000000000004, 0.10000000000000001, 
6345           0.69813170079773179 },
6346   { 0.86279023163070856, 0.30000000000000004, 0.10000000000000001, 
6347           0.87266462599716477 },
6348   { 1.0315321461438265, 0.30000000000000004, 0.10000000000000001, 
6349           1.0471975511965976 },
6350   { 1.1991449111869024, 0.30000000000000004, 0.10000000000000001, 
6351           1.2217304763960306 },
6352   { 1.3659561780923211, 0.30000000000000004, 0.10000000000000001, 
6353           1.3962634015954636 },
6354   { 1.5323534693557526, 0.30000000000000004, 0.10000000000000001, 
6355           1.5707963267948966 },
6356 };
6357
6358 // Test function for k=0.30000000000000004, nu=0.10000000000000001.
6359 template <typename Tp>
6360 void test122()
6361 {
6362   const Tp eps = std::numeric_limits<Tp>::epsilon();
6363   Tp max_abs_diff = -Tp(1);
6364   Tp max_abs_frac = -Tp(1);
6365   unsigned int num_datum = sizeof(data122)
6366                          / sizeof(testcase_ellint_3<double>);
6367   for (unsigned int i = 0; i < num_datum; ++i)
6368     {
6369       const Tp f = std::tr1::ellint_3(Tp(data122[i].k), Tp(data122[i].nu),
6370                    Tp(data122[i].phi));
6371       const Tp f0 = data122[i].f0;
6372       const Tp diff = f - f0;
6373       if (std::abs(diff) > max_abs_diff)
6374         max_abs_diff = std::abs(diff);
6375       if (std::abs(f0) > Tp(10) * eps
6376        && std::abs(f) > Tp(10) * eps)
6377         {
6378           const Tp frac = diff / f0;
6379           if (std::abs(frac) > max_abs_frac)
6380             max_abs_frac = std::abs(frac);
6381         }
6382     }
6383   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6384 }
6385
6386 // Test data for k=0.30000000000000004, nu=0.20000000000000001.
6387 testcase_ellint_3<double> data123[] = {
6388   { -0.0000000000000000, 0.30000000000000004, 0.20000000000000001, 
6389           0.0000000000000000 },
6390   { 0.17426098615372090, 0.30000000000000004, 0.20000000000000001, 
6391           0.17453292519943295 },
6392   { 0.34695402664689923, 0.30000000000000004, 0.20000000000000001, 
6393           0.34906585039886590 },
6394   { 0.51680555567038933, 0.30000000000000004, 0.20000000000000001, 
6395           0.52359877559829882 },
6396   { 0.68303375225260210, 0.30000000000000004, 0.20000000000000001, 
6397           0.69813170079773179 },
6398   { 0.84540662891295026, 0.30000000000000004, 0.20000000000000001, 
6399           0.87266462599716477 },
6400   { 1.0041834051646927, 0.30000000000000004, 0.20000000000000001, 
6401           1.0471975511965976 },
6402   { 1.1599952702345711, 0.30000000000000004, 0.20000000000000001, 
6403           1.2217304763960306 },
6404   { 1.3137179520499163, 0.30000000000000004, 0.20000000000000001, 
6405           1.3962634015954636 },
6406   { 1.4663658145259875, 0.30000000000000004, 0.20000000000000001, 
6407           1.5707963267948966 },
6408 };
6409
6410 // Test function for k=0.30000000000000004, nu=0.20000000000000001.
6411 template <typename Tp>
6412 void test123()
6413 {
6414   const Tp eps = std::numeric_limits<Tp>::epsilon();
6415   Tp max_abs_diff = -Tp(1);
6416   Tp max_abs_frac = -Tp(1);
6417   unsigned int num_datum = sizeof(data123)
6418                          / sizeof(testcase_ellint_3<double>);
6419   for (unsigned int i = 0; i < num_datum; ++i)
6420     {
6421       const Tp f = std::tr1::ellint_3(Tp(data123[i].k), Tp(data123[i].nu),
6422                    Tp(data123[i].phi));
6423       const Tp f0 = data123[i].f0;
6424       const Tp diff = f - f0;
6425       if (std::abs(diff) > max_abs_diff)
6426         max_abs_diff = std::abs(diff);
6427       if (std::abs(f0) > Tp(10) * eps
6428        && std::abs(f) > Tp(10) * eps)
6429         {
6430           const Tp frac = diff / f0;
6431           if (std::abs(frac) > max_abs_frac)
6432             max_abs_frac = std::abs(frac);
6433         }
6434     }
6435   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6436 }
6437
6438 // Test data for k=0.30000000000000004, nu=0.29999999999999999.
6439 testcase_ellint_3<double> data124[] = {
6440   { -0.0000000000000000, 0.30000000000000004, 0.29999999999999999, 
6441           0.0000000000000000 },
6442   { 0.17408628437042845, 0.30000000000000004, 0.29999999999999999, 
6443           0.17453292519943295 },
6444   { 0.34561356761638401, 0.30000000000000004, 0.29999999999999999, 
6445           0.34906585039886590 },
6446   { 0.51257058617875850, 0.30000000000000004, 0.29999999999999999, 
6447           0.52359877559829882 },
6448   { 0.67382207124602866, 0.30000000000000004, 0.29999999999999999, 
6449           0.69813170079773179 },
6450   { 0.82914751587825131, 0.30000000000000004, 0.29999999999999999, 
6451           0.87266462599716477 },
6452   { 0.97907434814374950, 0.30000000000000004, 0.29999999999999999, 
6453           1.0471975511965976 },
6454   { 1.1246399297351584, 0.30000000000000004, 0.29999999999999999, 
6455           1.2217304763960306 },
6456   { 1.2671793970398146, 0.30000000000000004, 0.29999999999999999, 
6457           1.3962634015954636 },
6458   { 1.4081767433479089, 0.30000000000000004, 0.29999999999999999, 
6459           1.5707963267948966 },
6460 };
6461
6462 // Test function for k=0.30000000000000004, nu=0.29999999999999999.
6463 template <typename Tp>
6464 void test124()
6465 {
6466   const Tp eps = std::numeric_limits<Tp>::epsilon();
6467   Tp max_abs_diff = -Tp(1);
6468   Tp max_abs_frac = -Tp(1);
6469   unsigned int num_datum = sizeof(data124)
6470                          / sizeof(testcase_ellint_3<double>);
6471   for (unsigned int i = 0; i < num_datum; ++i)
6472     {
6473       const Tp f = std::tr1::ellint_3(Tp(data124[i].k), Tp(data124[i].nu),
6474                    Tp(data124[i].phi));
6475       const Tp f0 = data124[i].f0;
6476       const Tp diff = f - f0;
6477       if (std::abs(diff) > max_abs_diff)
6478         max_abs_diff = std::abs(diff);
6479       if (std::abs(f0) > Tp(10) * eps
6480        && std::abs(f) > Tp(10) * eps)
6481         {
6482           const Tp frac = diff / f0;
6483           if (std::abs(frac) > max_abs_frac)
6484             max_abs_frac = std::abs(frac);
6485         }
6486     }
6487   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6488 }
6489
6490 // Test data for k=0.30000000000000004, nu=0.40000000000000002.
6491 testcase_ellint_3<double> data125[] = {
6492   { -0.0000000000000000, 0.30000000000000004, 0.40000000000000002, 
6493           0.0000000000000000 },
6494   { 0.17391220945982730, 0.30000000000000004, 0.40000000000000002, 
6495           0.17453292519943295 },
6496   { 0.34429133937639689, 0.30000000000000004, 0.40000000000000002, 
6497           0.34906585039886590 },
6498   { 0.50845471668581632, 0.30000000000000004, 0.40000000000000002, 
6499           0.52359877559829882 },
6500   { 0.66502347027873854, 0.30000000000000004, 0.40000000000000002, 
6501           0.69813170079773179 },
6502   { 0.81389191978012254, 0.30000000000000004, 0.40000000000000002, 
6503           0.87266462599716477 },
6504   { 0.95590618002140593, 0.30000000000000004, 0.40000000000000002, 
6505           1.0471975511965976 },
6506   { 1.0924915195213121, 0.30000000000000004, 0.40000000000000002, 
6507           1.2217304763960306 },
6508   { 1.2253651604038058, 0.30000000000000004, 0.40000000000000002, 
6509           1.3962634015954636 },
6510   { 1.3563643538969761, 0.30000000000000004, 0.40000000000000002, 
6511           1.5707963267948966 },
6512 };
6513
6514 // Test function for k=0.30000000000000004, nu=0.40000000000000002.
6515 template <typename Tp>
6516 void test125()
6517 {
6518   const Tp eps = std::numeric_limits<Tp>::epsilon();
6519   Tp max_abs_diff = -Tp(1);
6520   Tp max_abs_frac = -Tp(1);
6521   unsigned int num_datum = sizeof(data125)
6522                          / sizeof(testcase_ellint_3<double>);
6523   for (unsigned int i = 0; i < num_datum; ++i)
6524     {
6525       const Tp f = std::tr1::ellint_3(Tp(data125[i].k), Tp(data125[i].nu),
6526                    Tp(data125[i].phi));
6527       const Tp f0 = data125[i].f0;
6528       const Tp diff = f - f0;
6529       if (std::abs(diff) > max_abs_diff)
6530         max_abs_diff = std::abs(diff);
6531       if (std::abs(f0) > Tp(10) * eps
6532        && std::abs(f) > Tp(10) * eps)
6533         {
6534           const Tp frac = diff / f0;
6535           if (std::abs(frac) > max_abs_frac)
6536             max_abs_frac = std::abs(frac);
6537         }
6538     }
6539   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6540 }
6541
6542 // Test data for k=0.30000000000000004, nu=0.50000000000000000.
6543 testcase_ellint_3<double> data126[] = {
6544   { -0.0000000000000000, 0.30000000000000004, 0.50000000000000000, 
6545           0.0000000000000000 },
6546   { 0.17373875742088235, 0.30000000000000004, 0.50000000000000000, 
6547           0.17453292519943295 },
6548   { 0.34298690571124157, 0.30000000000000004, 0.50000000000000000, 
6549           0.34906585039886590 },
6550   { 0.50445214859646936, 0.30000000000000004, 0.50000000000000000, 
6551           0.52359877559829882 },
6552   { 0.65660648352418516, 0.30000000000000004, 0.50000000000000000, 
6553           0.69813170079773179 },
6554   { 0.79953670639287289, 0.30000000000000004, 0.50000000000000000, 
6555           0.87266462599716477 },
6556   { 0.93443393926588558, 0.30000000000000004, 0.50000000000000000, 
6557           1.0471975511965976 },
6558   { 1.0630838369016911, 0.30000000000000004, 0.50000000000000000, 
6559           1.2217304763960306 },
6560   { 1.1875197325653026, 0.30000000000000004, 0.50000000000000000, 
6561           1.3962634015954636 },
6562   { 1.3098448759814960, 0.30000000000000004, 0.50000000000000000, 
6563           1.5707963267948966 },
6564 };
6565
6566 // Test function for k=0.30000000000000004, nu=0.50000000000000000.
6567 template <typename Tp>
6568 void test126()
6569 {
6570   const Tp eps = std::numeric_limits<Tp>::epsilon();
6571   Tp max_abs_diff = -Tp(1);
6572   Tp max_abs_frac = -Tp(1);
6573   unsigned int num_datum = sizeof(data126)
6574                          / sizeof(testcase_ellint_3<double>);
6575   for (unsigned int i = 0; i < num_datum; ++i)
6576     {
6577       const Tp f = std::tr1::ellint_3(Tp(data126[i].k), Tp(data126[i].nu),
6578                    Tp(data126[i].phi));
6579       const Tp f0 = data126[i].f0;
6580       const Tp diff = f - f0;
6581       if (std::abs(diff) > max_abs_diff)
6582         max_abs_diff = std::abs(diff);
6583       if (std::abs(f0) > Tp(10) * eps
6584        && std::abs(f) > Tp(10) * eps)
6585         {
6586           const Tp frac = diff / f0;
6587           if (std::abs(frac) > max_abs_frac)
6588             max_abs_frac = std::abs(frac);
6589         }
6590     }
6591   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6592 }
6593
6594 // Test data for k=0.30000000000000004, nu=0.59999999999999998.
6595 testcase_ellint_3<double> data127[] = {
6596   { -0.0000000000000000, 0.30000000000000004, 0.59999999999999998, 
6597           0.0000000000000000 },
6598   { 0.17356592428950826, 0.30000000000000004, 0.59999999999999998, 
6599           0.17453292519943295 },
6600   { 0.34169984536697379, 0.30000000000000004, 0.59999999999999998, 
6601           0.34906585039886590 },
6602   { 0.50055748266498457, 0.30000000000000004, 0.59999999999999998, 
6603           0.52359877559829882 },
6604   { 0.64854298527106768, 0.30000000000000004, 0.59999999999999998, 
6605           0.69813170079773179 },
6606   { 0.78599329284207431, 0.30000000000000004, 0.59999999999999998, 
6607           0.87266462599716477 },
6608   { 0.91445452089128221, 0.30000000000000004, 0.59999999999999998, 
6609           1.0471975511965976 },
6610   { 1.0360412952290587, 0.30000000000000004, 0.59999999999999998, 
6611           1.2217304763960306 },
6612   { 1.1530473919778639, 0.30000000000000004, 0.59999999999999998, 
6613           1.3962634015954636 },
6614   { 1.2677758800420666, 0.30000000000000004, 0.59999999999999998, 
6615           1.5707963267948966 },
6616 };
6617
6618 // Test function for k=0.30000000000000004, nu=0.59999999999999998.
6619 template <typename Tp>
6620 void test127()
6621 {
6622   const Tp eps = std::numeric_limits<Tp>::epsilon();
6623   Tp max_abs_diff = -Tp(1);
6624   Tp max_abs_frac = -Tp(1);
6625   unsigned int num_datum = sizeof(data127)
6626                          / sizeof(testcase_ellint_3<double>);
6627   for (unsigned int i = 0; i < num_datum; ++i)
6628     {
6629       const Tp f = std::tr1::ellint_3(Tp(data127[i].k), Tp(data127[i].nu),
6630                    Tp(data127[i].phi));
6631       const Tp f0 = data127[i].f0;
6632       const Tp diff = f - f0;
6633       if (std::abs(diff) > max_abs_diff)
6634         max_abs_diff = std::abs(diff);
6635       if (std::abs(f0) > Tp(10) * eps
6636        && std::abs(f) > Tp(10) * eps)
6637         {
6638           const Tp frac = diff / f0;
6639           if (std::abs(frac) > max_abs_frac)
6640             max_abs_frac = std::abs(frac);
6641         }
6642     }
6643   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6644 }
6645
6646 // Test data for k=0.30000000000000004, nu=0.69999999999999996.
6647 testcase_ellint_3<double> data128[] = {
6648   { -0.0000000000000000, 0.30000000000000004, 0.69999999999999996, 
6649           0.0000000000000000 },
6650   { 0.17339370613812227, 0.30000000000000004, 0.69999999999999996, 
6651           0.17453292519943295 },
6652   { 0.34042975138455933, 0.30000000000000004, 0.69999999999999996, 
6653           0.34906585039886590 },
6654   { 0.49676568368075985, 0.30000000000000004, 0.69999999999999996, 
6655           0.52359877559829882 },
6656   { 0.64080774055753720, 0.30000000000000004, 0.69999999999999996, 
6657           0.69813170079773179 },
6658   { 0.77318507779667278, 0.30000000000000004, 0.69999999999999996, 
6659           0.87266462599716477 },
6660   { 0.89579782346548631, 0.30000000000000004, 0.69999999999999996, 
6661           1.0471975511965976 },
6662   { 1.0110573286052202, 0.30000000000000004, 0.69999999999999996, 
6663           1.2217304763960306 },
6664   { 1.1214710972949633, 0.30000000000000004, 0.69999999999999996, 
6665           1.3962634015954636 },
6666   { 1.2294913236274980, 0.30000000000000004, 0.69999999999999996, 
6667           1.5707963267948966 },
6668 };
6669
6670 // Test function for k=0.30000000000000004, nu=0.69999999999999996.
6671 template <typename Tp>
6672 void test128()
6673 {
6674   const Tp eps = std::numeric_limits<Tp>::epsilon();
6675   Tp max_abs_diff = -Tp(1);
6676   Tp max_abs_frac = -Tp(1);
6677   unsigned int num_datum = sizeof(data128)
6678                          / sizeof(testcase_ellint_3<double>);
6679   for (unsigned int i = 0; i < num_datum; ++i)
6680     {
6681       const Tp f = std::tr1::ellint_3(Tp(data128[i].k), Tp(data128[i].nu),
6682                    Tp(data128[i].phi));
6683       const Tp f0 = data128[i].f0;
6684       const Tp diff = f - f0;
6685       if (std::abs(diff) > max_abs_diff)
6686         max_abs_diff = std::abs(diff);
6687       if (std::abs(f0) > Tp(10) * eps
6688        && std::abs(f) > Tp(10) * eps)
6689         {
6690           const Tp frac = diff / f0;
6691           if (std::abs(frac) > max_abs_frac)
6692             max_abs_frac = std::abs(frac);
6693         }
6694     }
6695   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6696 }
6697
6698 // Test data for k=0.30000000000000004, nu=0.80000000000000004.
6699 testcase_ellint_3<double> data129[] = {
6700   { -0.0000000000000000, 0.30000000000000004, 0.80000000000000004, 
6701           0.0000000000000000 },
6702   { 0.17322209907520361, 0.30000000000000004, 0.80000000000000004, 
6703           0.17453292519943295 },
6704   { 0.33917623046949996, 0.30000000000000004, 0.80000000000000004, 
6705           0.34906585039886590 },
6706   { 0.49307204894329176, 0.30000000000000004, 0.80000000000000004, 
6707           0.52359877559829882 },
6708   { 0.63337802830291723, 0.30000000000000004, 0.80000000000000004, 
6709           0.69813170079773179 },
6710   { 0.76104540997689407, 0.30000000000000004, 0.80000000000000004, 
6711           0.87266462599716477 },
6712   { 0.87832009635450736, 0.30000000000000004, 0.80000000000000004, 
6713           1.0471975511965976 },
6714   { 0.98787879723171790, 0.30000000000000004, 0.80000000000000004, 
6715           1.2217304763960306 },
6716   { 1.0924036340069336, 0.30000000000000004, 0.80000000000000004, 
6717           1.3962634015954636 },
6718   { 1.1944567571590046, 0.30000000000000004, 0.80000000000000004, 
6719           1.5707963267948966 },
6720 };
6721
6722 // Test function for k=0.30000000000000004, nu=0.80000000000000004.
6723 template <typename Tp>
6724 void test129()
6725 {
6726   const Tp eps = std::numeric_limits<Tp>::epsilon();
6727   Tp max_abs_diff = -Tp(1);
6728   Tp max_abs_frac = -Tp(1);
6729   unsigned int num_datum = sizeof(data129)
6730                          / sizeof(testcase_ellint_3<double>);
6731   for (unsigned int i = 0; i < num_datum; ++i)
6732     {
6733       const Tp f = std::tr1::ellint_3(Tp(data129[i].k), Tp(data129[i].nu),
6734                    Tp(data129[i].phi));
6735       const Tp f0 = data129[i].f0;
6736       const Tp diff = f - f0;
6737       if (std::abs(diff) > max_abs_diff)
6738         max_abs_diff = std::abs(diff);
6739       if (std::abs(f0) > Tp(10) * eps
6740        && std::abs(f) > Tp(10) * eps)
6741         {
6742           const Tp frac = diff / f0;
6743           if (std::abs(frac) > max_abs_frac)
6744             max_abs_frac = std::abs(frac);
6745         }
6746     }
6747   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6748 }
6749
6750 // Test data for k=0.30000000000000004, nu=0.90000000000000002.
6751 testcase_ellint_3<double> data130[] = {
6752   { -0.0000000000000000, 0.30000000000000004, 0.90000000000000002, 
6753           0.0000000000000000 },
6754   { 0.17305109924485948, 0.30000000000000004, 0.90000000000000002, 
6755           0.17453292519943295 },
6756   { 0.33793890239556984, 0.30000000000000004, 0.90000000000000002, 
6757           0.34906585039886590 },
6758   { 0.48947218005089738, 0.30000000000000004, 0.90000000000000002, 
6759           0.52359877559829882 },
6760   { 0.62623332340775151, 0.30000000000000004, 0.90000000000000002, 
6761           0.69813170079773179 },
6762   { 0.74951596581511148, 0.30000000000000004, 0.90000000000000002, 
6763           0.87266462599716477 },
6764   { 0.86189886597756005, 0.30000000000000004, 0.90000000000000002, 
6765           1.0471975511965976 },
6766   { 0.96629451153092005, 0.30000000000000004, 0.90000000000000002, 
6767           1.2217304763960306 },
6768   { 1.0655269133492680, 0.30000000000000004, 0.90000000000000002, 
6769           1.3962634015954636 },
6770   { 1.1622376896064912, 0.30000000000000004, 0.90000000000000002, 
6771           1.5707963267948966 },
6772 };
6773
6774 // Test function for k=0.30000000000000004, nu=0.90000000000000002.
6775 template <typename Tp>
6776 void test130()
6777 {
6778   const Tp eps = std::numeric_limits<Tp>::epsilon();
6779   Tp max_abs_diff = -Tp(1);
6780   Tp max_abs_frac = -Tp(1);
6781   unsigned int num_datum = sizeof(data130)
6782                          / sizeof(testcase_ellint_3<double>);
6783   for (unsigned int i = 0; i < num_datum; ++i)
6784     {
6785       const Tp f = std::tr1::ellint_3(Tp(data130[i].k), Tp(data130[i].nu),
6786                    Tp(data130[i].phi));
6787       const Tp f0 = data130[i].f0;
6788       const Tp diff = f - f0;
6789       if (std::abs(diff) > max_abs_diff)
6790         max_abs_diff = std::abs(diff);
6791       if (std::abs(f0) > Tp(10) * eps
6792        && std::abs(f) > Tp(10) * eps)
6793         {
6794           const Tp frac = diff / f0;
6795           if (std::abs(frac) > max_abs_frac)
6796             max_abs_frac = std::abs(frac);
6797         }
6798     }
6799   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6800 }
6801
6802 // Test data for k=0.39999999999999991, nu=0.0000000000000000.
6803 testcase_ellint_3<double> data131[] = {
6804   { -0.0000000000000000, 0.39999999999999991, 0.0000000000000000, 
6805           0.0000000000000000 },
6806   { 0.17467414669441531, 0.39999999999999991, 0.0000000000000000, 
6807           0.17453292519943295 },
6808   { 0.35018222772483443, 0.39999999999999991, 0.0000000000000000, 
6809           0.34906585039886590 },
6810   { 0.52729015917508748, 0.39999999999999991, 0.0000000000000000, 
6811           0.52359877559829882 },
6812   { 0.70662374407341255, 0.39999999999999991, 0.0000000000000000, 
6813           0.69813170079773179 },
6814   { 0.88859210497602170, 0.39999999999999991, 0.0000000000000000, 
6815           0.87266462599716477 },
6816   { 1.0733136290471379, 0.39999999999999991, 0.0000000000000000, 
6817           1.0471975511965976 },
6818   { 1.2605612170157061, 0.39999999999999991, 0.0000000000000000, 
6819           1.2217304763960306 },
6820   { 1.4497513956433437, 0.39999999999999991, 0.0000000000000000, 
6821           1.3962634015954636 },
6822   { 1.6399998658645112, 0.39999999999999991, 0.0000000000000000, 
6823           1.5707963267948966 },
6824 };
6825
6826 // Test function for k=0.39999999999999991, nu=0.0000000000000000.
6827 template <typename Tp>
6828 void test131()
6829 {
6830   const Tp eps = std::numeric_limits<Tp>::epsilon();
6831   Tp max_abs_diff = -Tp(1);
6832   Tp max_abs_frac = -Tp(1);
6833   unsigned int num_datum = sizeof(data131)
6834                          / sizeof(testcase_ellint_3<double>);
6835   for (unsigned int i = 0; i < num_datum; ++i)
6836     {
6837       const Tp f = std::tr1::ellint_3(Tp(data131[i].k), Tp(data131[i].nu),
6838                    Tp(data131[i].phi));
6839       const Tp f0 = data131[i].f0;
6840       const Tp diff = f - f0;
6841       if (std::abs(diff) > max_abs_diff)
6842         max_abs_diff = std::abs(diff);
6843       if (std::abs(f0) > Tp(10) * eps
6844        && std::abs(f) > Tp(10) * eps)
6845         {
6846           const Tp frac = diff / f0;
6847           if (std::abs(frac) > max_abs_frac)
6848             max_abs_frac = std::abs(frac);
6849         }
6850     }
6851   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6852 }
6853
6854 // Test data for k=0.39999999999999991, nu=0.10000000000000001.
6855 testcase_ellint_3<double> data132[] = {
6856   { -0.0000000000000000, 0.39999999999999991, 0.10000000000000001, 
6857           0.0000000000000000 },
6858   { 0.17449806706684673, 0.39999999999999991, 0.10000000000000001, 
6859           0.17453292519943295 },
6860   { 0.34880048623856075, 0.39999999999999991, 0.10000000000000001, 
6861           0.34906585039886590 },
6862   { 0.52277322065757403, 0.39999999999999991, 0.10000000000000001, 
6863           0.52359877559829882 },
6864   { 0.69638072056918376, 0.39999999999999991, 0.10000000000000001, 
6865           0.69813170079773179 },
6866   { 0.86968426619831540, 0.39999999999999991, 0.10000000000000001, 
6867           0.87266462599716477 },
6868   { 1.0428044206578095, 0.39999999999999991, 0.10000000000000001, 
6869           1.0471975511965976 },
6870   { 1.2158651158274378, 0.39999999999999991, 0.10000000000000001, 
6871           1.2217304763960306 },
6872   { 1.3889447129893322, 0.39999999999999991, 0.10000000000000001, 
6873           1.3962634015954636 },
6874   { 1.5620566886683604, 0.39999999999999991, 0.10000000000000001, 
6875           1.5707963267948966 },
6876 };
6877
6878 // Test function for k=0.39999999999999991, nu=0.10000000000000001.
6879 template <typename Tp>
6880 void test132()
6881 {
6882   const Tp eps = std::numeric_limits<Tp>::epsilon();
6883   Tp max_abs_diff = -Tp(1);
6884   Tp max_abs_frac = -Tp(1);
6885   unsigned int num_datum = sizeof(data132)
6886                          / sizeof(testcase_ellint_3<double>);
6887   for (unsigned int i = 0; i < num_datum; ++i)
6888     {
6889       const Tp f = std::tr1::ellint_3(Tp(data132[i].k), Tp(data132[i].nu),
6890                    Tp(data132[i].phi));
6891       const Tp f0 = data132[i].f0;
6892       const Tp diff = f - f0;
6893       if (std::abs(diff) > max_abs_diff)
6894         max_abs_diff = std::abs(diff);
6895       if (std::abs(f0) > Tp(10) * eps
6896        && std::abs(f) > Tp(10) * eps)
6897         {
6898           const Tp frac = diff / f0;
6899           if (std::abs(frac) > max_abs_frac)
6900             max_abs_frac = std::abs(frac);
6901         }
6902     }
6903   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6904 }
6905
6906 // Test data for k=0.39999999999999991, nu=0.20000000000000001.
6907 testcase_ellint_3<double> data133[] = {
6908   { -0.0000000000000000, 0.39999999999999991, 0.20000000000000001, 
6909           0.0000000000000000 },
6910   { 0.17432262290723399, 0.39999999999999991, 0.20000000000000001, 
6911           0.17453292519943295 },
6912   { 0.34743795258968596, 0.39999999999999991, 0.20000000000000001, 
6913           0.34906585039886590 },
6914   { 0.51838919472805123, 0.39999999999999991, 0.20000000000000001, 
6915           0.52359877559829882 },
6916   { 0.68663134739057918, 0.39999999999999991, 0.20000000000000001, 
6917           0.69813170079773179 },
6918   { 0.85206432981833979, 0.39999999999999991, 0.20000000000000001, 
6919           0.87266462599716477 },
6920   { 1.0149595349004430, 0.39999999999999991, 0.20000000000000001, 
6921           1.0471975511965976 },
6922   { 1.1758349405464676, 0.39999999999999991, 0.20000000000000001, 
6923           1.2217304763960306 },
6924   { 1.3353337673882635, 0.39999999999999991, 0.20000000000000001, 
6925           1.3962634015954636 },
6926   { 1.4941414344266770, 0.39999999999999991, 0.20000000000000001, 
6927           1.5707963267948966 },
6928 };
6929
6930 // Test function for k=0.39999999999999991, nu=0.20000000000000001.
6931 template <typename Tp>
6932 void test133()
6933 {
6934   const Tp eps = std::numeric_limits<Tp>::epsilon();
6935   Tp max_abs_diff = -Tp(1);
6936   Tp max_abs_frac = -Tp(1);
6937   unsigned int num_datum = sizeof(data133)
6938                          / sizeof(testcase_ellint_3<double>);
6939   for (unsigned int i = 0; i < num_datum; ++i)
6940     {
6941       const Tp f = std::tr1::ellint_3(Tp(data133[i].k), Tp(data133[i].nu),
6942                    Tp(data133[i].phi));
6943       const Tp f0 = data133[i].f0;
6944       const Tp diff = f - f0;
6945       if (std::abs(diff) > max_abs_diff)
6946         max_abs_diff = std::abs(diff);
6947       if (std::abs(f0) > Tp(10) * eps
6948        && std::abs(f) > Tp(10) * eps)
6949         {
6950           const Tp frac = diff / f0;
6951           if (std::abs(frac) > max_abs_frac)
6952             max_abs_frac = std::abs(frac);
6953         }
6954     }
6955   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6956 }
6957
6958 // Test data for k=0.39999999999999991, nu=0.29999999999999999.
6959 testcase_ellint_3<double> data134[] = {
6960   { -0.0000000000000000, 0.39999999999999991, 0.29999999999999999, 
6961           0.0000000000000000 },
6962   { 0.17414781013591543, 0.39999999999999991, 0.29999999999999999, 
6963           0.17453292519943295 },
6964   { 0.34609415696777285, 0.39999999999999991, 0.29999999999999999, 
6965           0.34906585039886590 },
6966   { 0.51413131295862546, 0.39999999999999991, 0.29999999999999999, 
6967           0.52359877559829882 },
6968   { 0.67733527622935630, 0.39999999999999991, 0.29999999999999999, 
6969           0.69813170079773179 },
6970   { 0.83558675182733266, 0.39999999999999991, 0.29999999999999999, 
6971           0.87266462599716477 },
6972   { 0.98940140808865906, 0.39999999999999991, 0.29999999999999999, 
6973           1.0471975511965976 },
6974   { 1.1396968797728058, 0.39999999999999991, 0.29999999999999999, 
6975           1.2217304763960306 },
6976   { 1.2875920037865087, 0.39999999999999991, 0.29999999999999999, 
6977           1.3962634015954636 },
6978   { 1.4342789859950078, 0.39999999999999991, 0.29999999999999999, 
6979           1.5707963267948966 },
6980 };
6981
6982 // Test function for k=0.39999999999999991, nu=0.29999999999999999.
6983 template <typename Tp>
6984 void test134()
6985 {
6986   const Tp eps = std::numeric_limits<Tp>::epsilon();
6987   Tp max_abs_diff = -Tp(1);
6988   Tp max_abs_frac = -Tp(1);
6989   unsigned int num_datum = sizeof(data134)
6990                          / sizeof(testcase_ellint_3<double>);
6991   for (unsigned int i = 0; i < num_datum; ++i)
6992     {
6993       const Tp f = std::tr1::ellint_3(Tp(data134[i].k), Tp(data134[i].nu),
6994                    Tp(data134[i].phi));
6995       const Tp f0 = data134[i].f0;
6996       const Tp diff = f - f0;
6997       if (std::abs(diff) > max_abs_diff)
6998         max_abs_diff = std::abs(diff);
6999       if (std::abs(f0) > Tp(10) * eps
7000        && std::abs(f) > Tp(10) * eps)
7001         {
7002           const Tp frac = diff / f0;
7003           if (std::abs(frac) > max_abs_frac)
7004             max_abs_frac = std::abs(frac);
7005         }
7006     }
7007   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7008 }
7009
7010 // Test data for k=0.39999999999999991, nu=0.40000000000000002.
7011 testcase_ellint_3<double> data135[] = {
7012   { -0.0000000000000000, 0.39999999999999991, 0.40000000000000002, 
7013           0.0000000000000000 },
7014   { 0.17397362471112710, 0.39999999999999991, 0.40000000000000002, 
7015           0.17453292519943295 },
7016   { 0.34476864603333196, 0.39999999999999991, 0.40000000000000002, 
7017           0.34906585039886590 },
7018   { 0.50999329415379357, 0.39999999999999991, 0.40000000000000002, 
7019           0.52359877559829882 },
7020   { 0.66845674551396017, 0.39999999999999991, 0.40000000000000002, 
7021           0.69813170079773179 },
7022   { 0.82012848346231748, 0.39999999999999991, 0.40000000000000002, 
7023           0.87266462599716477 },
7024   { 0.96582449258349057, 0.39999999999999991, 0.40000000000000002, 
7025           1.0471975511965976 },
7026   { 1.1068473749476286, 0.39999999999999991, 0.40000000000000002, 
7027           1.2217304763960306 },
7028   { 1.2447132729159986, 0.39999999999999991, 0.40000000000000002, 
7029           1.3962634015954636 },
7030   { 1.3809986210732901, 0.39999999999999991, 0.40000000000000002, 
7031           1.5707963267948966 },
7032 };
7033
7034 // Test function for k=0.39999999999999991, nu=0.40000000000000002.
7035 template <typename Tp>
7036 void test135()
7037 {
7038   const Tp eps = std::numeric_limits<Tp>::epsilon();
7039   Tp max_abs_diff = -Tp(1);
7040   Tp max_abs_frac = -Tp(1);
7041   unsigned int num_datum = sizeof(data135)
7042                          / sizeof(testcase_ellint_3<double>);
7043   for (unsigned int i = 0; i < num_datum; ++i)
7044     {
7045       const Tp f = std::tr1::ellint_3(Tp(data135[i].k), Tp(data135[i].nu),
7046                    Tp(data135[i].phi));
7047       const Tp f0 = data135[i].f0;
7048       const Tp diff = f - f0;
7049       if (std::abs(diff) > max_abs_diff)
7050         max_abs_diff = std::abs(diff);
7051       if (std::abs(f0) > Tp(10) * eps
7052        && std::abs(f) > Tp(10) * eps)
7053         {
7054           const Tp frac = diff / f0;
7055           if (std::abs(frac) > max_abs_frac)
7056             max_abs_frac = std::abs(frac);
7057         }
7058     }
7059   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7060 }
7061
7062 // Test data for k=0.39999999999999991, nu=0.50000000000000000.
7063 testcase_ellint_3<double> data136[] = {
7064   { -0.0000000000000000, 0.39999999999999991, 0.50000000000000000, 
7065           0.0000000000000000 },
7066   { 0.17380006262854139, 0.39999999999999991, 0.50000000000000000, 
7067           0.17453292519943295 },
7068   { 0.34346098216756610, 0.39999999999999991, 0.50000000000000000, 
7069           0.34906585039886590 },
7070   { 0.50596929935059420, 0.39999999999999991, 0.50000000000000000, 
7071           0.52359877559829882 },
7072   { 0.65996392089131262, 0.39999999999999991, 0.50000000000000000, 
7073           0.69813170079773179 },
7074   { 0.80558463511364786, 0.39999999999999991, 0.50000000000000000, 
7075           0.87266462599716477 },
7076   { 0.94397834522857704, 0.39999999999999991, 0.50000000000000000, 
7077           1.0471975511965976 },
7078   { 1.0768075114108115, 0.39999999999999991, 0.50000000000000000, 
7079           1.2217304763960306 },
7080   { 1.2059184624251329, 0.39999999999999991, 0.50000000000000000, 
7081           1.3962634015954636 },
7082   { 1.3331797176377398, 0.39999999999999991, 0.50000000000000000, 
7083           1.5707963267948966 },
7084 };
7085
7086 // Test function for k=0.39999999999999991, nu=0.50000000000000000.
7087 template <typename Tp>
7088 void test136()
7089 {
7090   const Tp eps = std::numeric_limits<Tp>::epsilon();
7091   Tp max_abs_diff = -Tp(1);
7092   Tp max_abs_frac = -Tp(1);
7093   unsigned int num_datum = sizeof(data136)
7094                          / sizeof(testcase_ellint_3<double>);
7095   for (unsigned int i = 0; i < num_datum; ++i)
7096     {
7097       const Tp f = std::tr1::ellint_3(Tp(data136[i].k), Tp(data136[i].nu),
7098                    Tp(data136[i].phi));
7099       const Tp f0 = data136[i].f0;
7100       const Tp diff = f - f0;
7101       if (std::abs(diff) > max_abs_diff)
7102         max_abs_diff = std::abs(diff);
7103       if (std::abs(f0) > Tp(10) * eps
7104        && std::abs(f) > Tp(10) * eps)
7105         {
7106           const Tp frac = diff / f0;
7107           if (std::abs(frac) > max_abs_frac)
7108             max_abs_frac = std::abs(frac);
7109         }
7110     }
7111   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7112 }
7113
7114 // Test data for k=0.39999999999999991, nu=0.59999999999999998.
7115 testcase_ellint_3<double> data137[] = {
7116   { -0.0000000000000000, 0.39999999999999991, 0.59999999999999998, 
7117           0.0000000000000000 },
7118   { 0.17362711992081248, 0.39999999999999991, 0.59999999999999998, 
7119           0.17453292519943295 },
7120   { 0.34217074276403953, 0.39999999999999991, 0.59999999999999998, 
7121           0.34906585039886590 },
7122   { 0.50205389185761617, 0.39999999999999991, 0.59999999999999998, 
7123           0.52359877559829882 },
7124   { 0.65182834920372745, 0.39999999999999991, 0.59999999999999998, 
7125           0.69813170079773179 },
7126   { 0.79186512820565136, 0.39999999999999991, 0.59999999999999998, 
7127           0.87266462599716477 },
7128   { 0.92365535916287134, 0.39999999999999991, 0.59999999999999998, 
7129           1.0471975511965976 },
7130   { 1.0491915663957907, 0.39999999999999991, 0.59999999999999998, 
7131           1.2217304763960306 },
7132   { 1.1705934291745104, 0.39999999999999991, 0.59999999999999998, 
7133           1.3962634015954636 },
7134   { 1.2899514672527024, 0.39999999999999991, 0.59999999999999998, 
7135           1.5707963267948966 },
7136 };
7137
7138 // Test function for k=0.39999999999999991, nu=0.59999999999999998.
7139 template <typename Tp>
7140 void test137()
7141 {
7142   const Tp eps = std::numeric_limits<Tp>::epsilon();
7143   Tp max_abs_diff = -Tp(1);
7144   Tp max_abs_frac = -Tp(1);
7145   unsigned int num_datum = sizeof(data137)
7146                          / sizeof(testcase_ellint_3<double>);
7147   for (unsigned int i = 0; i < num_datum; ++i)
7148     {
7149       const Tp f = std::tr1::ellint_3(Tp(data137[i].k), Tp(data137[i].nu),
7150                    Tp(data137[i].phi));
7151       const Tp f0 = data137[i].f0;
7152       const Tp diff = f - f0;
7153       if (std::abs(diff) > max_abs_diff)
7154         max_abs_diff = std::abs(diff);
7155       if (std::abs(f0) > Tp(10) * eps
7156        && std::abs(f) > Tp(10) * eps)
7157         {
7158           const Tp frac = diff / f0;
7159           if (std::abs(frac) > max_abs_frac)
7160             max_abs_frac = std::abs(frac);
7161         }
7162     }
7163   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7164 }
7165
7166 // Test data for k=0.39999999999999991, nu=0.69999999999999996.
7167 testcase_ellint_3<double> data138[] = {
7168   { -0.0000000000000000, 0.39999999999999991, 0.69999999999999996, 
7169           0.0000000000000000 },
7170   { 0.17345479265712871, 0.39999999999999991, 0.69999999999999996, 
7171           0.17453292519943295 },
7172   { 0.34089751955950354, 0.39999999999999991, 0.69999999999999996, 
7173           0.34906585039886590 },
7174   { 0.49824200167361343, 0.39999999999999991, 0.69999999999999996, 
7175           0.52359877559829882 },
7176   { 0.64402450341199413, 0.39999999999999991, 0.69999999999999996, 
7177           0.69813170079773179 },
7178   { 0.77889207804122873, 0.39999999999999991, 0.69999999999999996, 
7179           0.87266462599716477 },
7180   { 0.90468169720957992, 0.39999999999999991, 0.69999999999999996, 
7181           1.0471975511965976 },
7182   { 1.0236847823692916, 0.39999999999999991, 0.69999999999999996, 
7183           1.2217304763960306 },
7184   { 1.1382465247425164, 0.39999999999999991, 0.69999999999999996, 
7185           1.3962634015954636 },
7186   { 1.2506255923253344, 0.39999999999999991, 0.69999999999999996, 
7187           1.5707963267948966 },
7188 };
7189
7190 // Test function for k=0.39999999999999991, nu=0.69999999999999996.
7191 template <typename Tp>
7192 void test138()
7193 {
7194   const Tp eps = std::numeric_limits<Tp>::epsilon();
7195   Tp max_abs_diff = -Tp(1);
7196   Tp max_abs_frac = -Tp(1);
7197   unsigned int num_datum = sizeof(data138)
7198                          / sizeof(testcase_ellint_3<double>);
7199   for (unsigned int i = 0; i < num_datum; ++i)
7200     {
7201       const Tp f = std::tr1::ellint_3(Tp(data138[i].k), Tp(data138[i].nu),
7202                    Tp(data138[i].phi));
7203       const Tp f0 = data138[i].f0;
7204       const Tp diff = f - f0;
7205       if (std::abs(diff) > max_abs_diff)
7206         max_abs_diff = std::abs(diff);
7207       if (std::abs(f0) > Tp(10) * eps
7208        && 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 k=0.39999999999999991, nu=0.80000000000000004.
7219 testcase_ellint_3<double> data139[] = {
7220   { -0.0000000000000000, 0.39999999999999991, 0.80000000000000004, 
7221           0.0000000000000000 },
7222   { 0.17328307694277156, 0.39999999999999991, 0.80000000000000004, 
7223           0.17453292519943295 },
7224   { 0.33964091800132007, 0.39999999999999991, 0.80000000000000004, 
7225           0.34906585039886590 },
7226   { 0.49452889372467451, 0.39999999999999991, 0.80000000000000004, 
7227           0.52359877559829882 },
7228   { 0.63652940095937327, 0.39999999999999991, 0.80000000000000004, 
7229           0.69813170079773179 },
7230   { 0.76659772511159097, 0.39999999999999991, 0.80000000000000004, 
7231           0.87266462599716477 },
7232   { 0.88691047977338111, 0.39999999999999991, 0.80000000000000004, 
7233           1.0471975511965976 },
7234   { 1.0000273200611640, 0.39999999999999991, 0.80000000000000004, 
7235           1.2217304763960306 },
7236   { 1.1084787902188007, 0.39999999999999991, 0.80000000000000004, 
7237           1.3962634015954636 },
7238   { 1.2146499565727209, 0.39999999999999991, 0.80000000000000004, 
7239           1.5707963267948966 },
7240 };
7241
7242 // Test function for k=0.39999999999999991, nu=0.80000000000000004.
7243 template <typename Tp>
7244 void test139()
7245 {
7246   const Tp eps = std::numeric_limits<Tp>::epsilon();
7247   Tp max_abs_diff = -Tp(1);
7248   Tp max_abs_frac = -Tp(1);
7249   unsigned int num_datum = sizeof(data139)
7250                          / sizeof(testcase_ellint_3<double>);
7251   for (unsigned int i = 0; i < num_datum; ++i)
7252     {
7253       const Tp f = std::tr1::ellint_3(Tp(data139[i].k), Tp(data139[i].nu),
7254                    Tp(data139[i].phi));
7255       const Tp f0 = data139[i].f0;
7256       const Tp diff = f - f0;
7257       if (std::abs(diff) > max_abs_diff)
7258         max_abs_diff = std::abs(diff);
7259       if (std::abs(f0) > Tp(10) * eps
7260        && std::abs(f) > Tp(10) * eps)
7261         {
7262           const Tp frac = diff / f0;
7263           if (std::abs(frac) > max_abs_frac)
7264             max_abs_frac = std::abs(frac);
7265         }
7266     }
7267   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7268 }
7269
7270 // Test data for k=0.39999999999999991, nu=0.90000000000000002.
7271 testcase_ellint_3<double> data140[] = {
7272   { -0.0000000000000000, 0.39999999999999991, 0.90000000000000002, 
7273           0.0000000000000000 },
7274   { 0.17311196891868130, 0.39999999999999991, 0.90000000000000002, 
7275           0.17453292519943295 },
7276   { 0.33840055664911906, 0.39999999999999991, 0.90000000000000002, 
7277           0.34906585039886590 },
7278   { 0.49091013944075340, 0.39999999999999991, 0.90000000000000002, 
7279           0.52359877559829882 },
7280   { 0.62932228186809591, 0.39999999999999991, 0.90000000000000002, 
7281           0.69813170079773179 },
7282   { 0.75492278323019801, 0.39999999999999991, 0.90000000000000002, 
7283           0.87266462599716477 },
7284   { 0.87021659043854294, 0.39999999999999991, 0.90000000000000002, 
7285           1.0471975511965976 },
7286   { 0.97800245228239246, 0.39999999999999991, 0.90000000000000002, 
7287           1.2217304763960306 },
7288   { 1.0809625773173694, 0.39999999999999991, 0.90000000000000002, 
7289           1.3962634015954636 },
7290   { 1.1815758115929846, 0.39999999999999991, 0.90000000000000002, 
7291           1.5707963267948966 },
7292 };
7293
7294 // Test function for k=0.39999999999999991, nu=0.90000000000000002.
7295 template <typename Tp>
7296 void test140()
7297 {
7298   const Tp eps = std::numeric_limits<Tp>::epsilon();
7299   Tp max_abs_diff = -Tp(1);
7300   Tp max_abs_frac = -Tp(1);
7301   unsigned int num_datum = sizeof(data140)
7302                          / sizeof(testcase_ellint_3<double>);
7303   for (unsigned int i = 0; i < num_datum; ++i)
7304     {
7305       const Tp f = std::tr1::ellint_3(Tp(data140[i].k), Tp(data140[i].nu),
7306                    Tp(data140[i].phi));
7307       const Tp f0 = data140[i].f0;
7308       const Tp diff = f - f0;
7309       if (std::abs(diff) > max_abs_diff)
7310         max_abs_diff = std::abs(diff);
7311       if (std::abs(f0) > Tp(10) * eps
7312        && std::abs(f) > Tp(10) * eps)
7313         {
7314           const Tp frac = diff / f0;
7315           if (std::abs(frac) > max_abs_frac)
7316             max_abs_frac = std::abs(frac);
7317         }
7318     }
7319   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7320 }
7321
7322 // Test data for k=0.50000000000000000, nu=0.0000000000000000.
7323 testcase_ellint_3<double> data141[] = {
7324   { -0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 
7325           0.0000000000000000 },
7326   { 0.17475385514035785, 0.50000000000000000, 0.0000000000000000, 
7327           0.17453292519943295 },
7328   { 0.35081868470101585, 0.50000000000000000, 0.0000000000000000, 
7329           0.34906585039886590 },
7330   { 0.52942862705190585, 0.50000000000000000, 0.0000000000000000, 
7331           0.52359877559829882 },
7332   { 0.71164727562630326, 0.50000000000000000, 0.0000000000000000, 
7333           0.69813170079773179 },
7334   { 0.89824523594227768, 0.50000000000000000, 0.0000000000000000, 
7335           0.87266462599716477 },
7336   { 1.0895506700518851, 0.50000000000000000, 0.0000000000000000, 
7337           1.0471975511965976 },
7338   { 1.2853005857432933, 0.50000000000000000, 0.0000000000000000, 
7339           1.2217304763960306 },
7340   { 1.4845545520549484, 0.50000000000000000, 0.0000000000000000, 
7341           1.3962634015954636 },
7342   { 1.6857503548125963, 0.50000000000000000, 0.0000000000000000, 
7343           1.5707963267948966 },
7344 };
7345
7346 // Test function for k=0.50000000000000000, nu=0.0000000000000000.
7347 template <typename Tp>
7348 void test141()
7349 {
7350   const Tp eps = std::numeric_limits<Tp>::epsilon();
7351   Tp max_abs_diff = -Tp(1);
7352   Tp max_abs_frac = -Tp(1);
7353   unsigned int num_datum = sizeof(data141)
7354                          / sizeof(testcase_ellint_3<double>);
7355   for (unsigned int i = 0; i < num_datum; ++i)
7356     {
7357       const Tp f = std::tr1::ellint_3(Tp(data141[i].k), Tp(data141[i].nu),
7358                    Tp(data141[i].phi));
7359       const Tp f0 = data141[i].f0;
7360       const Tp diff = f - f0;
7361       if (std::abs(diff) > max_abs_diff)
7362         max_abs_diff = std::abs(diff);
7363       if (std::abs(f0) > Tp(10) * eps
7364        && std::abs(f) > Tp(10) * eps)
7365         {
7366           const Tp frac = diff / f0;
7367           if (std::abs(frac) > max_abs_frac)
7368             max_abs_frac = std::abs(frac);
7369         }
7370     }
7371   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7372 }
7373
7374 // Test data for k=0.50000000000000000, nu=0.10000000000000001.
7375 testcase_ellint_3<double> data142[] = {
7376   { -0.0000000000000000, 0.50000000000000000, 0.10000000000000001, 
7377           0.0000000000000000 },
7378   { 0.17457763120814676, 0.50000000000000000, 0.10000000000000001, 
7379           0.17453292519943295 },
7380   { 0.34943246340849154, 0.50000000000000000, 0.10000000000000001, 
7381           0.34906585039886590 },
7382   { 0.52487937869610801, 0.50000000000000000, 0.10000000000000001, 
7383           0.52359877559829882 },
7384   { 0.70127785096388395, 0.50000000000000000, 0.10000000000000001, 
7385           0.69813170079773179 },
7386   { 0.87898815988624479, 0.50000000000000000, 0.10000000000000001, 
7387           0.87266462599716477 },
7388   { 1.0582764576094172, 0.50000000000000000, 0.10000000000000001, 
7389           1.0471975511965976 },
7390   { 1.2391936844060207, 0.50000000000000000, 0.10000000000000001, 
7391           1.2217304763960306 },
7392   { 1.4214793542995841, 0.50000000000000000, 0.10000000000000001, 
7393           1.3962634015954636 },
7394   { 1.6045524936084892, 0.50000000000000000, 0.10000000000000001, 
7395           1.5707963267948966 },
7396 };
7397
7398 // Test function for k=0.50000000000000000, nu=0.10000000000000001.
7399 template <typename Tp>
7400 void test142()
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(data142)
7406                          / sizeof(testcase_ellint_3<double>);
7407   for (unsigned int i = 0; i < num_datum; ++i)
7408     {
7409       const Tp f = std::tr1::ellint_3(Tp(data142[i].k), Tp(data142[i].nu),
7410                    Tp(data142[i].phi));
7411       const Tp f0 = data142[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
7416        && std::abs(f) > Tp(10) * eps)
7417         {
7418           const Tp frac = diff / f0;
7419           if (std::abs(frac) > max_abs_frac)
7420             max_abs_frac = std::abs(frac);
7421         }
7422     }
7423   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7424 }
7425
7426 // Test data for k=0.50000000000000000, nu=0.20000000000000001.
7427 testcase_ellint_3<double> data143[] = {
7428   { -0.0000000000000000, 0.50000000000000000, 0.20000000000000001, 
7429           0.0000000000000000 },
7430   { 0.17440204336345433, 0.50000000000000000, 0.20000000000000001, 
7431           0.17453292519943295 },
7432   { 0.34806552388338824, 0.50000000000000000, 0.20000000000000001, 
7433           0.34906585039886590 },
7434   { 0.52046416757129821, 0.50000000000000000, 0.20000000000000001, 
7435           0.52359877559829882 },
7436   { 0.69140924550993876, 0.50000000000000000, 0.20000000000000001, 
7437           0.69813170079773179 },
7438   { 0.86104678636125520, 0.50000000000000000, 0.20000000000000001, 
7439           0.87266462599716477 },
7440   { 1.0297439459053981, 0.50000000000000000, 0.20000000000000001, 
7441           1.0471975511965976 },
7442   { 1.1979214112912036, 0.50000000000000000, 0.20000000000000001, 
7443           1.2217304763960306 },
7444   { 1.3659033858648930, 0.50000000000000000, 0.20000000000000001, 
7445           1.3962634015954636 },
7446   { 1.5338490483665983, 0.50000000000000000, 0.20000000000000001, 
7447           1.5707963267948966 },
7448 };
7449
7450 // Test function for k=0.50000000000000000, nu=0.20000000000000001.
7451 template <typename Tp>
7452 void test143()
7453 {
7454   const Tp eps = std::numeric_limits<Tp>::epsilon();
7455   Tp max_abs_diff = -Tp(1);
7456   Tp max_abs_frac = -Tp(1);
7457   unsigned int num_datum = sizeof(data143)
7458                          / sizeof(testcase_ellint_3<double>);
7459   for (unsigned int i = 0; i < num_datum; ++i)
7460     {
7461       const Tp f = std::tr1::ellint_3(Tp(data143[i].k), Tp(data143[i].nu),
7462                    Tp(data143[i].phi));
7463       const Tp f0 = data143[i].f0;
7464       const Tp diff = f - f0;
7465       if (std::abs(diff) > max_abs_diff)
7466         max_abs_diff = std::abs(diff);
7467       if (std::abs(f0) > Tp(10) * eps
7468        && std::abs(f) > Tp(10) * eps)
7469         {
7470           const Tp frac = diff / f0;
7471           if (std::abs(frac) > max_abs_frac)
7472             max_abs_frac = std::abs(frac);
7473         }
7474     }
7475   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7476 }
7477
7478 // Test data for k=0.50000000000000000, nu=0.29999999999999999.
7479 testcase_ellint_3<double> data144[] = {
7480   { -0.0000000000000000, 0.50000000000000000, 0.29999999999999999, 
7481           0.0000000000000000 },
7482   { 0.17422708752228896, 0.50000000000000000, 0.29999999999999999, 
7483           0.17453292519943295 },
7484   { 0.34671739434855858, 0.50000000000000000, 0.29999999999999999, 
7485           0.34906585039886590 },
7486   { 0.51617616305641889, 0.50000000000000000, 0.29999999999999999, 
7487           0.52359877559829882 },
7488   { 0.68200047612545178, 0.50000000000000000, 0.29999999999999999, 
7489           0.69813170079773179 },
7490   { 0.84427217869498372, 0.50000000000000000, 0.29999999999999999, 
7491           0.87266462599716477 },
7492   { 1.0035637821389782, 0.50000000000000000, 0.29999999999999999, 
7493           1.0471975511965976 },
7494   { 1.1606800483933113, 0.50000000000000000, 0.29999999999999999, 
7495           1.2217304763960306 },
7496   { 1.3164407134643459, 0.50000000000000000, 0.29999999999999999, 
7497           1.3962634015954636 },
7498   { 1.4715681939859637, 0.50000000000000000, 0.29999999999999999, 
7499           1.5707963267948966 },
7500 };
7501
7502 // Test function for k=0.50000000000000000, nu=0.29999999999999999.
7503 template <typename Tp>
7504 void test144()
7505 {
7506   const Tp eps = std::numeric_limits<Tp>::epsilon();
7507   Tp max_abs_diff = -Tp(1);
7508   Tp max_abs_frac = -Tp(1);
7509   unsigned int num_datum = sizeof(data144)
7510                          / sizeof(testcase_ellint_3<double>);
7511   for (unsigned int i = 0; i < num_datum; ++i)
7512     {
7513       const Tp f = std::tr1::ellint_3(Tp(data144[i].k), Tp(data144[i].nu),
7514                    Tp(data144[i].phi));
7515       const Tp f0 = data144[i].f0;
7516       const Tp diff = f - f0;
7517       if (std::abs(diff) > max_abs_diff)
7518         max_abs_diff = std::abs(diff);
7519       if (std::abs(f0) > Tp(10) * eps
7520        && std::abs(f) > Tp(10) * eps)
7521         {
7522           const Tp frac = diff / f0;
7523           if (std::abs(frac) > max_abs_frac)
7524             max_abs_frac = std::abs(frac);
7525         }
7526     }
7527   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7528 }
7529
7530 // Test data for k=0.50000000000000000, nu=0.40000000000000002.
7531 testcase_ellint_3<double> data145[] = {
7532   { -0.0000000000000000, 0.50000000000000000, 0.40000000000000002, 
7533           0.0000000000000000 },
7534   { 0.17405275963859917, 0.50000000000000000, 0.40000000000000002, 
7535           0.17453292519943295 },
7536   { 0.34538761957029329, 0.50000000000000000, 0.40000000000000002, 
7537           0.34906585039886590 },
7538   { 0.51200902646603919, 0.50000000000000000, 0.40000000000000002, 
7539           0.52359877559829882 },
7540   { 0.67301522212868792, 0.50000000000000000, 0.40000000000000002, 
7541           0.69813170079773179 },
7542   { 0.82853844466313320, 0.50000000000000000, 0.40000000000000002, 
7543           0.87266462599716477 },
7544   { 0.97942097862681488, 0.50000000000000000, 0.40000000000000002, 
7545           1.0471975511965976 },
7546   { 1.1268429801220616, 0.50000000000000000, 0.40000000000000002, 
7547           1.2217304763960306 },
7548   { 1.2720406704533922, 0.50000000000000000, 0.40000000000000002, 
7549           1.3962634015954636 },
7550   { 1.4161679518465340, 0.50000000000000000, 0.40000000000000002, 
7551           1.5707963267948966 },
7552 };
7553
7554 // Test function for k=0.50000000000000000, nu=0.40000000000000002.
7555 template <typename Tp>
7556 void test145()
7557 {
7558   const Tp eps = std::numeric_limits<Tp>::epsilon();
7559   Tp max_abs_diff = -Tp(1);
7560   Tp max_abs_frac = -Tp(1);
7561   unsigned int num_datum = sizeof(data145)
7562                          / sizeof(testcase_ellint_3<double>);
7563   for (unsigned int i = 0; i < num_datum; ++i)
7564     {
7565       const Tp f = std::tr1::ellint_3(Tp(data145[i].k), Tp(data145[i].nu),
7566                    Tp(data145[i].phi));
7567       const Tp f0 = data145[i].f0;
7568       const Tp diff = f - f0;
7569       if (std::abs(diff) > max_abs_diff)
7570         max_abs_diff = std::abs(diff);
7571       if (std::abs(f0) > Tp(10) * eps
7572        && std::abs(f) > Tp(10) * eps)
7573         {
7574           const Tp frac = diff / f0;
7575           if (std::abs(frac) > max_abs_frac)
7576             max_abs_frac = std::abs(frac);
7577         }
7578     }
7579   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7580 }
7581
7582 // Test data for k=0.50000000000000000, nu=0.50000000000000000.
7583 testcase_ellint_3<double> data146[] = {
7584   { -0.0000000000000000, 0.50000000000000000, 0.50000000000000000, 
7585           0.0000000000000000 },
7586   { 0.17387905570381157, 0.50000000000000000, 0.50000000000000000, 
7587           0.17453292519943295 },
7588   { 0.34407576010465207, 0.50000000000000000, 0.50000000000000000, 
7589           0.34906585039886590 },
7590   { 0.50795686560160835, 0.50000000000000000, 0.50000000000000000, 
7591           0.52359877559829882 },
7592   { 0.66442115453330175, 0.50000000000000000, 0.50000000000000000, 
7593           0.69813170079773179 },
7594   { 0.81373829119355345, 0.50000000000000000, 0.50000000000000000, 
7595           0.87266462599716477 },
7596   { 0.95705743313235825, 0.50000000000000000, 0.50000000000000000, 
7597           1.0471975511965976 },
7598   { 1.0959131991362556, 0.50000000000000000, 0.50000000000000000, 
7599           1.2217304763960306 },
7600   { 1.2318900529754597, 0.50000000000000000, 0.50000000000000000, 
7601           1.3962634015954636 },
7602   { 1.3664739530045971, 0.50000000000000000, 0.50000000000000000, 
7603           1.5707963267948966 },
7604 };
7605
7606 // Test function for k=0.50000000000000000, nu=0.50000000000000000.
7607 template <typename Tp>
7608 void test146()
7609 {
7610   const Tp eps = std::numeric_limits<Tp>::epsilon();
7611   Tp max_abs_diff = -Tp(1);
7612   Tp max_abs_frac = -Tp(1);
7613   unsigned int num_datum = sizeof(data146)
7614                          / sizeof(testcase_ellint_3<double>);
7615   for (unsigned int i = 0; i < num_datum; ++i)
7616     {
7617       const Tp f = std::tr1::ellint_3(Tp(data146[i].k), Tp(data146[i].nu),
7618                    Tp(data146[i].phi));
7619       const Tp f0 = data146[i].f0;
7620       const Tp diff = f - f0;
7621       if (std::abs(diff) > max_abs_diff)
7622         max_abs_diff = std::abs(diff);
7623       if (std::abs(f0) > Tp(10) * eps
7624        && std::abs(f) > Tp(10) * eps)
7625         {
7626           const Tp frac = diff / f0;
7627           if (std::abs(frac) > max_abs_frac)
7628             max_abs_frac = std::abs(frac);
7629         }
7630     }
7631   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7632 }
7633
7634 // Test data for k=0.50000000000000000, nu=0.59999999999999998.
7635 testcase_ellint_3<double> data147[] = {
7636   { -0.0000000000000000, 0.50000000000000000, 0.59999999999999998, 
7637           0.0000000000000000 },
7638   { 0.17370597174637581, 0.50000000000000000, 0.59999999999999998, 
7639           0.17453292519943295 },
7640   { 0.34278139158591414, 0.50000000000000000, 0.59999999999999998, 
7641           0.34906585039886590 },
7642   { 0.50401419439302719, 0.50000000000000000, 0.59999999999999998, 
7643           0.52359877559829882 },
7644   { 0.65618938076167221, 0.50000000000000000, 0.59999999999999998, 
7645           0.69813170079773179 },
7646   { 0.79977959248855424, 0.50000000000000000, 0.59999999999999998, 
7647           0.87266462599716477 },
7648   { 0.93625925190753545, 0.50000000000000000, 0.59999999999999998, 
7649           1.0471975511965976 },
7650   { 1.0674905658379710, 0.50000000000000000, 0.59999999999999998, 
7651           1.2217304763960306 },
7652   { 1.1953481298023048, 0.50000000000000000, 0.59999999999999998, 
7653           1.3962634015954636 },
7654   { 1.3215740290190876, 0.50000000000000000, 0.59999999999999998, 
7655           1.5707963267948966 },
7656 };
7657
7658 // Test function for k=0.50000000000000000, nu=0.59999999999999998.
7659 template <typename Tp>
7660 void test147()
7661 {
7662   const Tp eps = std::numeric_limits<Tp>::epsilon();
7663   Tp max_abs_diff = -Tp(1);
7664   Tp max_abs_frac = -Tp(1);
7665   unsigned int num_datum = sizeof(data147)
7666                          / sizeof(testcase_ellint_3<double>);
7667   for (unsigned int i = 0; i < num_datum; ++i)
7668     {
7669       const Tp f = std::tr1::ellint_3(Tp(data147[i].k), Tp(data147[i].nu),
7670                    Tp(data147[i].phi));
7671       const Tp f0 = data147[i].f0;
7672       const Tp diff = f - f0;
7673       if (std::abs(diff) > max_abs_diff)
7674         max_abs_diff = std::abs(diff);
7675       if (std::abs(f0) > Tp(10) * eps
7676        && std::abs(f) > Tp(10) * eps)
7677         {
7678           const Tp frac = diff / f0;
7679           if (std::abs(frac) > max_abs_frac)
7680             max_abs_frac = std::abs(frac);
7681         }
7682     }
7683   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7684 }
7685
7686 // Test data for k=0.50000000000000000, nu=0.69999999999999996.
7687 testcase_ellint_3<double> data148[] = {
7688   { -0.0000000000000000, 0.50000000000000000, 0.69999999999999996, 
7689           0.0000000000000000 },
7690   { 0.17353350383131641, 0.50000000000000000, 0.69999999999999996, 
7691           0.17453292519943295 },
7692   { 0.34150410405436771, 0.50000000000000000, 0.69999999999999996, 
7693           0.34906585039886590 },
7694   { 0.50017589696443487, 0.50000000000000000, 0.69999999999999996, 
7695           0.52359877559829882 },
7696   { 0.64829398188419962, 0.50000000000000000, 0.69999999999999996, 
7697           0.69813170079773179 },
7698   { 0.78658270782402073, 0.50000000000000000, 0.69999999999999996, 
7699           0.87266462599716477 },
7700   { 0.91684738336675053, 0.50000000000000000, 0.69999999999999996, 
7701           1.0471975511965976 },
7702   { 1.0412486789555937, 0.50000000000000000, 0.69999999999999996, 
7703           1.2217304763960306 },
7704   { 1.1619021847612001, 0.50000000000000000, 0.69999999999999996, 
7705           1.3962634015954636 },
7706   { 1.2807475181182502, 0.50000000000000000, 0.69999999999999996, 
7707           1.5707963267948966 },
7708 };
7709
7710 // Test function for k=0.50000000000000000, nu=0.69999999999999996.
7711 template <typename Tp>
7712 void test148()
7713 {
7714   const Tp eps = std::numeric_limits<Tp>::epsilon();
7715   Tp max_abs_diff = -Tp(1);
7716   Tp max_abs_frac = -Tp(1);
7717   unsigned int num_datum = sizeof(data148)
7718                          / sizeof(testcase_ellint_3<double>);
7719   for (unsigned int i = 0; i < num_datum; ++i)
7720     {
7721       const Tp f = std::tr1::ellint_3(Tp(data148[i].k), Tp(data148[i].nu),
7722                    Tp(data148[i].phi));
7723       const Tp f0 = data148[i].f0;
7724       const Tp diff = f - f0;
7725       if (std::abs(diff) > max_abs_diff)
7726         max_abs_diff = std::abs(diff);
7727       if (std::abs(f0) > Tp(10) * eps
7728        && std::abs(f) > Tp(10) * eps)
7729         {
7730           const Tp frac = diff / f0;
7731           if (std::abs(frac) > max_abs_frac)
7732             max_abs_frac = std::abs(frac);
7733         }
7734     }
7735   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7736 }
7737
7738 // Test data for k=0.50000000000000000, nu=0.80000000000000004.
7739 testcase_ellint_3<double> data149[] = {
7740   { -0.0000000000000000, 0.50000000000000000, 0.80000000000000004, 
7741           0.0000000000000000 },
7742   { 0.17336164805979126, 0.50000000000000000, 0.80000000000000004, 
7743           0.17453292519943295 },
7744   { 0.34024350132086773, 0.50000000000000000, 0.80000000000000004, 
7745           0.34906585039886590 },
7746   { 0.49643719555734084, 0.50000000000000000, 0.80000000000000004, 
7747           0.52359877559829882 },
7748   { 0.64071162456976150, 0.50000000000000000, 0.80000000000000004, 
7749           0.69813170079773179 },
7750   { 0.77407836177211908, 0.50000000000000000, 0.80000000000000004, 
7751           0.87266462599716477 },
7752   { 0.89867058251905652, 0.50000000000000000, 0.80000000000000004, 
7753           1.0471975511965976 },
7754   { 1.0169181822134912, 0.50000000000000000, 0.80000000000000004, 
7755           1.2217304763960306 },
7756   { 1.1311363312779448, 0.50000000000000000, 0.80000000000000004, 
7757           1.3962634015954636 },
7758   { 1.2434165408189539, 0.50000000000000000, 0.80000000000000004, 
7759           1.5707963267948966 },
7760 };
7761
7762 // Test function for k=0.50000000000000000, nu=0.80000000000000004.
7763 template <typename Tp>
7764 void test149()
7765 {
7766   const Tp eps = std::numeric_limits<Tp>::epsilon();
7767   Tp max_abs_diff = -Tp(1);
7768   Tp max_abs_frac = -Tp(1);
7769   unsigned int num_datum = sizeof(data149)
7770                          / sizeof(testcase_ellint_3<double>);
7771   for (unsigned int i = 0; i < num_datum; ++i)
7772     {
7773       const Tp f = std::tr1::ellint_3(Tp(data149[i].k), Tp(data149[i].nu),
7774                    Tp(data149[i].phi));
7775       const Tp f0 = data149[i].f0;
7776       const Tp diff = f - f0;
7777       if (std::abs(diff) > max_abs_diff)
7778         max_abs_diff = std::abs(diff);
7779       if (std::abs(f0) > Tp(10) * eps
7780        && std::abs(f) > Tp(10) * eps)
7781         {
7782           const Tp frac = diff / f0;
7783           if (std::abs(frac) > max_abs_frac)
7784             max_abs_frac = std::abs(frac);
7785         }
7786     }
7787   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7788 }
7789
7790 // Test data for k=0.50000000000000000, nu=0.90000000000000002.
7791 testcase_ellint_3<double> data150[] = {
7792   { -0.0000000000000000, 0.50000000000000000, 0.90000000000000002, 
7793           0.0000000000000000 },
7794   { 0.17319040056865681, 0.50000000000000000, 0.90000000000000002, 
7795           0.17453292519943295 },
7796   { 0.33899920036578557, 0.50000000000000000, 0.90000000000000002, 
7797           0.34906585039886590 },
7798   { 0.49279362182695186, 0.50000000000000000, 0.90000000000000002, 
7799           0.52359877559829882 },
7800   { 0.63342123379746151, 0.50000000000000000, 0.90000000000000002, 
7801           0.69813170079773179 },
7802   { 0.76220595179550321, 0.50000000000000000, 0.90000000000000002, 
7803           0.87266462599716477 },
7804   { 0.88160004743532294, 0.50000000000000000, 0.90000000000000002, 
7805           1.0471975511965976 },
7806   { 0.99427448642310134, 0.50000000000000000, 0.90000000000000002, 
7807           1.2217304763960306 },
7808   { 1.1027091512470093, 0.50000000000000000, 0.90000000000000002, 
7809           1.3962634015954636 },
7810   { 1.2091116095504744, 0.50000000000000000, 0.90000000000000002, 
7811           1.5707963267948966 },
7812 };
7813
7814 // Test function for k=0.50000000000000000, nu=0.90000000000000002.
7815 template <typename Tp>
7816 void test150()
7817 {
7818   const Tp eps = std::numeric_limits<Tp>::epsilon();
7819   Tp max_abs_diff = -Tp(1);
7820   Tp max_abs_frac = -Tp(1);
7821   unsigned int num_datum = sizeof(data150)
7822                          / sizeof(testcase_ellint_3<double>);
7823   for (unsigned int i = 0; i < num_datum; ++i)
7824     {
7825       const Tp f = std::tr1::ellint_3(Tp(data150[i].k), Tp(data150[i].nu),
7826                    Tp(data150[i].phi));
7827       const Tp f0 = data150[i].f0;
7828       const Tp diff = f - f0;
7829       if (std::abs(diff) > max_abs_diff)
7830         max_abs_diff = std::abs(diff);
7831       if (std::abs(f0) > Tp(10) * eps
7832        && std::abs(f) > Tp(10) * eps)
7833         {
7834           const Tp frac = diff / f0;
7835           if (std::abs(frac) > max_abs_frac)
7836             max_abs_frac = std::abs(frac);
7837         }
7838     }
7839   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7840 }
7841
7842 // Test data for k=0.60000000000000009, nu=0.0000000000000000.
7843 testcase_ellint_3<double> data151[] = {
7844   { -0.0000000000000000, 0.60000000000000009, 0.0000000000000000, 
7845           0.0000000000000000 },
7846   { 0.17485154362988362, 0.60000000000000009, 0.0000000000000000, 
7847           0.17453292519943295 },
7848   { 0.35160509865544326, 0.60000000000000009, 0.0000000000000000, 
7849           0.34906585039886590 },
7850   { 0.53210652578446160, 0.60000000000000009, 0.0000000000000000, 
7851           0.52359877559829882 },
7852   { 0.71805304664485670, 0.60000000000000009, 0.0000000000000000, 
7853           0.69813170079773179 },
7854   { 0.91082759030195970, 0.60000000000000009, 0.0000000000000000, 
7855           0.87266462599716477 },
7856   { 1.1112333229323366, 0.60000000000000009, 0.0000000000000000, 
7857           1.0471975511965976 },
7858   { 1.3191461190365270, 0.60000000000000009, 0.0000000000000000, 
7859           1.2217304763960306 },
7860   { 1.5332022105084775, 0.60000000000000009, 0.0000000000000000, 
7861           1.3962634015954636 },
7862   { 1.7507538029157526, 0.60000000000000009, 0.0000000000000000, 
7863           1.5707963267948966 },
7864 };
7865
7866 // Test function for k=0.60000000000000009, nu=0.0000000000000000.
7867 template <typename Tp>
7868 void test151()
7869 {
7870   const Tp eps = std::numeric_limits<Tp>::epsilon();
7871   Tp max_abs_diff = -Tp(1);
7872   Tp max_abs_frac = -Tp(1);
7873   unsigned int num_datum = sizeof(data151)
7874                          / sizeof(testcase_ellint_3<double>);
7875   for (unsigned int i = 0; i < num_datum; ++i)
7876     {
7877       const Tp f = std::tr1::ellint_3(Tp(data151[i].k), Tp(data151[i].nu),
7878                    Tp(data151[i].phi));
7879       const Tp f0 = data151[i].f0;
7880       const Tp diff = f - f0;
7881       if (std::abs(diff) > max_abs_diff)
7882         max_abs_diff = std::abs(diff);
7883       if (std::abs(f0) > Tp(10) * eps
7884        && std::abs(f) > Tp(10) * eps)
7885         {
7886           const Tp frac = diff / f0;
7887           if (std::abs(frac) > max_abs_frac)
7888             max_abs_frac = std::abs(frac);
7889         }
7890     }
7891   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7892 }
7893
7894 // Test data for k=0.60000000000000009, nu=0.10000000000000001.
7895 testcase_ellint_3<double> data152[] = {
7896   { -0.0000000000000000, 0.60000000000000009, 0.10000000000000001, 
7897           0.0000000000000000 },
7898   { 0.17467514275022014, 0.60000000000000009, 0.10000000000000001, 
7899           0.17453292519943295 },
7900   { 0.35021333086258255, 0.60000000000000009, 0.10000000000000001, 
7901           0.34906585039886590 },
7902   { 0.52751664092962713, 0.60000000000000009, 0.10000000000000001, 
7903           0.52359877559829882 },
7904   { 0.70752126971957885, 0.60000000000000009, 0.10000000000000001, 
7905           0.69813170079773179 },
7906   { 0.89111058756112871, 0.60000000000000009, 0.10000000000000001, 
7907           0.87266462599716477 },
7908   { 1.0789241202877773, 0.60000000000000009, 0.10000000000000001, 
7909           1.0471975511965976 },
7910   { 1.2710800210399946, 0.60000000000000009, 0.10000000000000001, 
7911           1.2217304763960306 },
7912   { 1.4669060574440278, 0.60000000000000009, 0.10000000000000001, 
7913           1.3962634015954636 },
7914   { 1.6648615773343014, 0.60000000000000009, 0.10000000000000001, 
7915           1.5707963267948966 },
7916 };
7917
7918 // Test function for k=0.60000000000000009, nu=0.10000000000000001.
7919 template <typename Tp>
7920 void test152()
7921 {
7922   const Tp eps = std::numeric_limits<Tp>::epsilon();
7923   Tp max_abs_diff = -Tp(1);
7924   Tp max_abs_frac = -Tp(1);
7925   unsigned int num_datum = sizeof(data152)
7926                          / sizeof(testcase_ellint_3<double>);
7927   for (unsigned int i = 0; i < num_datum; ++i)
7928     {
7929       const Tp f = std::tr1::ellint_3(Tp(data152[i].k), Tp(data152[i].nu),
7930                    Tp(data152[i].phi));
7931       const Tp f0 = data152[i].f0;
7932       const Tp diff = f - f0;
7933       if (std::abs(diff) > max_abs_diff)
7934         max_abs_diff = std::abs(diff);
7935       if (std::abs(f0) > Tp(10) * eps
7936        && std::abs(f) > Tp(10) * eps)
7937         {
7938           const Tp frac = diff / f0;
7939           if (std::abs(frac) > max_abs_frac)
7940             max_abs_frac = std::abs(frac);
7941         }
7942     }
7943   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7944 }
7945
7946 // Test data for k=0.60000000000000009, nu=0.20000000000000001.
7947 testcase_ellint_3<double> data153[] = {
7948   { -0.0000000000000000, 0.60000000000000009, 0.20000000000000001, 
7949           0.0000000000000000 },
7950   { 0.17449937871800653, 0.60000000000000009, 0.20000000000000001, 
7951           0.17453292519943295 },
7952   { 0.34884093647346553, 0.60000000000000009, 0.20000000000000001, 
7953           0.34906585039886590 },
7954   { 0.52306221119844110, 0.60000000000000009, 0.20000000000000001, 
7955           0.52359877559829882 },
7956   { 0.69749955678982223, 0.60000000000000009, 0.20000000000000001, 
7957           0.69813170079773179 },
7958   { 0.87274610682416853, 0.60000000000000009, 0.20000000000000001, 
7959           0.87266462599716477 },
7960   { 1.0494620540750796, 0.60000000000000009, 0.20000000000000001, 
7961           1.0471975511965976 },
7962   { 1.2280847305507339, 0.60000000000000009, 0.20000000000000001, 
7963           1.2217304763960306 },
7964   { 1.4085436279696888, 0.60000000000000009, 0.20000000000000001, 
7965           1.3962634015954636 },
7966   { 1.5901418016279374, 0.60000000000000009, 0.20000000000000001, 
7967           1.5707963267948966 },
7968 };
7969
7970 // Test function for k=0.60000000000000009, nu=0.20000000000000001.
7971 template <typename Tp>
7972 void test153()
7973 {
7974   const Tp eps = std::numeric_limits<Tp>::epsilon();
7975   Tp max_abs_diff = -Tp(1);
7976   Tp max_abs_frac = -Tp(1);
7977   unsigned int num_datum = sizeof(data153)
7978                          / sizeof(testcase_ellint_3<double>);
7979   for (unsigned int i = 0; i < num_datum; ++i)
7980     {
7981       const Tp f = std::tr1::ellint_3(Tp(data153[i].k), Tp(data153[i].nu),
7982                    Tp(data153[i].phi));
7983       const Tp f0 = data153[i].f0;
7984       const Tp diff = f - f0;
7985       if (std::abs(diff) > max_abs_diff)
7986         max_abs_diff = std::abs(diff);
7987       if (std::abs(f0) > Tp(10) * eps
7988        && std::abs(f) > Tp(10) * eps)
7989         {
7990           const Tp frac = diff / f0;
7991           if (std::abs(frac) > max_abs_frac)
7992             max_abs_frac = std::abs(frac);
7993         }
7994     }
7995   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7996 }
7997
7998 // Test data for k=0.60000000000000009, nu=0.29999999999999999.
7999 testcase_ellint_3<double> data154[] = {
8000   { -0.0000000000000000, 0.60000000000000009, 0.29999999999999999, 
8001           0.0000000000000000 },
8002   { 0.17432424744393935, 0.60000000000000009, 0.29999999999999999, 
8003           0.17453292519943295 },
8004   { 0.34748744127146447, 0.60000000000000009, 0.29999999999999999, 
8005           0.34906585039886590 },
8006   { 0.51873632743924847, 0.60000000000000009, 0.29999999999999999, 
8007           0.52359877559829882 },
8008   { 0.68794610396313127, 0.60000000000000009, 0.29999999999999999, 
8009           0.69813170079773179 },
8010   { 0.85558070175468726, 0.60000000000000009, 0.29999999999999999, 
8011           0.87266462599716477 },
8012   { 1.0224416343605658, 0.60000000000000009, 0.29999999999999999, 
8013           1.0471975511965976 },
8014   { 1.1893144457936788, 0.60000000000000009, 0.29999999999999999, 
8015           1.2217304763960306 },
8016   { 1.3566435377982575, 0.60000000000000009, 0.29999999999999999, 
8017           1.3962634015954636 },
8018   { 1.5243814243493585, 0.60000000000000009, 0.29999999999999999, 
8019           1.5707963267948966 },
8020 };
8021
8022 // Test function for k=0.60000000000000009, nu=0.29999999999999999.
8023 template <typename Tp>
8024 void test154()
8025 {
8026   const Tp eps = std::numeric_limits<Tp>::epsilon();
8027   Tp max_abs_diff = -Tp(1);
8028   Tp max_abs_frac = -Tp(1);
8029   unsigned int num_datum = sizeof(data154)
8030                          / sizeof(testcase_ellint_3<double>);
8031   for (unsigned int i = 0; i < num_datum; ++i)
8032     {
8033       const Tp f = std::tr1::ellint_3(Tp(data154[i].k), Tp(data154[i].nu),
8034                    Tp(data154[i].phi));
8035       const Tp f0 = data154[i].f0;
8036       const Tp diff = f - f0;
8037       if (std::abs(diff) > max_abs_diff)
8038         max_abs_diff = std::abs(diff);
8039       if (std::abs(f0) > Tp(10) * eps
8040        && std::abs(f) > Tp(10) * eps)
8041         {
8042           const Tp frac = diff / f0;
8043           if (std::abs(frac) > max_abs_frac)
8044             max_abs_frac = std::abs(frac);
8045         }
8046     }
8047   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8048 }
8049
8050 // Test data for k=0.60000000000000009, nu=0.40000000000000002.
8051 testcase_ellint_3<double> data155[] = {
8052   { -0.0000000000000000, 0.60000000000000009, 0.40000000000000002, 
8053           0.0000000000000000 },
8054   { 0.17414974487670720, 0.60000000000000009, 0.40000000000000002, 
8055           0.17453292519943295 },
8056   { 0.34615238767335027, 0.60000000000000009, 0.40000000000000002, 
8057           0.34906585039886590 },
8058   { 0.51453257838108579, 0.60000000000000009, 0.40000000000000002, 
8059           0.52359877559829882 },
8060   { 0.67882386787534410, 0.60000000000000009, 0.40000000000000002, 
8061           0.69813170079773179 },
8062   { 0.83948470233173578, 0.60000000000000009, 0.40000000000000002, 
8063           0.87266462599716477 },
8064   { 0.99753496200074021, 0.60000000000000009, 0.40000000000000002, 
8065           1.0471975511965976 },
8066   { 1.1541101404388487, 0.60000000000000009, 0.40000000000000002, 
8067           1.2217304763960306 },
8068   { 1.3100911323398816, 0.60000000000000009, 0.40000000000000002, 
8069           1.3962634015954636 },
8070   { 1.4659345278069984, 0.60000000000000009, 0.40000000000000002, 
8071           1.5707963267948966 },
8072 };
8073
8074 // Test function for k=0.60000000000000009, nu=0.40000000000000002.
8075 template <typename Tp>
8076 void test155()
8077 {
8078   const Tp eps = std::numeric_limits<Tp>::epsilon();
8079   Tp max_abs_diff = -Tp(1);
8080   Tp max_abs_frac = -Tp(1);
8081   unsigned int num_datum = sizeof(data155)
8082                          / sizeof(testcase_ellint_3<double>);
8083   for (unsigned int i = 0; i < num_datum; ++i)
8084     {
8085       const Tp f = std::tr1::ellint_3(Tp(data155[i].k), Tp(data155[i].nu),
8086                    Tp(data155[i].phi));
8087       const Tp f0 = data155[i].f0;
8088       const Tp diff = f - f0;
8089       if (std::abs(diff) > max_abs_diff)
8090         max_abs_diff = std::abs(diff);
8091       if (std::abs(f0) > Tp(10) * eps
8092        && std::abs(f) > Tp(10) * eps)
8093         {
8094           const Tp frac = diff / f0;
8095           if (std::abs(frac) > max_abs_frac)
8096             max_abs_frac = std::abs(frac);
8097         }
8098     }
8099   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8100 }
8101
8102 // Test data for k=0.60000000000000009, nu=0.50000000000000000.
8103 testcase_ellint_3<double> data156[] = {
8104   { -0.0000000000000000, 0.60000000000000009, 0.50000000000000000, 
8105           0.0000000000000000 },
8106   { 0.17397586700252810, 0.60000000000000009, 0.50000000000000000, 
8107           0.17453292519943295 },
8108   { 0.34483533397138516, 0.60000000000000009, 0.50000000000000000, 
8109           0.34906585039886590 },
8110   { 0.51044500461706499, 0.60000000000000009, 0.50000000000000000, 
8111           0.52359877559829882 },
8112   { 0.67009988034712675, 0.60000000000000009, 0.50000000000000000, 
8113           0.69813170079773179 },
8114   { 0.82434762375735193, 0.60000000000000009, 0.50000000000000000, 
8115           0.87266462599716477 },
8116   { 0.97447346702799043, 0.60000000000000009, 0.50000000000000000, 
8117           1.0471975511965976 },
8118   { 1.1219494000522143, 0.60000000000000009, 0.50000000000000000, 
8119           1.2217304763960306 },
8120   { 1.2680242605954488, 0.60000000000000009, 0.50000000000000000, 
8121           1.3962634015954636 },
8122   { 1.4135484285693078, 0.60000000000000009, 0.50000000000000000, 
8123           1.5707963267948966 },
8124 };
8125
8126 // Test function for k=0.60000000000000009, nu=0.50000000000000000.
8127 template <typename Tp>
8128 void test156()
8129 {
8130   const Tp eps = std::numeric_limits<Tp>::epsilon();
8131   Tp max_abs_diff = -Tp(1);
8132   Tp max_abs_frac = -Tp(1);
8133   unsigned int num_datum = sizeof(data156)
8134                          / sizeof(testcase_ellint_3<double>);
8135   for (unsigned int i = 0; i < num_datum; ++i)
8136     {
8137       const Tp f = std::tr1::ellint_3(Tp(data156[i].k), Tp(data156[i].nu),
8138                    Tp(data156[i].phi));
8139       const Tp f0 = data156[i].f0;
8140       const Tp diff = f - f0;
8141       if (std::abs(diff) > max_abs_diff)
8142         max_abs_diff = std::abs(diff);
8143       if (std::abs(f0) > Tp(10) * eps
8144        && std::abs(f) > Tp(10) * eps)
8145         {
8146           const Tp frac = diff / f0;
8147           if (std::abs(frac) > max_abs_frac)
8148             max_abs_frac = std::abs(frac);
8149         }
8150     }
8151   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8152 }
8153
8154 // Test data for k=0.60000000000000009, nu=0.59999999999999998.
8155 testcase_ellint_3<double> data157[] = {
8156   { -0.0000000000000000, 0.60000000000000009, 0.59999999999999998, 
8157           0.0000000000000000 },
8158   { 0.17380260984469356, 0.60000000000000009, 0.59999999999999998, 
8159           0.17453292519943295 },
8160   { 0.34353585361777839, 0.60000000000000009, 0.59999999999999998, 
8161           0.34906585039886590 },
8162   { 0.50646805774321402, 0.60000000000000009, 0.59999999999999998, 
8163           0.52359877559829882 },
8164   { 0.66174468108625517, 0.60000000000000009, 0.59999999999999998, 
8165           0.69813170079773179 },
8166   { 0.81007462280278408, 0.60000000000000009, 0.59999999999999998, 
8167           0.87266462599716477 },
8168   { 0.95303466945718773, 0.60000000000000009, 0.59999999999999998, 
8169           1.0471975511965976 },
8170   { 1.0924118588677503, 0.60000000000000009, 0.59999999999999998, 
8171           1.2217304763960306 },
8172   { 1.2297640574847937, 0.60000000000000009, 0.59999999999999998, 
8173           1.3962634015954636 },
8174   { 1.3662507535812816, 0.60000000000000009, 0.59999999999999998, 
8175           1.5707963267948966 },
8176 };
8177
8178 // Test function for k=0.60000000000000009, nu=0.59999999999999998.
8179 template <typename Tp>
8180 void test157()
8181 {
8182   const Tp eps = std::numeric_limits<Tp>::epsilon();
8183   Tp max_abs_diff = -Tp(1);
8184   Tp max_abs_frac = -Tp(1);
8185   unsigned int num_datum = sizeof(data157)
8186                          / sizeof(testcase_ellint_3<double>);
8187   for (unsigned int i = 0; i < num_datum; ++i)
8188     {
8189       const Tp f = std::tr1::ellint_3(Tp(data157[i].k), Tp(data157[i].nu),
8190                    Tp(data157[i].phi));
8191       const Tp f0 = data157[i].f0;
8192       const Tp diff = f - f0;
8193       if (std::abs(diff) > max_abs_diff)
8194         max_abs_diff = std::abs(diff);
8195       if (std::abs(f0) > Tp(10) * eps
8196        && std::abs(f) > Tp(10) * eps)
8197         {
8198           const Tp frac = diff / f0;
8199           if (std::abs(frac) > max_abs_frac)
8200             max_abs_frac = std::abs(frac);
8201         }
8202     }
8203   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8204 }
8205
8206 // Test data for k=0.60000000000000009, nu=0.69999999999999996.
8207 testcase_ellint_3<double> data158[] = {
8208   { -0.0000000000000000, 0.60000000000000009, 0.69999999999999996, 
8209           0.0000000000000000 },
8210   { 0.17362996946312009, 0.60000000000000009, 0.69999999999999996, 
8211           0.17453292519943295 },
8212   { 0.34225353454870588, 0.60000000000000009, 0.69999999999999996, 
8213           0.34906585039886590 },
8214   { 0.50259656397799546, 0.60000000000000009, 0.69999999999999996, 
8215           0.52359877559829882 },
8216   { 0.65373184496628944, 0.60000000000000009, 0.69999999999999996, 
8217           0.69813170079773179 },
8218   { 0.79658372884056439, 0.60000000000000009, 0.69999999999999996, 
8219           0.87266462599716477 },
8220   { 0.93303240100245466, 0.60000000000000009, 0.69999999999999996, 
8221           1.0471975511965976 },
8222   { 1.0651547944716557, 0.60000000000000009, 0.69999999999999996, 
8223           1.2217304763960306 },
8224   { 1.1947676204853441, 0.60000000000000009, 0.69999999999999996, 
8225           1.3962634015954636 },
8226   { 1.3232737468822811, 0.60000000000000009, 0.69999999999999996, 
8227           1.5707963267948966 },
8228 };
8229
8230 // Test function for k=0.60000000000000009, nu=0.69999999999999996.
8231 template <typename Tp>
8232 void test158()
8233 {
8234   const Tp eps = std::numeric_limits<Tp>::epsilon();
8235   Tp max_abs_diff = -Tp(1);
8236   Tp max_abs_frac = -Tp(1);
8237   unsigned int num_datum = sizeof(data158)
8238                          / sizeof(testcase_ellint_3<double>);
8239   for (unsigned int i = 0; i < num_datum; ++i)
8240     {
8241       const Tp f = std::tr1::ellint_3(Tp(data158[i].k), Tp(data158[i].nu),
8242                    Tp(data158[i].phi));
8243       const Tp f0 = data158[i].f0;
8244       const Tp diff = f - f0;
8245       if (std::abs(diff) > max_abs_diff)
8246         max_abs_diff = std::abs(diff);
8247       if (std::abs(f0) > Tp(10) * eps
8248        && std::abs(f) > Tp(10) * eps)
8249         {
8250           const Tp frac = diff / f0;
8251           if (std::abs(frac) > max_abs_frac)
8252             max_abs_frac = std::abs(frac);
8253         }
8254     }
8255   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8256 }
8257
8258 // Test data for k=0.60000000000000009, nu=0.80000000000000004.
8259 testcase_ellint_3<double> data159[] = {
8260   { -0.0000000000000000, 0.60000000000000009, 0.80000000000000004, 
8261           0.0000000000000000 },
8262   { 0.17345794195390687, 0.60000000000000009, 0.80000000000000004, 
8263           0.17453292519943295 },
8264   { 0.34098797854531027, 0.60000000000000009, 0.80000000000000004, 
8265           0.34906585039886590 },
8266   { 0.49882569168826230, 0.60000000000000009, 0.80000000000000004, 
8267           0.52359877559829882 },
8268   { 0.64603758566475511, 0.60000000000000009, 0.80000000000000004, 
8269           0.69813170079773179 },
8270   { 0.78380365594769730, 0.60000000000000009, 0.80000000000000004, 
8271           0.87266462599716477 },
8272   { 0.91430946255611223, 0.60000000000000009, 0.80000000000000004, 
8273           1.0471975511965976 },
8274   { 1.0398955217270607, 0.60000000000000009, 0.80000000000000004, 
8275           1.2217304763960306 },
8276   { 1.1625948314277679, 0.60000000000000009, 0.80000000000000004, 
8277           1.3962634015954636 },
8278   { 1.2840021261752192, 0.60000000000000009, 0.80000000000000004, 
8279           1.5707963267948966 },
8280 };
8281
8282 // Test function for k=0.60000000000000009, nu=0.80000000000000004.
8283 template <typename Tp>
8284 void test159()
8285 {
8286   const Tp eps = std::numeric_limits<Tp>::epsilon();
8287   Tp max_abs_diff = -Tp(1);
8288   Tp max_abs_frac = -Tp(1);
8289   unsigned int num_datum = sizeof(data159)
8290                          / sizeof(testcase_ellint_3<double>);
8291   for (unsigned int i = 0; i < num_datum; ++i)
8292     {
8293       const Tp f = std::tr1::ellint_3(Tp(data159[i].k), Tp(data159[i].nu),
8294                    Tp(data159[i].phi));
8295       const Tp f0 = data159[i].f0;
8296       const Tp diff = f - f0;
8297       if (std::abs(diff) > max_abs_diff)
8298         max_abs_diff = std::abs(diff);
8299       if (std::abs(f0) > Tp(10) * eps
8300        && std::abs(f) > Tp(10) * eps)
8301         {
8302           const Tp frac = diff / f0;
8303           if (std::abs(frac) > max_abs_frac)
8304             max_abs_frac = std::abs(frac);
8305         }
8306     }
8307   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8308 }
8309
8310 // Test data for k=0.60000000000000009, nu=0.90000000000000002.
8311 testcase_ellint_3<double> data160[] = {
8312   { -0.0000000000000000, 0.60000000000000009, 0.90000000000000002, 
8313           0.0000000000000000 },
8314   { 0.17328652344890033, 0.60000000000000009, 0.90000000000000002, 
8315           0.17453292519943295 },
8316   { 0.33973880062929018, 0.60000000000000009, 0.90000000000000002, 
8317           0.34906585039886590 },
8318   { 0.49515092233122765, 0.60000000000000009, 0.90000000000000002, 
8319           0.52359877559829882 },
8320   { 0.63864042139737043, 0.60000000000000009, 0.90000000000000002, 
8321           0.69813170079773179 },
8322   { 0.77167205646538850, 0.60000000000000009, 0.90000000000000002, 
8323           0.87266462599716477 },
8324   { 0.89673202848034428, 0.60000000000000009, 0.90000000000000002, 
8325           1.0471975511965976 },
8326   { 1.0163984492661304, 0.60000000000000009, 0.90000000000000002, 
8327           1.2217304763960306 },
8328   { 1.1328845785162431, 0.60000000000000009, 0.90000000000000002, 
8329           1.3962634015954636 },
8330   { 1.2479362973851875, 0.60000000000000009, 0.90000000000000002, 
8331           1.5707963267948966 },
8332 };
8333
8334 // Test function for k=0.60000000000000009, nu=0.90000000000000002.
8335 template <typename Tp>
8336 void test160()
8337 {
8338   const Tp eps = std::numeric_limits<Tp>::epsilon();
8339   Tp max_abs_diff = -Tp(1);
8340   Tp max_abs_frac = -Tp(1);
8341   unsigned int num_datum = sizeof(data160)
8342                          / sizeof(testcase_ellint_3<double>);
8343   for (unsigned int i = 0; i < num_datum; ++i)
8344     {
8345       const Tp f = std::tr1::ellint_3(Tp(data160[i].k), Tp(data160[i].nu),
8346                    Tp(data160[i].phi));
8347       const Tp f0 = data160[i].f0;
8348       const Tp diff = f - f0;
8349       if (std::abs(diff) > max_abs_diff)
8350         max_abs_diff = std::abs(diff);
8351       if (std::abs(f0) > Tp(10) * eps
8352        && std::abs(f) > Tp(10) * eps)
8353         {
8354           const Tp frac = diff / f0;
8355           if (std::abs(frac) > max_abs_frac)
8356             max_abs_frac = std::abs(frac);
8357         }
8358     }
8359   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8360 }
8361
8362 // Test data for k=0.69999999999999996, nu=0.0000000000000000.
8363 testcase_ellint_3<double> data161[] = {
8364   { -0.0000000000000000, 0.69999999999999996, 0.0000000000000000, 
8365           0.0000000000000000 },
8366   { 0.17496737466916720, 0.69999999999999996, 0.0000000000000000, 
8367           0.17453292519943295 },
8368   { 0.35254687535677925, 0.69999999999999996, 0.0000000000000000, 
8369           0.34906585039886590 },
8370   { 0.53536740275997130, 0.69999999999999996, 0.0000000000000000, 
8371           0.52359877559829882 },
8372   { 0.72603797651684465, 0.69999999999999996, 0.0000000000000000, 
8373           0.69813170079773179 },
8374   { 0.92698296348313458, 0.69999999999999996, 0.0000000000000000, 
8375           0.87266462599716477 },
8376   { 1.1400447527693316, 0.69999999999999996, 0.0000000000000000, 
8377           1.0471975511965976 },
8378   { 1.3657668117194071, 0.69999999999999996, 0.0000000000000000, 
8379           1.2217304763960306 },
8380   { 1.6024686895959159, 0.69999999999999996, 0.0000000000000000, 
8381           1.3962634015954636 },
8382   { 1.8456939983747236, 0.69999999999999996, 0.0000000000000000, 
8383           1.5707963267948966 },
8384 };
8385
8386 // Test function for k=0.69999999999999996, nu=0.0000000000000000.
8387 template <typename Tp>
8388 void test161()
8389 {
8390   const Tp eps = std::numeric_limits<Tp>::epsilon();
8391   Tp max_abs_diff = -Tp(1);
8392   Tp max_abs_frac = -Tp(1);
8393   unsigned int num_datum = sizeof(data161)
8394                          / sizeof(testcase_ellint_3<double>);
8395   for (unsigned int i = 0; i < num_datum; ++i)
8396     {
8397       const Tp f = std::tr1::ellint_3(Tp(data161[i].k), Tp(data161[i].nu),
8398                    Tp(data161[i].phi));
8399       const Tp f0 = data161[i].f0;
8400       const Tp diff = f - f0;
8401       if (std::abs(diff) > max_abs_diff)
8402         max_abs_diff = std::abs(diff);
8403       if (std::abs(f0) > Tp(10) * eps
8404        && std::abs(f) > Tp(10) * eps)
8405         {
8406           const Tp frac = diff / f0;
8407           if (std::abs(frac) > max_abs_frac)
8408             max_abs_frac = std::abs(frac);
8409         }
8410     }
8411   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8412 }
8413
8414 // Test data for k=0.69999999999999996, nu=0.10000000000000001.
8415 testcase_ellint_3<double> data162[] = {
8416   { -0.0000000000000000, 0.69999999999999996, 0.10000000000000001, 
8417           0.0000000000000000 },
8418   { 0.17479076384884681, 0.69999999999999996, 0.10000000000000001, 
8419           0.17453292519943295 },
8420   { 0.35114844900396364, 0.69999999999999996, 0.10000000000000001, 
8421           0.34906585039886590 },
8422   { 0.53072776947527012, 0.69999999999999996, 0.10000000000000001, 
8423           0.52359877559829882 },
8424   { 0.71530198262386246, 0.69999999999999996, 0.10000000000000001, 
8425           0.69813170079773179 },
8426   { 0.90666760677828306, 0.69999999999999996, 0.10000000000000001, 
8427           0.87266462599716477 },
8428   { 1.1063366517438080, 0.69999999999999996, 0.10000000000000001, 
8429           1.0471975511965976 },
8430   { 1.3149477243092147, 0.69999999999999996, 0.10000000000000001, 
8431           1.2217304763960306 },
8432   { 1.5314886725038925, 0.69999999999999996, 0.10000000000000001, 
8433           1.3962634015954636 },
8434   { 1.7528050171757608, 0.69999999999999996, 0.10000000000000001, 
8435           1.5707963267948966 },
8436 };
8437
8438 // Test function for k=0.69999999999999996, nu=0.10000000000000001.
8439 template <typename Tp>
8440 void test162()
8441 {
8442   const Tp eps = std::numeric_limits<Tp>::epsilon();
8443   Tp max_abs_diff = -Tp(1);
8444   Tp max_abs_frac = -Tp(1);
8445   unsigned int num_datum = sizeof(data162)
8446                          / sizeof(testcase_ellint_3<double>);
8447   for (unsigned int i = 0; i < num_datum; ++i)
8448     {
8449       const Tp f = std::tr1::ellint_3(Tp(data162[i].k), Tp(data162[i].nu),
8450                    Tp(data162[i].phi));
8451       const Tp f0 = data162[i].f0;
8452       const Tp diff = f - f0;
8453       if (std::abs(diff) > max_abs_diff)
8454         max_abs_diff = std::abs(diff);
8455       if (std::abs(f0) > Tp(10) * eps
8456        && std::abs(f) > Tp(10) * eps)
8457         {
8458           const Tp frac = diff / f0;
8459           if (std::abs(frac) > max_abs_frac)
8460             max_abs_frac = std::abs(frac);
8461         }
8462     }
8463   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8464 }
8465
8466 // Test data for k=0.69999999999999996, nu=0.20000000000000001.
8467 testcase_ellint_3<double> data163[] = {
8468   { -0.0000000000000000, 0.69999999999999996, 0.20000000000000001, 
8469           0.0000000000000000 },
8470   { 0.17461479077791472, 0.69999999999999996, 0.20000000000000001, 
8471           0.17453292519943295 },
8472   { 0.34976950621407538, 0.69999999999999996, 0.20000000000000001, 
8473           0.34906585039886590 },
8474   { 0.52622533231350188, 0.69999999999999996, 0.20000000000000001, 
8475           0.52359877559829882 },
8476   { 0.70508774017895226, 0.69999999999999996, 0.20000000000000001, 
8477           0.69813170079773179 },
8478   { 0.88775302531730294, 0.69999999999999996, 0.20000000000000001, 
8479           0.87266462599716477 },
8480   { 1.0756195476149006, 0.69999999999999996, 0.20000000000000001, 
8481           1.0471975511965976 },
8482   { 1.2695349716654372, 0.69999999999999996, 0.20000000000000001, 
8483           1.2217304763960306 },
8484   { 1.4690814617070540, 0.69999999999999996, 0.20000000000000001, 
8485           1.3962634015954636 },
8486   { 1.6721098780092147, 0.69999999999999996, 0.20000000000000001, 
8487           1.5707963267948966 },
8488 };
8489
8490 // Test function for k=0.69999999999999996, nu=0.20000000000000001.
8491 template <typename Tp>
8492 void test163()
8493 {
8494   const Tp eps = std::numeric_limits<Tp>::epsilon();
8495   Tp max_abs_diff = -Tp(1);
8496   Tp max_abs_frac = -Tp(1);
8497   unsigned int num_datum = sizeof(data163)
8498                          / sizeof(testcase_ellint_3<double>);
8499   for (unsigned int i = 0; i < num_datum; ++i)
8500     {
8501       const Tp f = std::tr1::ellint_3(Tp(data163[i].k), Tp(data163[i].nu),
8502                    Tp(data163[i].phi));
8503       const Tp f0 = data163[i].f0;
8504       const Tp diff = f - f0;
8505       if (std::abs(diff) > max_abs_diff)
8506         max_abs_diff = std::abs(diff);
8507       if (std::abs(f0) > Tp(10) * eps
8508        && std::abs(f) > Tp(10) * eps)
8509         {
8510           const Tp frac = diff / f0;
8511           if (std::abs(frac) > max_abs_frac)
8512             max_abs_frac = std::abs(frac);
8513         }
8514     }
8515   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8516 }
8517
8518 // Test data for k=0.69999999999999996, nu=0.29999999999999999.
8519 testcase_ellint_3<double> data164[] = {
8520   { -0.0000000000000000, 0.69999999999999996, 0.29999999999999999, 
8521           0.0000000000000000 },
8522   { 0.17443945136076172, 0.69999999999999996, 0.29999999999999999, 
8523           0.17453292519943295 },
8524   { 0.34840956983535287, 0.69999999999999996, 0.29999999999999999, 
8525           0.34906585039886590 },
8526   { 0.52185308551329179, 0.69999999999999996, 0.29999999999999999, 
8527           0.52359877559829882 },
8528   { 0.69535240431168266, 0.69999999999999996, 0.29999999999999999, 
8529           0.69813170079773179 },
8530   { 0.87007983473964923, 0.69999999999999996, 0.29999999999999999, 
8531           0.87266462599716477 },
8532   { 1.0474657975577066, 0.69999999999999996, 0.29999999999999999, 
8533           1.0471975511965976 },
8534   { 1.2286225419931889, 0.69999999999999996, 0.29999999999999999, 
8535           1.2217304763960306 },
8536   { 1.4136490671013271, 0.69999999999999996, 0.29999999999999999, 
8537           1.3962634015954636 },
8538   { 1.6011813647733213, 0.69999999999999996, 0.29999999999999999, 
8539           1.5707963267948966 },
8540 };
8541
8542 // Test function for k=0.69999999999999996, nu=0.29999999999999999.
8543 template <typename Tp>
8544 void test164()
8545 {
8546   const Tp eps = std::numeric_limits<Tp>::epsilon();
8547   Tp max_abs_diff = -Tp(1);
8548   Tp max_abs_frac = -Tp(1);
8549   unsigned int num_datum = sizeof(data164)
8550                          / sizeof(testcase_ellint_3<double>);
8551   for (unsigned int i = 0; i < num_datum; ++i)
8552     {
8553       const Tp f = std::tr1::ellint_3(Tp(data164[i].k), Tp(data164[i].nu),
8554                    Tp(data164[i].phi));
8555       const Tp f0 = data164[i].f0;
8556       const Tp diff = f - f0;
8557       if (std::abs(diff) > max_abs_diff)
8558         max_abs_diff = std::abs(diff);
8559       if (std::abs(f0) > Tp(10) * eps
8560        && std::abs(f) > Tp(10) * eps)
8561         {
8562           const Tp frac = diff / f0;
8563           if (std::abs(frac) > max_abs_frac)
8564             max_abs_frac = std::abs(frac);
8565         }
8566     }
8567   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8568 }
8569
8570 // Test data for k=0.69999999999999996, nu=0.40000000000000002.
8571 testcase_ellint_3<double> data165[] = {
8572   { -0.0000000000000000, 0.69999999999999996, 0.40000000000000002, 
8573           0.0000000000000000 },
8574   { 0.17426474153983226, 0.69999999999999996, 0.40000000000000002, 
8575           0.17453292519943295 },
8576   { 0.34706817945773732, 0.69999999999999996, 0.40000000000000002, 
8577           0.34906585039886590 },
8578   { 0.51760452851738159, 0.69999999999999996, 0.40000000000000002, 
8579           0.52359877559829882 },
8580   { 0.68605801534722766, 0.69999999999999996, 0.40000000000000002, 
8581           0.69813170079773179 },
8582   { 0.85351339387296532, 0.69999999999999996, 0.40000000000000002, 
8583           0.87266462599716477 },
8584   { 1.0215297967969537, 0.69999999999999996, 0.40000000000000002, 
8585           1.0471975511965976 },
8586   { 1.1915051074460528, 0.69999999999999996, 0.40000000000000002, 
8587           1.2217304763960306 },
8588   { 1.3639821911744707, 0.69999999999999996, 0.40000000000000002, 
8589           1.3962634015954636 },
8590   { 1.5382162002954762, 0.69999999999999996, 0.40000000000000002, 
8591           1.5707963267948966 },
8592 };
8593
8594 // Test function for k=0.69999999999999996, nu=0.40000000000000002.
8595 template <typename Tp>
8596 void test165()
8597 {
8598   const Tp eps = std::numeric_limits<Tp>::epsilon();
8599   Tp max_abs_diff = -Tp(1);
8600   Tp max_abs_frac = -Tp(1);
8601   unsigned int num_datum = sizeof(data165)
8602                          / sizeof(testcase_ellint_3<double>);
8603   for (unsigned int i = 0; i < num_datum; ++i)
8604     {
8605       const Tp f = std::tr1::ellint_3(Tp(data165[i].k), Tp(data165[i].nu),
8606                    Tp(data165[i].phi));
8607       const Tp f0 = data165[i].f0;
8608       const Tp diff = f - f0;
8609       if (std::abs(diff) > max_abs_diff)
8610         max_abs_diff = std::abs(diff);
8611       if (std::abs(f0) > Tp(10) * eps
8612        && std::abs(f) > Tp(10) * eps)
8613         {
8614           const Tp frac = diff / f0;
8615           if (std::abs(frac) > max_abs_frac)
8616             max_abs_frac = std::abs(frac);
8617         }
8618     }
8619   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8620 }
8621
8622 // Test data for k=0.69999999999999996, nu=0.50000000000000000.
8623 testcase_ellint_3<double> data166[] = {
8624   { -0.0000000000000000, 0.69999999999999996, 0.50000000000000000, 
8625           0.0000000000000000 },
8626   { 0.17409065729516093, 0.69999999999999996, 0.50000000000000000, 
8627           0.17453292519943295 },
8628   { 0.34574489064986091, 0.69999999999999996, 0.50000000000000000, 
8629           0.34906585039886590 },
8630   { 0.51347361925579793, 0.69999999999999996, 0.50000000000000000, 
8631           0.52359877559829882 },
8632   { 0.67717079489579290, 0.69999999999999996, 0.50000000000000000, 
8633           0.69813170079773179 },
8634   { 0.83793902055292280, 0.69999999999999996, 0.50000000000000000, 
8635           0.87266462599716477 },
8636   { 0.99752863545289705, 0.69999999999999996, 0.50000000000000000, 
8637           1.0471975511965976 },
8638   { 1.1576240080401499, 0.69999999999999996, 0.50000000000000000, 
8639           1.2217304763960306 },
8640   { 1.3191464023923762, 0.69999999999999996, 0.50000000000000000, 
8641           1.3962634015954636 },
8642   { 1.4818433192178544, 0.69999999999999996, 0.50000000000000000, 
8643           1.5707963267948966 },
8644 };
8645
8646 // Test function for k=0.69999999999999996, nu=0.50000000000000000.
8647 template <typename Tp>
8648 void test166()
8649 {
8650   const Tp eps = std::numeric_limits<Tp>::epsilon();
8651   Tp max_abs_diff = -Tp(1);
8652   Tp max_abs_frac = -Tp(1);
8653   unsigned int num_datum = sizeof(data166)
8654                          / sizeof(testcase_ellint_3<double>);
8655   for (unsigned int i = 0; i < num_datum; ++i)
8656     {
8657       const Tp f = std::tr1::ellint_3(Tp(data166[i].k), Tp(data166[i].nu),
8658                    Tp(data166[i].phi));
8659       const Tp f0 = data166[i].f0;
8660       const Tp diff = f - f0;
8661       if (std::abs(diff) > max_abs_diff)
8662         max_abs_diff = std::abs(diff);
8663       if (std::abs(f0) > Tp(10) * eps
8664        && std::abs(f) > Tp(10) * eps)
8665         {
8666           const Tp frac = diff / f0;
8667           if (std::abs(frac) > max_abs_frac)
8668             max_abs_frac = std::abs(frac);
8669         }
8670     }
8671   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8672 }
8673
8674 // Test data for k=0.69999999999999996, nu=0.59999999999999998.
8675 testcase_ellint_3<double> data167[] = {
8676   { -0.0000000000000000, 0.69999999999999996, 0.59999999999999998, 
8677           0.0000000000000000 },
8678   { 0.17391719464391611, 0.69999999999999996, 0.59999999999999998, 
8679           0.17453292519943295 },
8680   { 0.34443927423869031, 0.69999999999999996, 0.59999999999999998, 
8681           0.34906585039886590 },
8682   { 0.50945473266486074, 0.69999999999999996, 0.59999999999999998, 
8683           0.52359877559829882 },
8684   { 0.66866056326513823, 0.69999999999999996, 0.59999999999999998, 
8685           0.69813170079773179 },
8686   { 0.82325830002337352, 0.69999999999999996, 0.59999999999999998, 
8687           0.87266462599716477 },
8688   { 0.97522808245669357, 0.69999999999999996, 0.59999999999999998, 
8689           1.0471975511965976 },
8690   { 1.1265300613705282, 0.69999999999999996, 0.59999999999999998, 
8691           1.2217304763960306 },
8692   { 1.2784066076152003, 0.69999999999999996, 0.59999999999999998, 
8693           1.3962634015954636 },
8694   { 1.4309994736080540, 0.69999999999999996, 0.59999999999999998, 
8695           1.5707963267948966 },
8696 };
8697
8698 // Test function for k=0.69999999999999996, nu=0.59999999999999998.
8699 template <typename Tp>
8700 void test167()
8701 {
8702   const Tp eps = std::numeric_limits<Tp>::epsilon();
8703   Tp max_abs_diff = -Tp(1);
8704   Tp max_abs_frac = -Tp(1);
8705   unsigned int num_datum = sizeof(data167)
8706                          / sizeof(testcase_ellint_3<double>);
8707   for (unsigned int i = 0; i < num_datum; ++i)
8708     {
8709       const Tp f = std::tr1::ellint_3(Tp(data167[i].k), Tp(data167[i].nu),
8710                    Tp(data167[i].phi));
8711       const Tp f0 = data167[i].f0;
8712       const Tp diff = f - f0;
8713       if (std::abs(diff) > max_abs_diff)
8714         max_abs_diff = std::abs(diff);
8715       if (std::abs(f0) > Tp(10) * eps
8716        && std::abs(f) > Tp(10) * eps)
8717         {
8718           const Tp frac = diff / f0;
8719           if (std::abs(frac) > max_abs_frac)
8720             max_abs_frac = std::abs(frac);
8721         }
8722     }
8723   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8724 }
8725
8726 // Test data for k=0.69999999999999996, nu=0.69999999999999996.
8727 testcase_ellint_3<double> data168[] = {
8728   { -0.0000000000000000, 0.69999999999999996, 0.69999999999999996, 
8729           0.0000000000000000 },
8730   { 0.17374434963995028, 0.69999999999999996, 0.69999999999999996, 
8731           0.17453292519943295 },
8732   { 0.34315091562900674, 0.69999999999999996, 0.69999999999999996, 
8733           0.34906585039886590 },
8734   { 0.50554262375653358, 0.69999999999999996, 0.69999999999999996, 
8735           0.52359877559829882 },
8736   { 0.66050025406305812, 0.69999999999999996, 0.69999999999999996, 
8737           0.69813170079773179 },
8738   { 0.80938620118847404, 0.69999999999999996, 0.69999999999999996, 
8739           0.87266462599716477 },
8740   { 0.95443223855852144, 0.69999999999999996, 0.69999999999999996, 
8741           1.0471975511965976 },
8742   { 1.0978573207128302, 0.69999999999999996, 0.69999999999999996, 
8743           1.2217304763960306 },
8744   { 1.2411754575007123, 0.69999999999999996, 0.69999999999999996, 
8745           1.3962634015954636 },
8746   { 1.3848459188329196, 0.69999999999999996, 0.69999999999999996, 
8747           1.5707963267948966 },
8748 };
8749
8750 // Test function for k=0.69999999999999996, nu=0.69999999999999996.
8751 template <typename Tp>
8752 void test168()
8753 {
8754   const Tp eps = std::numeric_limits<Tp>::epsilon();
8755   Tp max_abs_diff = -Tp(1);
8756   Tp max_abs_frac = -Tp(1);
8757   unsigned int num_datum = sizeof(data168)
8758                          / sizeof(testcase_ellint_3<double>);
8759   for (unsigned int i = 0; i < num_datum; ++i)
8760     {
8761       const Tp f = std::tr1::ellint_3(Tp(data168[i].k), Tp(data168[i].nu),
8762                    Tp(data168[i].phi));
8763       const Tp f0 = data168[i].f0;
8764       const Tp diff = f - f0;
8765       if (std::abs(diff) > max_abs_diff)
8766         max_abs_diff = std::abs(diff);
8767       if (std::abs(f0) > Tp(10) * eps
8768        && std::abs(f) > Tp(10) * eps)
8769         {
8770           const Tp frac = diff / f0;
8771           if (std::abs(frac) > max_abs_frac)
8772             max_abs_frac = std::abs(frac);
8773         }
8774     }
8775   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8776 }
8777
8778 // Test data for k=0.69999999999999996, nu=0.80000000000000004.
8779 testcase_ellint_3<double> data169[] = {
8780   { -0.0000000000000000, 0.69999999999999996, 0.80000000000000004, 
8781           0.0000000000000000 },
8782   { 0.17357211837335737, 0.69999999999999996, 0.80000000000000004, 
8783           0.17453292519943295 },
8784   { 0.34187941416012108, 0.69999999999999996, 0.80000000000000004, 
8785           0.34906585039886590 },
8786   { 0.50173239465478270, 0.69999999999999996, 0.80000000000000004, 
8787           0.52359877559829882 },
8788   { 0.65266550725988315, 0.69999999999999996, 0.80000000000000004, 
8789           0.69813170079773179 },
8790   { 0.79624879865249298, 0.69999999999999996, 0.80000000000000004, 
8791           0.87266462599716477 },
8792   { 0.93497577043296920, 0.69999999999999996, 0.80000000000000004, 
8793           1.0471975511965976 },
8794   { 1.0713041566930748, 0.69999999999999996, 0.80000000000000004, 
8795           1.2217304763960306 },
8796   { 1.2069772023255652, 0.69999999999999996, 0.80000000000000004, 
8797           1.3962634015954636 },
8798   { 1.3427110650397533, 0.69999999999999996, 0.80000000000000004, 
8799           1.5707963267948966 },
8800 };
8801
8802 // Test function for k=0.69999999999999996, nu=0.80000000000000004.
8803 template <typename Tp>
8804 void test169()
8805 {
8806   const Tp eps = std::numeric_limits<Tp>::epsilon();
8807   Tp max_abs_diff = -Tp(1);
8808   Tp max_abs_frac = -Tp(1);
8809   unsigned int num_datum = sizeof(data169)
8810                          / sizeof(testcase_ellint_3<double>);
8811   for (unsigned int i = 0; i < num_datum; ++i)
8812     {
8813       const Tp f = std::tr1::ellint_3(Tp(data169[i].k), Tp(data169[i].nu),
8814                    Tp(data169[i].phi));
8815       const Tp f0 = data169[i].f0;
8816       const Tp diff = f - f0;
8817       if (std::abs(diff) > max_abs_diff)
8818         max_abs_diff = std::abs(diff);
8819       if (std::abs(f0) > Tp(10) * eps
8820        && std::abs(f) > Tp(10) * eps)
8821         {
8822           const Tp frac = diff / f0;
8823           if (std::abs(frac) > max_abs_frac)
8824             max_abs_frac = std::abs(frac);
8825         }
8826     }
8827   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8828 }
8829
8830 // Test data for k=0.69999999999999996, nu=0.90000000000000002.
8831 testcase_ellint_3<double> data170[] = {
8832   { -0.0000000000000000, 0.69999999999999996, 0.90000000000000002, 
8833           0.0000000000000000 },
8834   { 0.17340049697003634, 0.69999999999999996, 0.90000000000000002, 
8835           0.17453292519943295 },
8836   { 0.34062438249741556, 0.69999999999999996, 0.90000000000000002, 
8837           0.34906585039886590 },
8838   { 0.49801946510076878, 0.69999999999999996, 0.90000000000000002, 
8839           0.52359877559829882 },
8840   { 0.64513432604750487, 0.69999999999999996, 0.90000000000000002, 
8841           0.69813170079773179 },
8842   { 0.78378145487573758, 0.69999999999999996, 0.90000000000000002, 
8843           0.87266462599716477 },
8844   { 0.91671799500854634, 0.69999999999999996, 0.90000000000000002, 
8845           1.0471975511965976 },
8846   { 1.0466193579463123, 0.69999999999999996, 0.90000000000000002, 
8847           1.2217304763960306 },
8848   { 1.1754218079199146, 0.69999999999999996, 0.90000000000000002, 
8849           1.3962634015954636 },
8850   { 1.3040500499695911, 0.69999999999999996, 0.90000000000000002, 
8851           1.5707963267948966 },
8852 };
8853
8854 // Test function for k=0.69999999999999996, nu=0.90000000000000002.
8855 template <typename Tp>
8856 void test170()
8857 {
8858   const Tp eps = std::numeric_limits<Tp>::epsilon();
8859   Tp max_abs_diff = -Tp(1);
8860   Tp max_abs_frac = -Tp(1);
8861   unsigned int num_datum = sizeof(data170)
8862                          / sizeof(testcase_ellint_3<double>);
8863   for (unsigned int i = 0; i < num_datum; ++i)
8864     {
8865       const Tp f = std::tr1::ellint_3(Tp(data170[i].k), Tp(data170[i].nu),
8866                    Tp(data170[i].phi));
8867       const Tp f0 = data170[i].f0;
8868       const Tp diff = f - f0;
8869       if (std::abs(diff) > max_abs_diff)
8870         max_abs_diff = std::abs(diff);
8871       if (std::abs(f0) > Tp(10) * eps
8872        && std::abs(f) > Tp(10) * eps)
8873         {
8874           const Tp frac = diff / f0;
8875           if (std::abs(frac) > max_abs_frac)
8876             max_abs_frac = std::abs(frac);
8877         }
8878     }
8879   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8880 }
8881
8882 // Test data for k=0.80000000000000004, nu=0.0000000000000000.
8883 testcase_ellint_3<double> data171[] = {
8884   { -0.0000000000000000, 0.80000000000000004, 0.0000000000000000, 
8885           0.0000000000000000 },
8886   { 0.17510154241338902, 0.80000000000000004, 0.0000000000000000, 
8887           0.17453292519943295 },
8888   { 0.35365068839779390, 0.80000000000000004, 0.0000000000000000, 
8889           0.34906585039886590 },
8890   { 0.53926804409084561, 0.80000000000000004, 0.0000000000000000, 
8891           0.52359877559829882 },
8892   { 0.73587926028070383, 0.80000000000000004, 0.0000000000000000, 
8893           0.69813170079773179 },
8894   { 0.94770942970071170, 0.80000000000000004, 0.0000000000000000, 
8895           0.87266462599716477 },
8896   { 1.1789022995388239, 0.80000000000000004, 0.0000000000000000, 
8897           1.0471975511965976 },
8898   { 1.4323027881876009, 0.80000000000000004, 0.0000000000000000, 
8899           1.2217304763960306 },
8900   { 1.7069629739121674, 0.80000000000000004, 0.0000000000000000, 
8901           1.3962634015954636 },
8902   { 1.9953027776647296, 0.80000000000000004, 0.0000000000000000, 
8903           1.5707963267948966 },
8904 };
8905
8906 // Test function for k=0.80000000000000004, nu=0.0000000000000000.
8907 template <typename Tp>
8908 void test171()
8909 {
8910   const Tp eps = std::numeric_limits<Tp>::epsilon();
8911   Tp max_abs_diff = -Tp(1);
8912   Tp max_abs_frac = -Tp(1);
8913   unsigned int num_datum = sizeof(data171)
8914                          / sizeof(testcase_ellint_3<double>);
8915   for (unsigned int i = 0; i < num_datum; ++i)
8916     {
8917       const Tp f = std::tr1::ellint_3(Tp(data171[i].k), Tp(data171[i].nu),
8918                    Tp(data171[i].phi));
8919       const Tp f0 = data171[i].f0;
8920       const Tp diff = f - f0;
8921       if (std::abs(diff) > max_abs_diff)
8922         max_abs_diff = std::abs(diff);
8923       if (std::abs(f0) > Tp(10) * eps
8924        && std::abs(f) > Tp(10) * eps)
8925         {
8926           const Tp frac = diff / f0;
8927           if (std::abs(frac) > max_abs_frac)
8928             max_abs_frac = std::abs(frac);
8929         }
8930     }
8931   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8932 }
8933
8934 // Test data for k=0.80000000000000004, nu=0.10000000000000001.
8935 testcase_ellint_3<double> data172[] = {
8936   { -0.0000000000000000, 0.80000000000000004, 0.10000000000000001, 
8937           0.0000000000000000 },
8938   { 0.17492468824017166, 0.80000000000000004, 0.10000000000000001, 
8939           0.17453292519943295 },
8940   { 0.35224443521476911, 0.80000000000000004, 0.10000000000000001, 
8941           0.34906585039886590 },
8942   { 0.53456851853226961, 0.80000000000000004, 0.10000000000000001, 
8943           0.52359877559829882 },
8944   { 0.72488875602364944, 0.80000000000000004, 0.10000000000000001, 
8945           0.69813170079773179 },
8946   { 0.92661354274638952, 0.80000000000000004, 0.10000000000000001, 
8947           0.87266462599716477 },
8948   { 1.1432651144499077, 0.80000000000000004, 0.10000000000000001, 
8949           1.0471975511965976 },
8950   { 1.3774479927211429, 0.80000000000000004, 0.10000000000000001, 
8951           1.2217304763960306 },
8952   { 1.6287092337196041, 0.80000000000000004, 0.10000000000000001, 
8953           1.3962634015954636 },
8954   { 1.8910755418379521, 0.80000000000000004, 0.10000000000000001, 
8955           1.5707963267948966 },
8956 };
8957
8958 // Test function for k=0.80000000000000004, nu=0.10000000000000001.
8959 template <typename Tp>
8960 void test172()
8961 {
8962   const Tp eps = std::numeric_limits<Tp>::epsilon();
8963   Tp max_abs_diff = -Tp(1);
8964   Tp max_abs_frac = -Tp(1);
8965   unsigned int num_datum = sizeof(data172)
8966                          / sizeof(testcase_ellint_3<double>);
8967   for (unsigned int i = 0; i < num_datum; ++i)
8968     {
8969       const Tp f = std::tr1::ellint_3(Tp(data172[i].k), Tp(data172[i].nu),
8970                    Tp(data172[i].phi));
8971       const Tp f0 = data172[i].f0;
8972       const Tp diff = f - f0;
8973       if (std::abs(diff) > max_abs_diff)
8974         max_abs_diff = std::abs(diff);
8975       if (std::abs(f0) > Tp(10) * eps
8976        && std::abs(f) > Tp(10) * eps)
8977         {
8978           const Tp frac = diff / f0;
8979           if (std::abs(frac) > max_abs_frac)
8980             max_abs_frac = std::abs(frac);
8981         }
8982     }
8983   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8984 }
8985
8986 // Test data for k=0.80000000000000004, nu=0.20000000000000001.
8987 testcase_ellint_3<double> data173[] = {
8988   { -0.0000000000000000, 0.80000000000000004, 0.20000000000000001, 
8989           0.0000000000000000 },
8990   { 0.17474847286224943, 0.80000000000000004, 0.20000000000000001, 
8991           0.17453292519943295 },
8992   { 0.35085779529084682, 0.80000000000000004, 0.20000000000000001, 
8993           0.34906585039886590 },
8994   { 0.53000829263059157, 0.80000000000000004, 0.20000000000000001, 
8995           0.52359877559829882 },
8996   { 0.71443466027453406, 0.80000000000000004, 0.20000000000000001, 
8997           0.69813170079773179 },
8998   { 0.90698196872715420, 0.80000000000000004, 0.20000000000000001, 
8999           0.87266462599716477 },
9000   { 1.1108198200558581, 0.80000000000000004, 0.20000000000000001, 
9001           1.0471975511965976 },
9002   { 1.3284988909963957, 0.80000000000000004, 0.20000000000000001, 
9003           1.2217304763960306 },
9004   { 1.5600369318140328, 0.80000000000000004, 0.20000000000000001, 
9005           1.3962634015954636 },
9006   { 1.8007226661734588, 0.80000000000000004, 0.20000000000000001, 
9007           1.5707963267948966 },
9008 };
9009
9010 // Test function for k=0.80000000000000004, nu=0.20000000000000001.
9011 template <typename Tp>
9012 void test173()
9013 {
9014   const Tp eps = std::numeric_limits<Tp>::epsilon();
9015   Tp max_abs_diff = -Tp(1);
9016   Tp max_abs_frac = -Tp(1);
9017   unsigned int num_datum = sizeof(data173)
9018                          / sizeof(testcase_ellint_3<double>);
9019   for (unsigned int i = 0; i < num_datum; ++i)
9020     {
9021       const Tp f = std::tr1::ellint_3(Tp(data173[i].k), Tp(data173[i].nu),
9022                    Tp(data173[i].phi));
9023       const Tp f0 = data173[i].f0;
9024       const Tp diff = f - f0;
9025       if (std::abs(diff) > max_abs_diff)
9026         max_abs_diff = std::abs(diff);
9027       if (std::abs(f0) > Tp(10) * eps
9028        && std::abs(f) > Tp(10) * eps)
9029         {
9030           const Tp frac = diff / f0;
9031           if (std::abs(frac) > max_abs_frac)
9032             max_abs_frac = std::abs(frac);
9033         }
9034     }
9035   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9036 }
9037
9038 // Test data for k=0.80000000000000004, nu=0.29999999999999999.
9039 testcase_ellint_3<double> data174[] = {
9040   { -0.0000000000000000, 0.80000000000000004, 0.29999999999999999, 
9041           0.0000000000000000 },
9042   { 0.17457289217669891, 0.80000000000000004, 0.29999999999999999, 
9043           0.17453292519943295 },
9044   { 0.34949028801501258, 0.80000000000000004, 0.29999999999999999, 
9045           0.34906585039886590 },
9046   { 0.52558024362769318, 0.80000000000000004, 0.29999999999999999, 
9047           0.52359877559829882 },
9048   { 0.70447281740094914, 0.80000000000000004, 0.29999999999999999, 
9049           0.69813170079773179 },
9050   { 0.88864745641528986, 0.80000000000000004, 0.29999999999999999, 
9051           0.87266462599716477 },
9052   { 1.0811075819341465, 0.80000000000000004, 0.29999999999999999, 
9053           1.0471975511965976 },
9054   { 1.2844589654082377, 0.80000000000000004, 0.29999999999999999, 
9055           1.2217304763960306 },
9056   { 1.4991461361277849, 0.80000000000000004, 0.29999999999999999, 
9057           1.3962634015954636 },
9058   { 1.7214611048717301, 0.80000000000000004, 0.29999999999999999, 
9059           1.5707963267948966 },
9060 };
9061
9062 // Test function for k=0.80000000000000004, nu=0.29999999999999999.
9063 template <typename Tp>
9064 void test174()
9065 {
9066   const Tp eps = std::numeric_limits<Tp>::epsilon();
9067   Tp max_abs_diff = -Tp(1);
9068   Tp max_abs_frac = -Tp(1);
9069   unsigned int num_datum = sizeof(data174)
9070                          / sizeof(testcase_ellint_3<double>);
9071   for (unsigned int i = 0; i < num_datum; ++i)
9072     {
9073       const Tp f = std::tr1::ellint_3(Tp(data174[i].k), Tp(data174[i].nu),
9074                    Tp(data174[i].phi));
9075       const Tp f0 = data174[i].f0;
9076       const Tp diff = f - f0;
9077       if (std::abs(diff) > max_abs_diff)
9078         max_abs_diff = std::abs(diff);
9079       if (std::abs(f0) > Tp(10) * eps
9080        && std::abs(f) > Tp(10) * eps)
9081         {
9082           const Tp frac = diff / f0;
9083           if (std::abs(frac) > max_abs_frac)
9084             max_abs_frac = std::abs(frac);
9085         }
9086     }
9087   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9088 }
9089
9090 // Test data for k=0.80000000000000004, nu=0.40000000000000002.
9091 testcase_ellint_3<double> data175[] = {
9092   { -0.0000000000000000, 0.80000000000000004, 0.40000000000000002, 
9093           0.0000000000000000 },
9094   { 0.17439794211872178, 0.80000000000000004, 0.40000000000000002, 
9095           0.17453292519943295 },
9096   { 0.34814144964568972, 0.80000000000000004, 0.40000000000000002, 
9097           0.34906585039886590 },
9098   { 0.52127776285273075, 0.80000000000000004, 0.40000000000000002, 
9099           0.52359877559829882 },
9100   { 0.69496411438966599, 0.80000000000000004, 0.40000000000000002, 
9101           0.69813170079773179 },
9102   { 0.87146878427509589, 0.80000000000000004, 0.40000000000000002, 
9103           0.87266462599716477 },
9104   { 1.0537579024937762, 0.80000000000000004, 0.40000000000000002, 
9105           1.0471975511965976 },
9106   { 1.2445534387922637, 0.80000000000000004, 0.40000000000000002, 
9107           1.2217304763960306 },
9108   { 1.4446769766361993, 0.80000000000000004, 0.40000000000000002, 
9109           1.3962634015954636 },
9110   { 1.6512267838651289, 0.80000000000000004, 0.40000000000000002, 
9111           1.5707963267948966 },
9112 };
9113
9114 // Test function for k=0.80000000000000004, nu=0.40000000000000002.
9115 template <typename Tp>
9116 void test175()
9117 {
9118   const Tp eps = std::numeric_limits<Tp>::epsilon();
9119   Tp max_abs_diff = -Tp(1);
9120   Tp max_abs_frac = -Tp(1);
9121   unsigned int num_datum = sizeof(data175)
9122                          / sizeof(testcase_ellint_3<double>);
9123   for (unsigned int i = 0; i < num_datum; ++i)
9124     {
9125       const Tp f = std::tr1::ellint_3(Tp(data175[i].k), Tp(data175[i].nu),
9126                    Tp(data175[i].phi));
9127       const Tp f0 = data175[i].f0;
9128       const Tp diff = f - f0;
9129       if (std::abs(diff) > max_abs_diff)
9130         max_abs_diff = std::abs(diff);
9131       if (std::abs(f0) > Tp(10) * eps
9132        && std::abs(f) > Tp(10) * eps)
9133         {
9134           const Tp frac = diff / f0;
9135           if (std::abs(frac) > max_abs_frac)
9136             max_abs_frac = std::abs(frac);
9137         }
9138     }
9139   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9140 }
9141
9142 // Test data for k=0.80000000000000004, nu=0.50000000000000000.
9143 testcase_ellint_3<double> data176[] = {
9144   { -0.0000000000000000, 0.80000000000000004, 0.50000000000000000, 
9145           0.0000000000000000 },
9146   { 0.17422361866118047, 0.80000000000000004, 0.50000000000000000, 
9147           0.17453292519943295 },
9148   { 0.34681083254170475, 0.80000000000000004, 0.50000000000000000, 
9149           0.34906585039886590 },
9150   { 0.51709470815494440, 0.80000000000000004, 0.50000000000000000, 
9151           0.52359877559829882 },
9152   { 0.68587375344080259, 0.80000000000000004, 0.50000000000000000, 
9153           0.69813170079773179 },
9154   { 0.85532571852810624, 0.80000000000000004, 0.50000000000000000, 
9155           0.87266462599716477 },
9156   { 1.0284677391874906, 0.80000000000000004, 0.50000000000000000, 
9157           1.0471975511965976 },
9158   { 1.2081693942686225, 0.80000000000000004, 0.50000000000000000, 
9159           1.2217304763960306 },
9160   { 1.3955803006426311, 0.80000000000000004, 0.50000000000000000, 
9161           1.3962634015954636 },
9162   { 1.5884528947755532, 0.80000000000000004, 0.50000000000000000, 
9163           1.5707963267948966 },
9164 };
9165
9166 // Test function for k=0.80000000000000004, nu=0.50000000000000000.
9167 template <typename Tp>
9168 void test176()
9169 {
9170   const Tp eps = std::numeric_limits<Tp>::epsilon();
9171   Tp max_abs_diff = -Tp(1);
9172   Tp max_abs_frac = -Tp(1);
9173   unsigned int num_datum = sizeof(data176)
9174                          / sizeof(testcase_ellint_3<double>);
9175   for (unsigned int i = 0; i < num_datum; ++i)
9176     {
9177       const Tp f = std::tr1::ellint_3(Tp(data176[i].k), Tp(data176[i].nu),
9178                    Tp(data176[i].phi));
9179       const Tp f0 = data176[i].f0;
9180       const Tp diff = f - f0;
9181       if (std::abs(diff) > max_abs_diff)
9182         max_abs_diff = std::abs(diff);
9183       if (std::abs(f0) > Tp(10) * eps
9184        && std::abs(f) > Tp(10) * eps)
9185         {
9186           const Tp frac = diff / f0;
9187           if (std::abs(frac) > max_abs_frac)
9188             max_abs_frac = std::abs(frac);
9189         }
9190     }
9191   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9192 }
9193
9194 // Test data for k=0.80000000000000004, nu=0.59999999999999998.
9195 testcase_ellint_3<double> data177[] = {
9196   { -0.0000000000000000, 0.80000000000000004, 0.59999999999999998, 
9197           0.0000000000000000 },
9198   { 0.17404991781414092, 0.80000000000000004, 0.59999999999999998, 
9199           0.17453292519943295 },
9200   { 0.34549800443625167, 0.80000000000000004, 0.59999999999999998, 
9201           0.34906585039886590 },
9202   { 0.51302536167001556, 0.80000000000000004, 0.59999999999999998, 
9203           0.52359877559829882 },
9204   { 0.67717065003912258, 0.80000000000000004, 0.59999999999999998, 
9205           0.69813170079773179 },
9206   { 0.84011512421134416, 0.80000000000000004, 0.59999999999999998, 
9207           0.87266462599716477 },
9208   { 1.0049863847088742, 0.80000000000000004, 0.59999999999999998, 
9209           1.0471975511965976 },
9210   { 1.1748145941898918, 0.80000000000000004, 0.59999999999999998, 
9211           1.2217304763960306 },
9212   { 1.3510319699755071, 0.80000000000000004, 0.59999999999999998, 
9213           1.3962634015954636 },
9214   { 1.5319262547427865, 0.80000000000000004, 0.59999999999999998, 
9215           1.5707963267948966 },
9216 };
9217
9218 // Test function for k=0.80000000000000004, nu=0.59999999999999998.
9219 template <typename Tp>
9220 void test177()
9221 {
9222   const Tp eps = std::numeric_limits<Tp>::epsilon();
9223   Tp max_abs_diff = -Tp(1);
9224   Tp max_abs_frac = -Tp(1);
9225   unsigned int num_datum = sizeof(data177)
9226                          / sizeof(testcase_ellint_3<double>);
9227   for (unsigned int i = 0; i < num_datum; ++i)
9228     {
9229       const Tp f = std::tr1::ellint_3(Tp(data177[i].k), Tp(data177[i].nu),
9230                    Tp(data177[i].phi));
9231       const Tp f0 = data177[i].f0;
9232       const Tp diff = f - f0;
9233       if (std::abs(diff) > max_abs_diff)
9234         max_abs_diff = std::abs(diff);
9235       if (std::abs(f0) > Tp(10) * eps
9236        && std::abs(f) > Tp(10) * eps)
9237         {
9238           const Tp frac = diff / f0;
9239           if (std::abs(frac) > max_abs_frac)
9240             max_abs_frac = std::abs(frac);
9241         }
9242     }
9243   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9244 }
9245
9246 // Test data for k=0.80000000000000004, nu=0.69999999999999996.
9247 testcase_ellint_3<double> data178[] = {
9248   { -0.0000000000000000, 0.80000000000000004, 0.69999999999999996, 
9249           0.0000000000000000 },
9250   { 0.17387683562442202, 0.80000000000000004, 0.69999999999999996, 
9251           0.17453292519943295 },
9252   { 0.34420254775101611, 0.80000000000000004, 0.69999999999999996, 
9253           0.34906585039886590 },
9254   { 0.50906439222143685, 0.80000000000000004, 0.69999999999999996, 
9255           0.52359877559829882 },
9256   { 0.66882693152688433, 0.80000000000000004, 0.69999999999999996, 
9257           0.69813170079773179 },
9258   { 0.82574792844091316, 0.80000000000000004, 0.69999999999999996, 
9259           0.87266462599716477 },
9260   { 0.98310431309490953, 0.80000000000000004, 0.69999999999999996, 
9261           1.0471975511965976 },
9262   { 1.1440884535113258, 0.80000000000000004, 0.69999999999999996, 
9263           1.2217304763960306 },
9264   { 1.3103743938952537, 0.80000000000000004, 0.69999999999999996, 
9265           1.3962634015954636 },
9266   { 1.4806912324625332, 0.80000000000000004, 0.69999999999999996, 
9267           1.5707963267948966 },
9268 };
9269
9270 // Test function for k=0.80000000000000004, nu=0.69999999999999996.
9271 template <typename Tp>
9272 void test178()
9273 {
9274   const Tp eps = std::numeric_limits<Tp>::epsilon();
9275   Tp max_abs_diff = -Tp(1);
9276   Tp max_abs_frac = -Tp(1);
9277   unsigned int num_datum = sizeof(data178)
9278                          / sizeof(testcase_ellint_3<double>);
9279   for (unsigned int i = 0; i < num_datum; ++i)
9280     {
9281       const Tp f = std::tr1::ellint_3(Tp(data178[i].k), Tp(data178[i].nu),
9282                    Tp(data178[i].phi));
9283       const Tp f0 = data178[i].f0;
9284       const Tp diff = f - f0;
9285       if (std::abs(diff) > max_abs_diff)
9286         max_abs_diff = std::abs(diff);
9287       if (std::abs(f0) > Tp(10) * eps
9288        && std::abs(f) > Tp(10) * eps)
9289         {
9290           const Tp frac = diff / f0;
9291           if (std::abs(frac) > max_abs_frac)
9292             max_abs_frac = std::abs(frac);
9293         }
9294     }
9295   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9296 }
9297
9298 // Test data for k=0.80000000000000004, nu=0.80000000000000004.
9299 testcase_ellint_3<double> data179[] = {
9300   { -0.0000000000000000, 0.80000000000000004, 0.80000000000000004, 
9301           0.0000000000000000 },
9302   { 0.17370436817515206, 0.80000000000000004, 0.80000000000000004, 
9303           0.17453292519943295 },
9304   { 0.34292405894783395, 0.80000000000000004, 0.80000000000000004, 
9305           0.34906585039886590 },
9306   { 0.50520682176250087, 0.80000000000000004, 0.80000000000000004, 
9307           0.52359877559829882 },
9308   { 0.66081751679736189, 0.80000000000000004, 0.80000000000000004, 
9309           0.69813170079773179 },
9310   { 0.81214672249355102, 0.80000000000000004, 0.80000000000000004, 
9311           0.87266462599716477 },
9312   { 0.96264481387685574, 0.80000000000000004, 0.80000000000000004, 
9313           1.0471975511965976 },
9314   { 1.1156611352656258, 0.80000000000000004, 0.80000000000000004, 
9315           1.2217304763960306 },
9316   { 1.2730756225143889, 0.80000000000000004, 0.80000000000000004, 
9317           1.3962634015954636 },
9318   { 1.4339837018309474, 0.80000000000000004, 0.80000000000000004, 
9319           1.5707963267948966 },
9320 };
9321
9322 // Test function for k=0.80000000000000004, nu=0.80000000000000004.
9323 template <typename Tp>
9324 void test179()
9325 {
9326   const Tp eps = std::numeric_limits<Tp>::epsilon();
9327   Tp max_abs_diff = -Tp(1);
9328   Tp max_abs_frac = -Tp(1);
9329   unsigned int num_datum = sizeof(data179)
9330                          / sizeof(testcase_ellint_3<double>);
9331   for (unsigned int i = 0; i < num_datum; ++i)
9332     {
9333       const Tp f = std::tr1::ellint_3(Tp(data179[i].k), Tp(data179[i].nu),
9334                    Tp(data179[i].phi));
9335       const Tp f0 = data179[i].f0;
9336       const Tp diff = f - f0;
9337       if (std::abs(diff) > max_abs_diff)
9338         max_abs_diff = std::abs(diff);
9339       if (std::abs(f0) > Tp(10) * eps
9340        && std::abs(f) > Tp(10) * eps)
9341         {
9342           const Tp frac = diff / f0;
9343           if (std::abs(frac) > max_abs_frac)
9344             max_abs_frac = std::abs(frac);
9345         }
9346     }
9347   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9348 }
9349
9350 // Test data for k=0.80000000000000004, nu=0.90000000000000002.
9351 testcase_ellint_3<double> data180[] = {
9352   { -0.0000000000000000, 0.80000000000000004, 0.90000000000000002, 
9353           0.0000000000000000 },
9354   { 0.17353251158533153, 0.80000000000000004, 0.90000000000000002, 
9355           0.17453292519943295 },
9356   { 0.34166214791545768, 0.80000000000000004, 0.90000000000000002, 
9357           0.34906585039886590 },
9358   { 0.50144799535130580, 0.80000000000000004, 0.90000000000000002, 
9359           0.52359877559829882 },
9360   { 0.65311976193814447, 0.80000000000000004, 0.90000000000000002, 
9361           0.69813170079773179 },
9362   { 0.79924384892320866, 0.80000000000000004, 0.90000000000000002, 
9363           0.87266462599716477 },
9364   { 0.94345762353365625, 0.80000000000000004, 0.90000000000000002, 
9365           1.0471975511965976 },
9366   { 1.0892582069219159, 0.80000000000000004, 0.90000000000000002, 
9367           1.2217304763960306 },
9368   { 1.2387000876610268, 0.80000000000000004, 0.90000000000000002, 
9369           1.3962634015954636 },
9370   { 1.3911845406776222, 0.80000000000000004, 0.90000000000000002, 
9371           1.5707963267948966 },
9372 };
9373
9374 // Test function for k=0.80000000000000004, nu=0.90000000000000002.
9375 template <typename Tp>
9376 void test180()
9377 {
9378   const Tp eps = std::numeric_limits<Tp>::epsilon();
9379   Tp max_abs_diff = -Tp(1);
9380   Tp max_abs_frac = -Tp(1);
9381   unsigned int num_datum = sizeof(data180)
9382                          / sizeof(testcase_ellint_3<double>);
9383   for (unsigned int i = 0; i < num_datum; ++i)
9384     {
9385       const Tp f = std::tr1::ellint_3(Tp(data180[i].k), Tp(data180[i].nu),
9386                    Tp(data180[i].phi));
9387       const Tp f0 = data180[i].f0;
9388       const Tp diff = f - f0;
9389       if (std::abs(diff) > max_abs_diff)
9390         max_abs_diff = std::abs(diff);
9391       if (std::abs(f0) > Tp(10) * eps
9392        && std::abs(f) > Tp(10) * eps)
9393         {
9394           const Tp frac = diff / f0;
9395           if (std::abs(frac) > max_abs_frac)
9396             max_abs_frac = std::abs(frac);
9397         }
9398     }
9399   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9400 }
9401
9402 // Test data for k=0.89999999999999991, nu=0.0000000000000000.
9403 testcase_ellint_3<double> data181[] = {
9404   { -0.0000000000000000, 0.89999999999999991, 0.0000000000000000, 
9405           0.0000000000000000 },
9406   { 0.17525427376115027, 0.89999999999999991, 0.0000000000000000, 
9407           0.17453292519943295 },
9408   { 0.35492464591297446, 0.89999999999999991, 0.0000000000000000, 
9409           0.34906585039886590 },
9410   { 0.54388221416157123, 0.89999999999999991, 0.0000000000000000, 
9411           0.52359877559829882 },
9412   { 0.74797400423532501, 0.89999999999999991, 0.0000000000000000, 
9413           0.69813170079773179 },
9414   { 0.97463898451966458, 0.89999999999999991, 0.0000000000000000, 
9415           0.87266462599716477 },
9416   { 1.2334463254523438, 0.89999999999999991, 0.0000000000000000, 
9417           1.0471975511965976 },
9418   { 1.5355247765594910, 0.89999999999999991, 0.0000000000000000, 
9419           1.2217304763960306 },
9420   { 1.8882928567775117, 0.89999999999999991, 0.0000000000000000, 
9421           1.3962634015954636 },
9422   { 2.2805491384227699, 0.89999999999999991, 0.0000000000000000, 
9423           1.5707963267948966 },
9424 };
9425
9426 // Test function for k=0.89999999999999991, nu=0.0000000000000000.
9427 template <typename Tp>
9428 void test181()
9429 {
9430   const Tp eps = std::numeric_limits<Tp>::epsilon();
9431   Tp max_abs_diff = -Tp(1);
9432   Tp max_abs_frac = -Tp(1);
9433   unsigned int num_datum = sizeof(data181)
9434                          / sizeof(testcase_ellint_3<double>);
9435   for (unsigned int i = 0; i < num_datum; ++i)
9436     {
9437       const Tp f = std::tr1::ellint_3(Tp(data181[i].k), Tp(data181[i].nu),
9438                    Tp(data181[i].phi));
9439       const Tp f0 = data181[i].f0;
9440       const Tp diff = f - f0;
9441       if (std::abs(diff) > max_abs_diff)
9442         max_abs_diff = std::abs(diff);
9443       if (std::abs(f0) > Tp(10) * eps
9444        && std::abs(f) > Tp(10) * eps)
9445         {
9446           const Tp frac = diff / f0;
9447           if (std::abs(frac) > max_abs_frac)
9448             max_abs_frac = std::abs(frac);
9449         }
9450     }
9451   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9452 }
9453
9454 // Test data for k=0.89999999999999991, nu=0.10000000000000001.
9455 testcase_ellint_3<double> data182[] = {
9456   { -0.0000000000000000, 0.89999999999999991, 0.10000000000000001, 
9457           0.0000000000000000 },
9458   { 0.17507714233254659, 0.89999999999999991, 0.10000000000000001, 
9459           0.17453292519943295 },
9460   { 0.35350932904326521, 0.89999999999999991, 0.10000000000000001, 
9461           0.34906585039886590 },
9462   { 0.53911129989870987, 0.89999999999999991, 0.10000000000000001, 
9463           0.52359877559829882 },
9464   { 0.73666644254508407, 0.89999999999999991, 0.10000000000000001, 
9465           0.69813170079773179 },
9466   { 0.95250736612100184, 0.89999999999999991, 0.10000000000000001, 
9467           0.87266462599716477 },
9468   { 1.1950199550905591, 0.89999999999999991, 0.10000000000000001, 
9469           1.0471975511965976 },
9470   { 1.4741687286340848, 0.89999999999999991, 0.10000000000000001, 
9471           1.2217304763960306 },
9472   { 1.7968678183506053, 0.89999999999999991, 0.10000000000000001, 
9473           1.3962634015954636 },
9474   { 2.1537868513875282, 0.89999999999999991, 0.10000000000000001, 
9475           1.5707963267948966 },
9476 };
9477
9478 // Test function for k=0.89999999999999991, nu=0.10000000000000001.
9479 template <typename Tp>
9480 void test182()
9481 {
9482   const Tp eps = std::numeric_limits<Tp>::epsilon();
9483   Tp max_abs_diff = -Tp(1);
9484   Tp max_abs_frac = -Tp(1);
9485   unsigned int num_datum = sizeof(data182)
9486                          / sizeof(testcase_ellint_3<double>);
9487   for (unsigned int i = 0; i < num_datum; ++i)
9488     {
9489       const Tp f = std::tr1::ellint_3(Tp(data182[i].k), Tp(data182[i].nu),
9490                    Tp(data182[i].phi));
9491       const Tp f0 = data182[i].f0;
9492       const Tp diff = f - f0;
9493       if (std::abs(diff) > max_abs_diff)
9494         max_abs_diff = std::abs(diff);
9495       if (std::abs(f0) > Tp(10) * eps
9496        && std::abs(f) > Tp(10) * eps)
9497         {
9498           const Tp frac = diff / f0;
9499           if (std::abs(frac) > max_abs_frac)
9500             max_abs_frac = std::abs(frac);
9501         }
9502     }
9503   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9504 }
9505
9506 // Test data for k=0.89999999999999991, nu=0.20000000000000001.
9507 testcase_ellint_3<double> data183[] = {
9508   { -0.0000000000000000, 0.89999999999999991, 0.20000000000000001, 
9509           0.0000000000000000 },
9510   { 0.17490065089140930, 0.89999999999999991, 0.20000000000000001, 
9511           0.17453292519943295 },
9512   { 0.35211377590661436, 0.89999999999999991, 0.20000000000000001, 
9513           0.34906585039886590 },
9514   { 0.53448220334204111, 0.89999999999999991, 0.20000000000000001, 
9515           0.52359877559829882 },
9516   { 0.72591368943179591, 0.89999999999999991, 0.20000000000000001, 
9517           0.69813170079773179 },
9518   { 0.93192539780038763, 0.89999999999999991, 0.20000000000000001, 
9519           0.87266462599716477 },
9520   { 1.1600809679692681, 0.89999999999999991, 0.20000000000000001, 
9521           1.0471975511965976 },
9522   { 1.4195407225882508, 0.89999999999999991, 0.20000000000000001, 
9523           1.2217304763960306 },
9524   { 1.7168966476424521, 0.89999999999999991, 0.20000000000000001, 
9525           1.3962634015954636 },
9526   { 2.0443194576468890, 0.89999999999999991, 0.20000000000000001, 
9527           1.5707963267948966 },
9528 };
9529
9530 // Test function for k=0.89999999999999991, nu=0.20000000000000001.
9531 template <typename Tp>
9532 void test183()
9533 {
9534   const Tp eps = std::numeric_limits<Tp>::epsilon();
9535   Tp max_abs_diff = -Tp(1);
9536   Tp max_abs_frac = -Tp(1);
9537   unsigned int num_datum = sizeof(data183)
9538                          / sizeof(testcase_ellint_3<double>);
9539   for (unsigned int i = 0; i < num_datum; ++i)
9540     {
9541       const Tp f = std::tr1::ellint_3(Tp(data183[i].k), Tp(data183[i].nu),
9542                    Tp(data183[i].phi));
9543       const Tp f0 = data183[i].f0;
9544       const Tp diff = f - f0;
9545       if (std::abs(diff) > max_abs_diff)
9546         max_abs_diff = std::abs(diff);
9547       if (std::abs(f0) > Tp(10) * eps
9548        && std::abs(f) > Tp(10) * eps)
9549         {
9550           const Tp frac = diff / f0;
9551           if (std::abs(frac) > max_abs_frac)
9552             max_abs_frac = std::abs(frac);
9553         }
9554     }
9555   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9556 }
9557
9558 // Test data for k=0.89999999999999991, nu=0.29999999999999999.
9559 testcase_ellint_3<double> data184[] = {
9560   { -0.0000000000000000, 0.89999999999999991, 0.29999999999999999, 
9561           0.0000000000000000 },
9562   { 0.17472479532647534, 0.89999999999999991, 0.29999999999999999, 
9563           0.17453292519943295 },
9564   { 0.35073750187374114, 0.89999999999999991, 0.29999999999999999, 
9565           0.34906585039886590 },
9566   { 0.52998766129466968, 0.89999999999999991, 0.29999999999999999, 
9567           0.52359877559829882 },
9568   { 0.71566993548699565, 0.89999999999999991, 0.29999999999999999, 
9569           0.69813170079773179 },
9570   { 0.91271517762560195, 0.89999999999999991, 0.29999999999999999, 
9571           0.87266462599716477 },
9572   { 1.1281241199843368, 0.89999999999999991, 0.29999999999999999, 
9573           1.0471975511965976 },
9574   { 1.3704929576917448, 0.89999999999999991, 0.29999999999999999, 
9575           1.2217304763960306 },
9576   { 1.6461981511487711, 0.89999999999999991, 0.29999999999999999, 
9577           1.3962634015954636 },
9578   { 1.9486280260314424, 0.89999999999999991, 0.29999999999999999, 
9579           1.5707963267948966 },
9580 };
9581
9582 // Test function for k=0.89999999999999991, nu=0.29999999999999999.
9583 template <typename Tp>
9584 void test184()
9585 {
9586   const Tp eps = std::numeric_limits<Tp>::epsilon();
9587   Tp max_abs_diff = -Tp(1);
9588   Tp max_abs_frac = -Tp(1);
9589   unsigned int num_datum = sizeof(data184)
9590                          / sizeof(testcase_ellint_3<double>);
9591   for (unsigned int i = 0; i < num_datum; ++i)
9592     {
9593       const Tp f = std::tr1::ellint_3(Tp(data184[i].k), Tp(data184[i].nu),
9594                    Tp(data184[i].phi));
9595       const Tp f0 = data184[i].f0;
9596       const Tp diff = f - f0;
9597       if (std::abs(diff) > max_abs_diff)
9598         max_abs_diff = std::abs(diff);
9599       if (std::abs(f0) > Tp(10) * eps
9600        && std::abs(f) > Tp(10) * eps)
9601         {
9602           const Tp frac = diff / f0;
9603           if (std::abs(frac) > max_abs_frac)
9604             max_abs_frac = std::abs(frac);
9605         }
9606     }
9607   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9608 }
9609
9610 // Test data for k=0.89999999999999991, nu=0.40000000000000002.
9611 testcase_ellint_3<double> data185[] = {
9612   { -0.0000000000000000, 0.89999999999999991, 0.40000000000000002, 
9613           0.0000000000000000 },
9614   { 0.17454957156468839, 0.89999999999999991, 0.40000000000000002, 
9615           0.17453292519943295 },
9616   { 0.34938003933330430, 0.89999999999999991, 0.40000000000000002, 
9617           0.34906585039886590 },
9618   { 0.52562093533067444, 0.89999999999999991, 0.40000000000000002, 
9619           0.52359877559829882 },
9620   { 0.70589461324915681, 0.89999999999999991, 0.40000000000000002, 
9621           0.69813170079773179 },
9622   { 0.89472658511942849, 0.89999999999999991, 0.40000000000000002, 
9623           0.87266462599716477 },
9624   { 1.0987419542323438, 0.89999999999999991, 0.40000000000000002, 
9625           1.0471975511965976 },
9626   { 1.3261349565496301, 0.89999999999999991, 0.40000000000000002, 
9627           1.2217304763960306 },
9628   { 1.5831293909853761, 0.89999999999999991, 0.40000000000000002, 
9629           1.3962634015954636 },
9630   { 1.8641114227238347, 0.89999999999999991, 0.40000000000000002, 
9631           1.5707963267948966 },
9632 };
9633
9634 // Test function for k=0.89999999999999991, nu=0.40000000000000002.
9635 template <typename Tp>
9636 void test185()
9637 {
9638   const Tp eps = std::numeric_limits<Tp>::epsilon();
9639   Tp max_abs_diff = -Tp(1);
9640   Tp max_abs_frac = -Tp(1);
9641   unsigned int num_datum = sizeof(data185)
9642                          / sizeof(testcase_ellint_3<double>);
9643   for (unsigned int i = 0; i < num_datum; ++i)
9644     {
9645       const Tp f = std::tr1::ellint_3(Tp(data185[i].k), Tp(data185[i].nu),
9646                    Tp(data185[i].phi));
9647       const Tp f0 = data185[i].f0;
9648       const Tp diff = f - f0;
9649       if (std::abs(diff) > max_abs_diff)
9650         max_abs_diff = std::abs(diff);
9651       if (std::abs(f0) > Tp(10) * eps
9652        && std::abs(f) > Tp(10) * eps)
9653         {
9654           const Tp frac = diff / f0;
9655           if (std::abs(frac) > max_abs_frac)
9656             max_abs_frac = std::abs(frac);
9657         }
9658     }
9659   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9660 }
9661
9662 // Test data for k=0.89999999999999991, nu=0.50000000000000000.
9663 testcase_ellint_3<double> data186[] = {
9664   { -0.0000000000000000, 0.89999999999999991, 0.50000000000000000, 
9665           0.0000000000000000 },
9666   { 0.17437497557073336, 0.89999999999999991, 0.50000000000000000, 
9667           0.17453292519943295 },
9668   { 0.34804093691586013, 0.89999999999999991, 0.50000000000000000, 
9669           0.34906585039886590 },
9670   { 0.52137576320372903, 0.89999999999999991, 0.50000000000000000, 
9671           0.52359877559829882 },
9672   { 0.69655163996912262, 0.89999999999999991, 0.50000000000000000, 
9673           0.69813170079773179 },
9674   { 0.87783188683054236, 0.89999999999999991, 0.50000000000000000, 
9675           0.87266462599716477 },
9676   { 1.0716015959755183, 0.89999999999999991, 0.50000000000000000, 
9677           1.0471975511965976 },
9678   { 1.2857636916026749, 0.89999999999999991, 0.50000000000000000, 
9679           1.2217304763960306 },
9680   { 1.5264263913252358, 0.89999999999999991, 0.50000000000000000, 
9681           1.3962634015954636 },
9682   { 1.7888013241937859, 0.89999999999999991, 0.50000000000000000, 
9683           1.5707963267948966 },
9684 };
9685
9686 // Test function for k=0.89999999999999991, nu=0.50000000000000000.
9687 template <typename Tp>
9688 void test186()
9689 {
9690   const Tp eps = std::numeric_limits<Tp>::epsilon();
9691   Tp max_abs_diff = -Tp(1);
9692   Tp max_abs_frac = -Tp(1);
9693   unsigned int num_datum = sizeof(data186)
9694                          / sizeof(testcase_ellint_3<double>);
9695   for (unsigned int i = 0; i < num_datum; ++i)
9696     {
9697       const Tp f = std::tr1::ellint_3(Tp(data186[i].k), Tp(data186[i].nu),
9698                    Tp(data186[i].phi));
9699       const Tp f0 = data186[i].f0;
9700       const Tp diff = f - f0;
9701       if (std::abs(diff) > max_abs_diff)
9702         max_abs_diff = std::abs(diff);
9703       if (std::abs(f0) > Tp(10) * eps
9704        && std::abs(f) > Tp(10) * eps)
9705         {
9706           const Tp frac = diff / f0;
9707           if (std::abs(frac) > max_abs_frac)
9708             max_abs_frac = std::abs(frac);
9709         }
9710     }
9711   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9712 }
9713
9714 // Test data for k=0.89999999999999991, nu=0.59999999999999998.
9715 testcase_ellint_3<double> data187[] = {
9716   { -0.0000000000000000, 0.89999999999999991, 0.59999999999999998, 
9717           0.0000000000000000 },
9718   { 0.17420100334657815, 0.89999999999999991, 0.59999999999999998, 
9719           0.17453292519943295 },
9720   { 0.34671975876122157, 0.89999999999999991, 0.59999999999999998, 
9721           0.34906585039886590 },
9722   { 0.51724631570707957, 0.89999999999999991, 0.59999999999999998, 
9723           0.52359877559829882 },
9724   { 0.68760879113743034, 0.89999999999999991, 0.59999999999999998, 
9725           0.69813170079773179 },
9726   { 0.86192157779698364, 0.89999999999999991, 0.59999999999999998, 
9727           0.87266462599716477 },
9728   { 1.0464279696166352, 0.89999999999999991, 0.59999999999999998, 
9729           1.0471975511965976 },
9730   { 1.2488156247094004, 0.89999999999999991, 0.59999999999999998, 
9731           1.2217304763960306 },
9732   { 1.4750988777188470, 0.89999999999999991, 0.59999999999999998, 
9733           1.3962634015954636 },
9734   { 1.7211781128919521, 0.89999999999999991, 0.59999999999999998, 
9735           1.5707963267948966 },
9736 };
9737
9738 // Test function for k=0.89999999999999991, nu=0.59999999999999998.
9739 template <typename Tp>
9740 void test187()
9741 {
9742   const Tp eps = std::numeric_limits<Tp>::epsilon();
9743   Tp max_abs_diff = -Tp(1);
9744   Tp max_abs_frac = -Tp(1);
9745   unsigned int num_datum = sizeof(data187)
9746                          / sizeof(testcase_ellint_3<double>);
9747   for (unsigned int i = 0; i < num_datum; ++i)
9748     {
9749       const Tp f = std::tr1::ellint_3(Tp(data187[i].k), Tp(data187[i].nu),
9750                    Tp(data187[i].phi));
9751       const Tp f0 = data187[i].f0;
9752       const Tp diff = f - f0;
9753       if (std::abs(diff) > max_abs_diff)
9754         max_abs_diff = std::abs(diff);
9755       if (std::abs(f0) > Tp(10) * eps
9756        && std::abs(f) > Tp(10) * eps)
9757         {
9758           const Tp frac = diff / f0;
9759           if (std::abs(frac) > max_abs_frac)
9760             max_abs_frac = std::abs(frac);
9761         }
9762     }
9763   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9764 }
9765
9766 // Test data for k=0.89999999999999991, nu=0.69999999999999996.
9767 testcase_ellint_3<double> data188[] = {
9768   { -0.0000000000000000, 0.89999999999999991, 0.69999999999999996, 
9769           0.0000000000000000 },
9770   { 0.17402765093102210, 0.89999999999999991, 0.69999999999999996, 
9771           0.17453292519943295 },
9772   { 0.34541608382635131, 0.89999999999999991, 0.69999999999999996, 
9773           0.34906585039886590 },
9774   { 0.51322715827061693, 0.89999999999999991, 0.69999999999999996, 
9775           0.52359877559829882 },
9776   { 0.67903717872440283, 0.89999999999999991, 0.69999999999999996, 
9777           0.69813170079773179 },
9778   { 0.84690113601682671, 0.89999999999999991, 0.69999999999999996, 
9779           0.87266462599716477 },
9780   { 1.0229914311548416, 0.89999999999999991, 0.69999999999999996, 
9781           1.0471975511965976 },
9782   { 1.2148329639709381, 0.89999999999999991, 0.69999999999999996, 
9783           1.2217304763960306 },
9784   { 1.4283586501307799, 0.89999999999999991, 0.69999999999999996, 
9785           1.3962634015954636 },
9786   { 1.6600480747670936, 0.89999999999999991, 0.69999999999999996, 
9787           1.5707963267948966 },
9788 };
9789
9790 // Test function for k=0.89999999999999991, nu=0.69999999999999996.
9791 template <typename Tp>
9792 void test188()
9793 {
9794   const Tp eps = std::numeric_limits<Tp>::epsilon();
9795   Tp max_abs_diff = -Tp(1);
9796   Tp max_abs_frac = -Tp(1);
9797   unsigned int num_datum = sizeof(data188)
9798                          / sizeof(testcase_ellint_3<double>);
9799   for (unsigned int i = 0; i < num_datum; ++i)
9800     {
9801       const Tp f = std::tr1::ellint_3(Tp(data188[i].k), Tp(data188[i].nu),
9802                    Tp(data188[i].phi));
9803       const Tp f0 = data188[i].f0;
9804       const Tp diff = f - f0;
9805       if (std::abs(diff) > max_abs_diff)
9806         max_abs_diff = std::abs(diff);
9807       if (std::abs(f0) > Tp(10) * eps
9808        && std::abs(f) > Tp(10) * eps)
9809         {
9810           const Tp frac = diff / f0;
9811           if (std::abs(frac) > max_abs_frac)
9812             max_abs_frac = std::abs(frac);
9813         }
9814     }
9815   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9816 }
9817
9818 // Test data for k=0.89999999999999991, nu=0.80000000000000004.
9819 testcase_ellint_3<double> data189[] = {
9820   { -0.0000000000000000, 0.89999999999999991, 0.80000000000000004, 
9821           0.0000000000000000 },
9822   { 0.17385491439925149, 0.89999999999999991, 0.80000000000000004, 
9823           0.17453292519943295 },
9824   { 0.34412950523113928, 0.89999999999999991, 0.80000000000000004, 
9825           0.34906585039886590 },
9826   { 0.50931321668729601, 0.89999999999999991, 0.80000000000000004, 
9827           0.52359877559829882 },
9828   { 0.67081081392296327, 0.89999999999999991, 0.80000000000000004, 
9829           0.69813170079773179 },
9830   { 0.83268846097293259, 0.89999999999999991, 0.80000000000000004, 
9831           0.87266462599716477 },
9832   { 1.0010985015814025, 0.89999999999999991, 0.80000000000000004, 
9833           1.0471975511965976 },
9834   { 1.1834394045489678, 0.89999999999999991, 0.80000000000000004, 
9835           1.2217304763960306 },
9836   { 1.3855695891683182, 0.89999999999999991, 0.80000000000000004, 
9837           1.3962634015954636 },
9838   { 1.6044591960982200, 0.89999999999999991, 0.80000000000000004, 
9839           1.5707963267948966 },
9840 };
9841
9842 // Test function for k=0.89999999999999991, nu=0.80000000000000004.
9843 template <typename Tp>
9844 void test189()
9845 {
9846   const Tp eps = std::numeric_limits<Tp>::epsilon();
9847   Tp max_abs_diff = -Tp(1);
9848   Tp max_abs_frac = -Tp(1);
9849   unsigned int num_datum = sizeof(data189)
9850                          / sizeof(testcase_ellint_3<double>);
9851   for (unsigned int i = 0; i < num_datum; ++i)
9852     {
9853       const Tp f = std::tr1::ellint_3(Tp(data189[i].k), Tp(data189[i].nu),
9854                    Tp(data189[i].phi));
9855       const Tp f0 = data189[i].f0;
9856       const Tp diff = f - f0;
9857       if (std::abs(diff) > max_abs_diff)
9858         max_abs_diff = std::abs(diff);
9859       if (std::abs(f0) > Tp(10) * eps
9860        && std::abs(f) > Tp(10) * eps)
9861         {
9862           const Tp frac = diff / f0;
9863           if (std::abs(frac) > max_abs_frac)
9864             max_abs_frac = std::abs(frac);
9865         }
9866     }
9867   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9868 }
9869
9870 // Test data for k=0.89999999999999991, nu=0.90000000000000002.
9871 testcase_ellint_3<double> data190[] = {
9872   { -0.0000000000000000, 0.89999999999999991, 0.90000000000000002, 
9873           0.0000000000000000 },
9874   { 0.17368278986240138, 0.89999999999999991, 0.90000000000000002, 
9875           0.17453292519943295 },
9876   { 0.34285962963961397, 0.89999999999999991, 0.90000000000000002, 
9877           0.34906585039886590 },
9878   { 0.50549974644993312, 0.89999999999999991, 0.90000000000000002, 
9879           0.52359877559829882 },
9880   { 0.66290623857720876, 0.89999999999999991, 0.90000000000000002, 
9881           0.69813170079773179 },
9882   { 0.81921183128847164, 0.89999999999999991, 0.90000000000000002, 
9883           0.87266462599716477 },
9884   { 0.98058481956066368, 0.89999999999999991, 0.90000000000000002, 
9885           1.0471975511965976 },
9886   { 1.1543223520473569, 0.89999999999999991, 0.90000000000000002, 
9887           1.2217304763960306 },
9888   { 1.3462119782292934, 0.89999999999999991, 0.90000000000000002, 
9889           1.3962634015954636 },
9890   { 1.5536420236310944, 0.89999999999999991, 0.90000000000000002, 
9891           1.5707963267948966 },
9892 };
9893
9894 // Test function for k=0.89999999999999991, nu=0.90000000000000002.
9895 template <typename Tp>
9896 void test190()
9897 {
9898   const Tp eps = std::numeric_limits<Tp>::epsilon();
9899   Tp max_abs_diff = -Tp(1);
9900   Tp max_abs_frac = -Tp(1);
9901   unsigned int num_datum = sizeof(data190)
9902                          / sizeof(testcase_ellint_3<double>);
9903   for (unsigned int i = 0; i < num_datum; ++i)
9904     {
9905       const Tp f = std::tr1::ellint_3(Tp(data190[i].k), Tp(data190[i].nu),
9906                    Tp(data190[i].phi));
9907       const Tp f0 = data190[i].f0;
9908       const Tp diff = f - f0;
9909       if (std::abs(diff) > max_abs_diff)
9910         max_abs_diff = std::abs(diff);
9911       if (std::abs(f0) > Tp(10) * eps
9912        && std::abs(f) > Tp(10) * eps)
9913         {
9914           const Tp frac = diff / f0;
9915           if (std::abs(frac) > max_abs_frac)
9916             max_abs_frac = std::abs(frac);
9917         }
9918     }
9919   VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9920 }
9921
9922 int main(int, char**)
9923 {
9924   test001<double>();
9925   test002<double>();
9926   test003<double>();
9927   test004<double>();
9928   test005<double>();
9929   test006<double>();
9930   test007<double>();
9931   test008<double>();
9932   test009<double>();
9933   test010<double>();
9934   test011<double>();
9935   test012<double>();
9936   test013<double>();
9937   test014<double>();
9938   test015<double>();
9939   test016<double>();
9940   test017<double>();
9941   test018<double>();
9942   test019<double>();
9943   test020<double>();
9944   test021<double>();
9945   test022<double>();
9946   test023<double>();
9947   test024<double>();
9948   test025<double>();
9949   test026<double>();
9950   test027<double>();
9951   test028<double>();
9952   test029<double>();
9953   test030<double>();
9954   test031<double>();
9955   test032<double>();
9956   test033<double>();
9957   test034<double>();
9958   test035<double>();
9959   test036<double>();
9960   test037<double>();
9961   test038<double>();
9962   test039<double>();
9963   test040<double>();
9964   test041<double>();
9965   test042<double>();
9966   test043<double>();
9967   test044<double>();
9968   test045<double>();
9969   test046<double>();
9970   test047<double>();
9971   test048<double>();
9972   test049<double>();
9973   test050<double>();
9974   test051<double>();
9975   test052<double>();
9976   test053<double>();
9977   test054<double>();
9978   test055<double>();
9979   test056<double>();
9980   test057<double>();
9981   test058<double>();
9982   test059<double>();
9983   test060<double>();
9984   test061<double>();
9985   test062<double>();
9986   test063<double>();
9987   test064<double>();
9988   test065<double>();
9989   test066<double>();
9990   test067<double>();
9991   test068<double>();
9992   test069<double>();
9993   test070<double>();
9994   test071<double>();
9995   test072<double>();
9996   test073<double>();
9997   test074<double>();
9998   test075<double>();
9999   test076<double>();
10000   test077<double>();
10001   test078<double>();
10002   test079<double>();
10003   test080<double>();
10004   test081<double>();
10005   test082<double>();
10006   test083<double>();
10007   test084<double>();
10008   test085<double>();
10009   test086<double>();
10010   test087<double>();
10011   test088<double>();
10012   test089<double>();
10013   test090<double>();
10014   test091<double>();
10015   test092<double>();
10016   test093<double>();
10017   test094<double>();
10018   test095<double>();
10019   test096<double>();
10020   test097<double>();
10021   test098<double>();
10022   test099<double>();
10023   test100<double>();
10024   test101<double>();
10025   test102<double>();
10026   test103<double>();
10027   test104<double>();
10028   test105<double>();
10029   test106<double>();
10030   test107<double>();
10031   test108<double>();
10032   test109<double>();
10033   test110<double>();
10034   test111<double>();
10035   test112<double>();
10036   test113<double>();
10037   test114<double>();
10038   test115<double>();
10039   test116<double>();
10040   test117<double>();
10041   test118<double>();
10042   test119<double>();
10043   test120<double>();
10044   test121<double>();
10045   test122<double>();
10046   test123<double>();
10047   test124<double>();
10048   test125<double>();
10049   test126<double>();
10050   test127<double>();
10051   test128<double>();
10052   test129<double>();
10053   test130<double>();
10054   test131<double>();
10055   test132<double>();
10056   test133<double>();
10057   test134<double>();
10058   test135<double>();
10059   test136<double>();
10060   test137<double>();
10061   test138<double>();
10062   test139<double>();
10063   test140<double>();
10064   test141<double>();
10065   test142<double>();
10066   test143<double>();
10067   test144<double>();
10068   test145<double>();
10069   test146<double>();
10070   test147<double>();
10071   test148<double>();
10072   test149<double>();
10073   test150<double>();
10074   test151<double>();
10075   test152<double>();
10076   test153<double>();
10077   test154<double>();
10078   test155<double>();
10079   test156<double>();
10080   test157<double>();
10081   test158<double>();
10082   test159<double>();
10083   test160<double>();
10084   test161<double>();
10085   test162<double>();
10086   test163<double>();
10087   test164<double>();
10088   test165<double>();
10089   test166<double>();
10090   test167<double>();
10091   test168<double>();
10092   test169<double>();
10093   test170<double>();
10094   test171<double>();
10095   test172<double>();
10096   test173<double>();
10097   test174<double>();
10098   test175<double>();
10099   test176<double>();
10100   test177<double>();
10101   test178<double>();
10102   test179<double>();
10103   test180<double>();
10104   test181<double>();
10105   test182<double>();
10106   test183<double>();
10107   test184<double>();
10108   test185<double>();
10109   test186<double>();
10110   test187<double>();
10111   test188<double>();
10112   test189<double>();
10113   test190<double>();
10114   return 0;
10115 }