1! { dg-do run } 2! { dg-options "-Wall -fno-range-check" } 3! 4! PR fortran/36158 - Transformational BESSEL_JN/YN 5! PR fortran/33197 - F2008 math functions 6! 7! This is a dg-do run test as the middle end cannot simplify the 8! the scalarization of the elemental function (cf. PR 45305). 9! 10! -Wall has been specified to disabled -pedantic, which warns about the 11! negative order (GNU extension) to the order of the Bessel functions of 12! first and second kind. 13! 14 15implicit none 16integer :: i 17 18 19! Difference to mpfr_jn <= 1 epsilon 20 21if (any (abs (BESSEL_JN(2, 5, 2.457) - [(BESSEL_JN(i, 2.457), i = 2, 5)]) & 22 > epsilon(0.0))) then 23 print *, 'FAIL 1' 24 STOP 1 25end if 26 27 28! Difference to mpfr_yn <= 4 epsilon 29 30if (any (abs (BESSEL_YN(2, 5, 2.457) - [(BESSEL_YN(i, 2.457), i = 2, 5)]) & 31 > epsilon(0.0)*4)) then 32 STOP 2 33end if 34 35 36! Difference to mpfr_jn <= 1 epsilon 37 38if (any (abs (BESSEL_JN(0, 10, 4.457) & 39 - [ (BESSEL_JN(i, 4.457), i = 0, 10) ]) & 40 > epsilon(0.0))) then 41 STOP 3 42end if 43 44 45! Difference to mpfr_yn <= 192 epsilon 46 47if (any (abs (BESSEL_YN(0, 10, 4.457) & 48 - [ (BESSEL_YN(i, 4.457), i = 0, 10) ]) & 49 > epsilon(0.0)*192)) then 50 STOP 4 51end if 52 53 54! Difference to mpfr_jn: None. (Special case: X = 0.0) 55 56if (any (BESSEL_JN(0, 10, 0.0) /= [ (BESSEL_JN(i, 0.0), i = 0, 10) ])) & 57then 58 STOP 5 59end if 60 61 62! Difference to mpfr_yn: None. (Special case: X = 0.0) 63 64if (any (BESSEL_YN(0, 10, 0.0) /= [ (BESSEL_YN(i, 0.0), i = 0, 10) ])) & 65then 66 STOP 6 67end if 68 69 70! Difference to mpfr_jn <= 1 epsilon 71 72if (any (abs (BESSEL_JN(0, 10, 1.0) & 73 - [ (BESSEL_JN(i, 1.0), i = 0, 10) ]) & 74 > epsilon(0.0)*1)) then 75 STOP 7 76end if 77 78! Difference to mpfr_yn <= 32 epsilon 79 80if (any (abs (BESSEL_YN(0, 10, 1.0) & 81 - [ (BESSEL_YN(i, 1.0), i = 0, 10) ]) & 82 > epsilon(0.0)*32)) then 83 STOP 8 84end if 85 86end 87