1  // Copyright (C) 2015-2023 Free Software Foundation, Inc.
       2  //
       3  // This file is part of the GNU ISO C++ Library.  This library is free
       4  // software; you can redistribute it and/or modify it under the
       5  // terms of the GNU General Public License as published by the
       6  // Free Software Foundation; either version 2, or (at your option)
       7  // any later version.
       8  //
       9  // This library is distributed in the hope that it will be useful,
      10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
      11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      12  // GNU General Public License for more details.
      13  //
      14  // You should have received a copy of the GNU General Public License along
      15  // with this library; see the file COPYING3.  If not see
      16  // <http://www.gnu.org/licenses/>.
      17  
      18  //  testcase.h
      19  
      20  //
      21  //  These are little PODs for special function inputs and
      22  //  expexted results for the testsuite.
      23  //
      24  
      25  #ifndef _GLIBCXX_SPECFUN_TESTCASE_H
      26  #define _GLIBCXX_SPECFUN_TESTCASE_H
      27  
      28  //  Associated Laguerre polynomials.
      29  template<typename _Tp>
      30    struct testcase_assoc_laguerre
      31    {
      32      _Tp f0;
      33      unsigned int n;
      34      unsigned int m;
      35      _Tp x;
      36      _Tp f;
      37    };
      38  
      39  //  Associated Legendre functions.
      40  template<typename _Tp>
      41    struct testcase_assoc_legendre
      42    {
      43      _Tp f0;
      44      unsigned int l;
      45      unsigned int m;
      46      _Tp x;
      47      _Tp f;
      48    };
      49  
      50  //  Beta function.
      51  template<typename _Tp>
      52    struct testcase_beta
      53    {
      54      _Tp f0;
      55      _Tp x;
      56      _Tp y;
      57      _Tp f;
      58    };
      59  
      60  //  Complete elliptic integrals of the first kind.
      61  template<typename _Tp>
      62    struct testcase_comp_ellint_1
      63    {
      64      _Tp f0;
      65      _Tp k;
      66      _Tp f;
      67    };
      68  
      69  //  Complete elliptic integrals of the second kind.
      70  template<typename _Tp>
      71    struct testcase_comp_ellint_2
      72    {
      73      _Tp f0;
      74      _Tp k;
      75      _Tp f;
      76    };
      77  
      78  //  Complete elliptic integrals of the third kind.
      79  template<typename _Tp>
      80    struct testcase_comp_ellint_3
      81    {
      82      _Tp f0;
      83      _Tp k;
      84      _Tp nu;
      85      _Tp f;
      86    };
      87  
      88  //  Confluent hypergeometric functions.
      89  template<typename _Tp>
      90    struct testcase_conf_hyperg
      91    {
      92      _Tp f0;
      93      _Tp a;
      94      _Tp c;
      95      _Tp x;
      96      _Tp f;
      97    };
      98  
      99  //  Generic cylindrical Bessel functions.
     100  template<typename _Tp>
     101    struct testcase_cyl_bessel
     102    {
     103      _Tp f0;
     104      _Tp nu;
     105      _Tp x;
     106      _Tp f;
     107    };
     108  
     109  //  Regular modified cylindrical Bessel functions.
     110  template<typename _Tp>
     111    struct testcase_cyl_bessel_i
     112    {
     113      _Tp f0;
     114      _Tp nu;
     115      _Tp x;
     116      _Tp f;
     117    };
     118  
     119  //  Cylindrical Bessel functions (of the first kind).
     120  template<typename _Tp>
     121    struct testcase_cyl_bessel_j
     122    {
     123      _Tp f0;
     124      _Tp nu;
     125      _Tp x;
     126      _Tp f;
     127    };
     128  
     129  //  Irregular modified cylindrical Bessel functions.
     130  template<typename _Tp>
     131    struct testcase_cyl_bessel_k
     132    {
     133      _Tp f0;
     134      _Tp nu;
     135      _Tp x;
     136      _Tp f;
     137    };
     138  
     139  //  Cylindrical Neumann functions.
     140  template<typename _Tp>
     141    struct testcase_cyl_neumann
     142    {
     143      _Tp f0;
     144      _Tp nu;
     145      _Tp x;
     146      _Tp f;
     147    };
     148  
     149  //  Elliptic integrals of the first kind.
     150  template<typename _Tp>
     151    struct testcase_ellint_1
     152    {
     153      _Tp f0;
     154      _Tp k;
     155      _Tp phi;
     156      _Tp f;
     157    };
     158  
     159  //  Elliptic integrals of the second kind.
     160  template<typename _Tp>
     161    struct testcase_ellint_2
     162    {
     163      _Tp f0;
     164      _Tp k;
     165      _Tp phi;
     166      _Tp f;
     167    };
     168  
     169  //  Elliptic integrals of the third kind.
     170  template<typename _Tp>
     171    struct testcase_ellint_3
     172    {
     173      _Tp f0;
     174      _Tp k;
     175      _Tp nu;
     176      _Tp phi;
     177      _Tp f;
     178    };
     179  
     180  //  Exponential integral.
     181  template<typename _Tp>
     182    struct testcase_expint
     183    {
     184      _Tp f0;
     185      _Tp x;
     186      _Tp f;
     187    };
     188  
     189  //  Hermite polynomials
     190  template<typename _Tp>
     191    struct testcase_hermite
     192    {
     193      _Tp f0;
     194      unsigned int n;
     195      _Tp x;
     196      _Tp f;
     197    };
     198  
     199  //  Hypergeometric functions.
     200  template<typename _Tp>
     201    struct testcase_hyperg
     202    {
     203      _Tp f0;
     204      _Tp a;
     205      _Tp b;
     206      _Tp c;
     207      _Tp x;
     208      _Tp f;
     209    };
     210  
     211  //  Laguerre polynomials.
     212  template<typename _Tp>
     213    struct testcase_laguerre
     214    {
     215      _Tp f0;
     216      unsigned int n;
     217      _Tp x;
     218      _Tp f;
     219    };
     220  
     221  //  Legendre polynomials.
     222  template<typename _Tp>
     223    struct testcase_legendre
     224    {
     225      _Tp f0;
     226      unsigned int l;
     227      _Tp x;
     228      _Tp f;
     229    };
     230  
     231  //  Riemann zeta function.
     232  template<typename _Tp>
     233    struct testcase_riemann_zeta
     234    {
     235      _Tp f0;
     236      _Tp s;
     237      _Tp f;
     238    };
     239  
     240  //  Hurwitz zeta function.
     241  template<typename _Tp>
     242    struct testcase_hurwitz_zeta
     243    {
     244      _Tp f0;
     245      _Tp s;
     246      _Tp a;
     247      _Tp f;
     248    };
     249  
     250  //  Spherical Bessel functions.
     251  template<typename _Tp>
     252    struct testcase_sph_bessel
     253    {
     254      _Tp f0;
     255      unsigned int n;
     256      _Tp x;
     257      _Tp f;
     258    };
     259  
     260  //  Regular modified spherical Bessel functions.
     261  template<typename _Tp>
     262    struct testcase_sph_bessel_i
     263    {
     264      _Tp f0;
     265      unsigned int n;
     266      _Tp x;
     267      _Tp f;
     268    };
     269  
     270  //  Irregular modified spherical Bessel functions.
     271  template<typename _Tp>
     272    struct testcase_sph_bessel_k
     273    {
     274      _Tp f0;
     275      unsigned int n;
     276      _Tp x;
     277      _Tp f;
     278    };
     279  
     280  //  Spherical Legendre functions.
     281  template<typename _Tp>
     282    struct testcase_sph_legendre
     283    {
     284      _Tp f0;
     285      unsigned int l;
     286      unsigned int m;
     287      _Tp theta;
     288      _Tp f;
     289    };
     290  
     291  //  Spherical Neumann functions.
     292  template<typename _Tp>
     293    struct testcase_sph_neumann
     294    {
     295      _Tp f0;
     296      unsigned int n;
     297      _Tp x;
     298      _Tp f;
     299    };
     300  
     301  //  Airy Ai functions.
     302  template<typename _Tp>
     303    struct testcase_airy_ai
     304    {
     305      _Tp f0;
     306      _Tp x;
     307      _Tp f;
     308    };
     309  
     310  //  Airy Bi functions.
     311  template<typename _Tp>
     312    struct testcase_airy_bi
     313    {
     314      _Tp f0;
     315      _Tp x;
     316      _Tp f;
     317    };
     318  
     319  //  Upper incomplete gamma functions.
     320  template<typename _Tp>
     321    struct testcase_gamma_u
     322    {
     323      _Tp f0;
     324      _Tp n;
     325      _Tp x;
     326      _Tp f;
     327    };
     328  
     329  //  Lower incomplete gamma functions.
     330  template<typename _Tp>
     331    struct testcase_gamma_l
     332    {
     333      _Tp f0;
     334      _Tp n;
     335      _Tp x;
     336      _Tp f;
     337    };
     338  
     339  //  Dilogarithm functions.
     340  template<typename _Tp>
     341    struct testcase_dilog
     342    {
     343      _Tp f0;
     344      _Tp x;
     345      _Tp f;
     346    };
     347  
     348  //  Digamma functions.
     349  template<typename _Tp>
     350    struct testcase_gamma
     351    {
     352      _Tp f0;
     353      _Tp x;
     354      _Tp f;
     355    };
     356  
     357  template<typename _Tp>
     358    struct testcase_comp_ellint_rf
     359    {
     360      _Tp f0;
     361      _Tp x;
     362      _Tp y;
     363      _Tp f;
     364    };
     365  
     366  template<typename _Tp>
     367    struct testcase_ellint_rf
     368    {
     369      _Tp f0;
     370      _Tp x;
     371      _Tp y;
     372      _Tp z;
     373      _Tp f;
     374    };
     375  
     376  template<typename _Tp>
     377    struct testcase_ellint_rj
     378    {
     379      _Tp f0;
     380      _Tp x;
     381      _Tp y;
     382      _Tp z;
     383      _Tp p;
     384      _Tp f;
     385    };
     386  
     387  template<typename _Tp>
     388    struct testcase_ellint_rd
     389    {
     390      _Tp f0;
     391      _Tp x;
     392      _Tp y;
     393      _Tp z;
     394      _Tp f;
     395    };
     396  
     397  template<typename _Tp>
     398    struct testcase_comp_ellint_rg
     399    {
     400      _Tp f0;
     401      _Tp x;
     402      _Tp y;
     403      _Tp f;
     404    };
     405  
     406  template<typename _Tp>
     407    struct testcase_ellint_rg
     408    {
     409      _Tp f0;
     410      _Tp x;
     411      _Tp y;
     412      _Tp z;
     413      _Tp f;
     414    };
     415  
     416  #endif // _GLIBCXX_SPECFUN_TESTCASE_H