### ----------------------------------------------------
### -- Math::Libgsl::Function
### -- Licenses: Artistic-2.0
### -- Authors: Fernando Santagata
### -- File: t/01-raw-function.rakutest
### ----------------------------------------------------
### -- Chunk 4 of 5
(0, 1.3e0), 0.322651504564963746879400858624, :rel-tol(10⁻¹⁵), 'ψₙ(x)';
  ok gsl_sf_hermite_func_e(0, 1.3e0, $res) == 0, 'ψₙ(x) with error check';
  is-approx $res.val, 0.322651504564963746879400858624, :rel-tol(10⁻¹⁵), 'ψₙ(x) with error check: value';
  ok gsl_sf_hermite_func_array(1, 1.3e0, $res_array) == 0, 'ψₙ(x) array';
  is-approx $res_array[0], 0.322651504564963746879400858624, :rel-tol(10⁻¹⁵), 'ψₙ(x) array: value';
  $res_array[0] = 1e0;
  $res_array[$_] = $res_array[$_-1]/2e0 for 1…10;
  is-approx gsl_sf_hermite_func_series(10, .75e0, $res_array), 0.8171775729199896, :rel-tol(10⁻¹⁵), 'sum(aₙψₙ(x))';
  ok gsl_sf_hermite_func_series_e(10, .75e0, $res_array, $res) == 0, 'sum(aₙψₙ(x)) with error check';
  is-approx $res.val, 0.8171775729199896, :rel-tol(10⁻¹⁵), 'sum(aₙψₙ(x)) with error check: value';
  is-approx gsl_sf_hermite_func_der(0, 28, .75e0), 0.235262808086212406493191404, :rel-tol(10⁻¹⁵), 'm-derivative of ψₙ(x)';
  ok gsl_sf_hermite_func_der_e(0, 28,.75e0, $res) == 0, 'm-derivative of ψₙ(x) with error check';
  is-approx $res.val, 0.235262808086212406493191404, :rel-tol(10⁻¹⁵), 'm-derivative of ψₙ(x) with error check: value';
  ok gsl_sf_hermite_phys_zero(17, 1) == 0.531633001342654731349086553718, 's-th zero of Hₙ(x)';
  ok gsl_sf_hermite_phys_zero_e(17, 1, $res) == 0, 's-th zero of Hₙ(x) with error check';
  ok $res.val == 0.531633001342654731349086553718, 's-th zero of Hₙ(x) with error check: value';
  ok gsl_sf_hermite_prob_zero(24, 1) == 0.317370096629452319318170455994, 's-th zero of probabilistic Hₙ(x)';
  ok gsl_sf_hermite_prob_zero_e(24, 1, $res) == 0, 's-th zero of probabilistic Hₙ(x) with error check';
  ok $res.val == 0.317370096629452319318170455994, 's-th zero of probabilistic Hₙ(x) with error check: value';
  ok gsl_sf_hermite_func_zero(24, 1) == 0.22441454747251557, 's-th zero of ψₙ(x)';
  ok gsl_sf_hermite_func_zero_e(24, 1, $res) == 0, 's-th zero of ψₙ(x) with error check';
  ok $res.val == 0.22441454747251557, 's-th zero of ψₙ(x) with error check: value';
}, 'raw - Hermite polynomials and functions';

subtest {
  my gsl_sf_result $res .= new;
  my gsl_sf_result_e10 $rese10 .= new;
  is-approx gsl_sf_hyperg_0F1(1e0, .5e0), 1.5660829297563505373, :rel-tol(10⁻¹⁵), '₀F₁(c,x)';
  ok gsl_sf_hyperg_0F1_e(1e0, .5e0, $res) == 0, '₀F₁(c,x) with error check';
  is-approx $res.val, 1.5660829297563505373, :rel-tol(10⁻¹⁵), '₀F₁(c,x) with error check: value';
  is-approx gsl_sf_hyperg_1F1_int(1, 1, .5e0), 1.6487212707001281468, :rel-tol(10⁻¹⁵), '₁F₁(m,n,x)';
  ok gsl_sf_hyperg_1F1_int_e(1, 1, .5e0, $res) == 0, '₁F₁(m,n,x) with error check';
  is-approx $res.val, 1.6487212707001281468, :rel-tol(10⁻¹⁵), '₁F₁(m,n,x) with error check: value';
  is-approx gsl_sf_hyperg_1F1(1e0, 1.5e0, 1e0), 2.0300784692787049755, :rel-tol(10⁻¹⁵), '₁F₁(a,b,x)';
  ok gsl_sf_hyperg_1F1_e(1e0, 1.5e0, 1e0, $res) == 0, '₁F₁(a,b,x) with error check';
  is-approx $res.val, 2.0300784692787049755, :rel-tol(10⁻¹⁵), '₁F₁(a,b,x) with error check: value';
  is-approx gsl_sf_hyperg_U_int(1, 1, 2e0), 0.3613286168882225847, :rel-tol(10⁻¹⁵), 'U(m,n,x)';
  ok gsl_sf_hyperg_U_int_e(1, 1, 2e0, $res) == 0, 'U(m,n,x) with error check';
  is-approx $res.val, 0.3613286168882225847, :rel-tol(10⁻¹⁵), 'U(m,n,x) with error check: value';
  ok gsl_sf_hyperg_U_int_e10_e(1, 1, 2e0, $rese10) == 0, 'U(m,n,x) with extended range error check';
  is-approx $rese10.val, 0.3613286168882225847, :rel-tol(10⁻¹⁵), 'U(m,n,x) with extended range error check: value';
  is-approx gsl_sf_hyperg_U(1e0, 1.2e0, 2e0), 0.3835044780075602550, :rel-tol(10⁻¹⁵), 'U(a,b,x)';
  ok gsl_sf_hyperg_U_e(1e0, 1.2e0, 2e0, $res) == 0, 'U(a,b,x) with error check';
  is-approx $res.val, 0.3835044780075602550, :rel-tol(10⁻¹⁵), 'U(a,b,x) with error check: value';
  ok gsl_sf_hyperg_U_e10_e(1e0, 1.2e0, 2e0, $rese10) == 0, 'U(a,b,x) with extended range error check';
  is-approx $rese10.val, 0.3835044780075602550, :rel-tol(10⁻¹⁵), 'U(a,b,x) with extended range error check: value';
  is-approx gsl_sf_hyperg_2F1(1e0, 1e0, 1e0, .5e0), 2, :rel-tol(10⁻¹⁵), '₂F₁(a,b,c,x)';
  ok gsl_sf_hyperg_2F1_e(1e0, 1e0, 1e0, .5e0, $res) == 0, '₂F₁(a,b,c,x) with error check';
  is-approx $res.val, 2, :rel-tol(10⁻¹⁵), '₂F₁(a,b,c,x) with error check: value';
  is-approx gsl_sf_hyperg_2F1_conj(1e0, 1e0, 1e0, .5e0), 3.352857095662929028, :rel-tol(10⁻¹⁵), '₂F₁(aᵣ+iaᵢ,aR-iaI,c,x)';
  ok gsl_sf_hyperg_2F1_conj_e(1e0, 1e0, 1e0, .5e0, $res) == 0, '₂F₁(aᵣ+iaᵢ,aR-iaI,c,x) with error check';
  is-approx $res.val, 3.352857095662929028, :rel-tol(10⁻¹⁵), '₂F₁(aᵣ+iaᵢ,aR-iaI,c,x) with error check: value';
  is-approx gsl_sf_hyperg_2F1_renorm(1e0, 1e0, 1e0, .5e0), 2, :rel-tol(10⁻¹⁵), '₂F₁(a,b,c,x)/Γ(c)';
  ok gsl_sf_hyperg_2F1_renorm_e(1e0, 1e0, 1e0, .5e0, $res) == 0, '₂F₁(a,b,c,x)/Γ(c) with error check';
  is-approx $res.val, 2, :rel-tol(10⁻¹⁵), '₂F₁(a,b,c,x)/Γ(c) with error check: value';
  is-approx gsl_sf_hyperg_2F1_conj_renorm(9e0, 9e0, -1.5e0, -.99e0), 0.10834020229476124874, :rel-tol(10⁻¹⁵), '₂F₁(aᵣ+iaᵢ,aR-iaI,c,x)/Γ(c)';
  ok gsl_sf_hyperg_2F1_conj_renorm_e(9e0, 9e0, -1.5e0, -.99e0, $res) == 0, '₂F₁(aᵣ+iaᵢ,aR-iaI,c,x)/Γ(c) with error check';
  is-approx $res.val, 0.10834020229476124874, :rel-tol(10⁻¹⁵), '₂F₁(aᵣ+iaᵢ,aR-iaI,c,x)/Γ(c) with error check: value';
  is-approx gsl_sf_hyperg_2F0(.1e0, .5e0, -.02e0), .99901595171179281891589794, :rel-tol(10⁻¹⁵), '₂F₀(a,b,x)';
  ok gsl_sf_hyperg_2F0_e(.1e0, .5e0, -.02e0, $res) == 0, '₂F₀(a,b,x) with error check';
  is-approx $res.val, .99901595171179281891589794, :rel-tol(10⁻¹⁵), '₂F₀(a,b,x) with error check: value';
}, 'raw - Hypergeometric functions';

subtest {
  my gsl_sf_result $res .= new;
  is-approx gsl_sf_laguerre_1(1e0, 1e0), 1, :rel-tol(10⁻¹⁵), 'Lʲ₁(x)';
  ok gsl_sf_laguerre_1_e(1e0, 1e0, $res) == 0, 'Lʲ₁(x) with error check';
  is-approx $res.val, 1, :rel-tol(10⁻¹⁵), 'Lʲ₁(x) with error check: value';
  is-approx gsl_sf_laguerre_2(1e0, 1e0), .5, :rel-tol(10⁻¹⁵), 'Lʲ₂(x)';
  ok gsl_sf_laguerre_2_e(1e0, 1e0, $res) == 0, 'Lʲ₂(x) with error check';
  is-approx $res.val, .5, :rel-tol(10⁻¹⁵), 'Lʲ₂(x) with error check: value';
  is-approx gsl_sf_laguerre_3(2e0, 1e0), 2.3333333333333333333, :rel-tol(10⁻¹⁵), 'Lʲ₃(x)';
  ok gsl_sf_laguerre_3_e(2e0, 1e0, $res) == 0, 'Lʲ₃(x) with error check';
  is-approx $res.val, 2.3333333333333333333, :rel-tol(10⁻¹⁵), 'Lʲ₃(x) with error check: value';
  is-approx gsl_sf_laguerre_n(1, .5e0, 1e0), .5, :rel-tol(10⁻¹⁵), 'Lʲₙ(x)';
  ok gsl_sf_laguerre_n_e(1, .5e0, 1e0, $res) == 0, 'Lʲₙ(x) with error check';
  is-approx $res.val, .5, :rel-tol(10⁻¹⁵), 'Lʲₙ(x) with error check: value';
}, 'raw - Laguerre functions';

subtest {
  my gsl_sf_result $res .= new;
  is-approx gsl_sf_lambert_W0(0e0), 0, :rel-tol(10⁻¹⁵), 'W₀(x)';
  ok gsl_sf_lambert_W0_e(0e0, $res) == 0, 'W₀(x) with error check';
  is-approx $res.val, 0, :rel-tol(10⁻¹⁵), 'W₀(x) with error check: value';
  is-approx gsl_sf_lambert_Wm1(0e0), 0, :rel-tol(10⁻¹⁵), 'W₋₁(x)';
  ok gsl_sf_lambert_Wm1_e(0e0, $res) == 0, 'W₋₁(x) with error check';
  is-approx $res.val, 0, :rel-tol(10⁻¹⁵), 'W₋₁(x) with error check: value';
}, 'raw - Lambert functions';

subtest {
  my gsl_sf_result $res .= new;
  is-approx gsl_sf_legendre_P1(0.5e0), 0.5, :rel-tol(10⁻¹⁵), 'P₁(x)';
  ok gsl_sf_legendre_P1_e(0.5e0, $res) == 0, 'P₁(x) with error check';
  is-approx $res.val, 0.5, :rel-tol(10⁻¹⁵), 'P₁(x) with error check: value';
  is-approx gsl_sf_legendre_P2(0.5e0), -0.125, :rel-tol(10⁻¹⁵), 'P₂(x)';
  ok gsl_sf_legendre_P2_e(0.5e0, $res) == 0, 'P₂(x) with error check';
  is-approx $res.val, -0.125, :rel-tol(10⁻¹⁵), 'P₂(x) with error check: value';
  is-approx gsl_sf_legendre_P3(0.5e0), -0.4375, :rel-tol(10⁻¹⁵), 'P₃(x)';
  ok gsl_sf_legendre_P3_e(0.5e0, $res) == 0, 'P₃(x) with error check';
  is-approx $res.val, -0.4375, :rel-tol(10⁻¹⁵), 'P₃(x) with error check: value';
  is-approx gsl_sf_legendre_Pl(1, 0.5e0), 0.5, :rel-tol(10⁻¹⁵), 'Pₗ(x)';
  ok gsl_sf_legendre_Pl_e(1, 0.5e0, $res) == 0, 'Pₗ(x) with error check';
  is-approx $res.val, 0.5, :rel-tol(10⁻¹⁵), 'Pₗ(x) with error check: value';
  my CArray[num64] $res_array .= new: 0e0 xx 11;
  ok gsl_sf_legendre_Pl_array(10, 0.5e0, $res_array) == 0, 'Pₗ(x) array';
  is-approx $res_array[0], 1, :rel-tol(10⁻¹⁵), 'Pₗ(x) array [0]: value';
  my CArray[num64] $res_der_array .= new: 0e0 xx 11;
  ok gsl_sf_legendre_Pl_deriv_array(10, 0.5e0, $res_array, $res_der_array) == 0, 'Pₗ(x) and dPₗ(x)/dx array';
  is-approx $res_array[0], 1, :rel-tol(10⁻¹⁵), 'Pₗ(x) and dPₗ(x)/dx array Pₗ(x)[0]: value';
  is-approx $res_der_array[0], 0, :rel-tol(10⁻¹⁵), 'Pₗ(x) and dPₗ(x)/dx array dPₗ(x)/dx[0]: value';
  is-approx gsl_sf_legendre_Q0(0e0), 0, :rel-tol(10⁻¹⁵), 'Q₀(x)';
  ok gsl_sf_legendre_Q0_e(0e0, $res) == 0, 'Q₀(x) with error check';
  is-approx $res.val, 0, :rel-tol(10⁻¹⁵), 'Q₀(x) with error check: value';
  is-approx gsl_sf_legendre_Q1(0e0), -1, :rel-tol(10⁻¹⁵), 'Q₁(x)';
  ok gsl_sf_legendre_Q1_e(0e0, $res) == 0, 'Q₁(x) with error check';
  is-approx $res.val, -1, :rel-tol(10⁻¹⁵), 'Q₁(x) with error check: value';
  is-approx gsl_sf_legendre_Ql(10, .5e0), 0.29165813966586752393, :rel-tol(10⁻¹⁵), 'Qₗ(x)';
  ok gsl_sf_legendre_Ql_e(10, .5e0, $res) == 0, 'Qₗ(x) with error check';
  is-approx $res.val, 0.29165813966586752393, :rel-tol(10⁻¹⁵), 'Qₗ(x) with error check: value';
  ok gsl_sf_legendre_array_n(10) == 88, 'lenght of an array';
  ok gsl_sf_legendre_array_index(3, 3) == 9, 'position in an array';
  ok gsl_sf_legendre_nlm(10) == 66, 'position in an nlm array';
  my CArray[num64] $legarray .= new: 0e0 xx gsl_sf_legendre_array_n(10);
  my CArray[num64] $legderivarray .= new: 0e0 xx gsl_sf_legendre_array_n(10);
  my CArray[num64] $legderiv2array .= new: 0e0 xx gsl_sf_legendre_array_n(10);
  ok gsl_sf_legendre_array(GSL_SF_LEGENDRE_SCHMIDT, 10, .5e0, $legarray) == 0, 'Pₗⁿ(x) array';
  is-approx $legarray[0], 1, :rel-tol(10⁻¹⁵), 'Pₗⁿ(x) array: value';
  ok gsl_sf_legendre_array_e(GSL_SF_LEGENDRE_SCHMIDT, 10, .5e0, 1e0, $legarray) == 0, 'Pₗⁿ(x) array with error check';
  is-approx $legarray[gsl_sf_legendre_array_index(3, 3)], 0.513489897661093, :rel-tol(10⁻¹⁵), 'Pₗⁿ(x) array with error check: value';
  ok gsl_sf_legendre_deriv_array(GSL_SF_LEGENDRE_SCHMIDT, 10, .15e0, $legarray, $legderivarray) == 0, 'dPₗⁿ(x)/dx array';
  is-approx $legderivarray[gsl_sf_legendre_array_index(1, 0)], 1, :rel-tol(10⁻¹⁵), 'dPₗⁿ(x)/dx array: value';
  ok gsl_sf_legendre_deriv_array_e(GSL_SF_LEGENDRE_SCHMIDT, 10, .15e0, 1e0, $legarray, $legderivarray) == 0, 'dPₗⁿ(x)/dx array with error check';
  is-approx $legderivarray[gsl_sf_legendre_array_index(1, 0)], 1, :rel-tol(10⁻¹⁵), 'dPₗⁿ(x)/dx array with error check: value';
  ok gsl_sf_legendre_deriv_alt_array(GSL_SF_LEGENDRE_SCHMIDT, 10, .15e0, $legarray, $legderivarray) == 0, 'alt dPₗⁿ(x)/dx array';
  is-approx $legderivarray[gsl_sf_legendre_array_index(1, 0)], -0.9886859966642594, :rel-tol(10⁻¹⁵), 'alt dPₗⁿ(x)/dx array: value';
  ok gsl_sf_legendre_deriv_alt_array_e(GSL_SF_LEGENDRE_SCHMIDT, 10, .15e0, 1e0, $legarray, $legderivarray) == 0, 'alt dPₗⁿ(x)/dx array with error check';
  is-approx $legderivarray[gsl_sf_legendre_array_index(1, 0)], -0.9886859966642594, :rel-tol(10⁻¹⁵), 'alt dPₗⁿ(x)/dx array with error check: value';
  ok gsl_sf_legendre_deriv2_array(GSL_SF_LEGENDRE_SCHMIDT, 10, .15e0, $legarray, $legderivarray, $legderiv2array) == 0, 'dPₗⁿ(x)/dx and d²Pₗⁿ(x)/dx² array';
  is-approx $legderiv2array[gsl_sf_legendre_array_index(1, 0)], 0, 10⁻¹⁵, 'dPₗⁿ(x)/dx and d²Pₗⁿ(x)/dx² array: value';
  ok gsl_sf_legendre_deriv2_array_e(GSL_SF_LEGENDRE_SCHMIDT, 10, .15e0, 1e0, $legarray, $legderivarray, $legderiv2array) == 0, 'dPₗⁿ(x)/dx and d²Pₗⁿ(x)/dx² array with error check';
  is-approx $legderiv2array[gsl_sf_legendre_array_index(1, 0)], 0, 10⁻¹⁵, 'dPₗⁿ(x)/dx and d²Pₗⁿ(x)/dx² array with error check: value';
  ok gsl_sf_legendre_deriv2_alt_array(GSL_SF_LEGENDRE_SCHMIDT, 10, .15e0, $legarray, $legderivarray, $legderiv2array) == 0, 'alt dPₗⁿ(x)/dx and d²Pₗⁿ(x)/dx² array';
  is-approx $legderiv2array[gsl_sf_legendre_array_index(1, 0)], -.15, 10⁻¹⁵, 'alt dPₗⁿ(x)/dx and d²Pₗⁿ(x)/dx² array: value';
  ok gsl_sf_legendre_deriv2_alt_array_e(GSL_SF_LEGENDRE_SCHMIDT, 10, .15e0, 1e0, $legarray, $legderivarray, $legderiv2array) == 0, 'alt dPₗⁿ(x)/dx and d²Pₗⁿ(x)/dx² array with error check';
  is-approx $legderiv2array[gsl_sf_legendre_array_index(1, 0)], -.15, 10⁻¹⁵, 'alt dPₗⁿ(x)/dx and d²Pₗⁿ(x)/dx² array with error check: value';
  is-approx gsl_sf_legendre_Plm(10, 0, -.5e0), -0.18822860717773437500, :rel-tol(10⁻¹⁵), 'Pₗⁿ(x)';
  ok gsl_sf_legendre_Plm_e(10, 0, -.5e0, $res) == 0, 'Pₗⁿ(x) with error check';
  is-approx $res.val, -0.18822860717773437500, :rel-tol(10⁻¹⁵), 'Pₗⁿ(x) with error check: value';
  is-approx gsl_sf_legendre_sphPlm(10, 0, -.5e0), -0.24332702369300135, :rel-tol(10⁻¹⁵), 'spherical harmonics';
  ok gsl_sf_legendre_sphPlm_e(10, 0, -.5e0, $res) == 0, 'spherical harmonics with error check';
  is-approx $res.val, -0.24332702369300135, :rel-tol(10⁻¹⁵), 'spherical harmonics with error check: value';
  is-approx gsl_sf_conicalP_half(0e0, .5e0), 0.8573827581049917129, :rel-tol(10⁻¹⁵), 'irregular Spherical Conical Function';
  ok gsl_sf_conicalP_half_e(0e0, .5e0, $res) == 0, 'irregular Spherical Conical Function with error check';
  is-approx $res.val, 0.8573827581049917129, :rel-tol(10⁻¹⁵), 'irregular Spherical Conical Function with error check: value';
  is-approx gsl_sf_conicalP_mhalf(0e0, .5e0), 0.8978491247257322404, :rel-tol(10⁻¹⁵), 'regular Spherical Conical Function';
  ok gsl_sf_conicalP_mhalf_e(0e0, .5e0, $res) == 0, 'regular Spherical Conical Function with error check';
  is-approx $res.val, 0.8978491247257322404, :rel-tol(10⁻¹⁵), 'regular Spherical Conical Function with error check: value';
  is-approx gsl_sf_conicalP_0(0e0, .5e0), 1.0731820071493643751, :rel-tol(10⁻¹⁵), 'P⁰₋₁ ₂₊ᵢₗ(x) Function';
  ok gsl_sf_conicalP_0_e(0e0, .5e0, $res) == 0, 'P⁰₋₁ ₂₊ᵢₗ(x) Function with error check';
  is-approx $res.val, 1.0731820071493643751, :rel-tol(10⁻¹⁵), 'P⁰₋₁ ₂₊ᵢₗ(x) Function with error check: value';
  is-approx gsl_sf_conicalP_1(0e0, .5e0), 0.14933621085538265636, :rel-tol(10⁻¹⁵), 'P¹₋₁ ₂₊ᵢₗ(x) Function';
  ok gsl_sf_conicalP_1_e(0e0, .5e0, $res) == 0, 'P¹₋₁ ₂₊ᵢₗ(x) Function with error check';
  is-approx $res.val, 0.14933621085538265636, :rel-tol(10⁻¹⁵), 'P¹₋₁ ₂₊ᵢₗ(x) Function with error check: value';
  is-approx gsl_sf_conicalP_sph_reg(2, 1e0, -.5e0), 1.6406279287008789526, :rel-tol(10⁻¹⁵), 'Regular Spherical Conical Function';
  ok gsl_sf_conicalP_sph_reg_e(2, 1e0, -.5e0, $res) == 0, 'Regular Spherical Conical Function with error check';
  is-approx $res.val, 1.6406279287008789526, :rel-tol(10⁻¹⁵), 'Regular Spherical Conical Function with error check: value';
  is-approx gsl_sf_conicalP_cyl_reg(2, 1e0, -.5e0), 2.2048510472375258708, :rel-tol(10⁻¹⁵), 'Regular Cylindrical Conical Function';
  ok gsl_sf_conicalP_cyl_reg_e(2, 1e0, -.5e0, $res) == 0, 'Regular Cylindrical Conical Function with error check';
  is-approx $res.val, 2.2048510472375258708, :rel-tol(10⁻¹⁵), 'Regular Cylindrical Conical Function with error check: value';
  is-approx gsl_sf_legendre_H3d_0(1e0, 1e0), 0.7160229153604338713, :rel-tol(10⁻¹⁵), '0 radial eigenfunction of the Laplacian on 3D hyperbolic space';
  ok gsl_sf_legendre_H3d_0_e(1e0, 1e0, $res) == 0, '0 radial eigenfunction of the Laplacian on 3D hyperbolic space with error check';
  is-approx $res.val, 0.7160229153604338713, :rel-tol(10⁻¹⁵), '0 radial eigenfunction of the Laplacian on 3D hyperbolic space with error check: value';
  is-approx gsl_sf_legendre_H3d_1(1e0, 1e0), 0.3397013994799344639, :rel-tol(10⁻¹⁵), '1 radial eigenfunction of the Laplacian on 3D hyperbolic space';
  ok gsl_sf_legendre_H3d_1_e(1e0, 1e0, $res) == 0, '1 radial eigenfunction of the Laplacian on 3D hyperbolic space with error check';
  is-approx $res.val, 0.3397013994799344639, :rel-tol(10⁻¹⁵), '1 radial eigenfunction of the Laplacian on 3D hyperbolic space with error check: value';
  is-approx gsl_sf_legendre_H3d(5, 1e0, 1e0), 0.011498635037