summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/bessel_5.f90
blob: aab45cafe17fd373776b9bcf2a175c00d0b9ad2a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
! { dg-do run }
! { dg-options "-Wall -fno-range-check" }
!
! PR fortran/36158 - Transformational BESSEL_JN/YN
! PR fortran/33197 - F2008 math functions
!
! This is a dg-do run test as the middle end cannot simplify the
! the scalarization of the elemental function (cf. PR 45305).
!
! -Wall has been specified to disabled -pedantic, which warns about the
! negative order (GNU extension) to the order of the Bessel functions of
! first and second kind.
!

implicit none
integer :: i


! Difference to mpfr_jn <= 1 epsilon

if (any (abs (BESSEL_JN(2, 5, 2.457) - [(BESSEL_JN(i, 2.457), i = 2, 5)]) &
          > epsilon(0.0))) then
  print *, 'FAIL 1'
  call abort()
end if


! Difference to mpfr_yn <= 4 epsilon

if (any (abs (BESSEL_YN(2, 5, 2.457) - [(BESSEL_YN(i, 2.457), i = 2, 5)]) &
         > epsilon(0.0)*4)) then
  call abort()
end if


! Difference to mpfr_jn <= 1 epsilon

if (any (abs (BESSEL_JN(0, 10, 4.457) &
              - [ (BESSEL_JN(i, 4.457), i = 0, 10) ]) &
         > epsilon(0.0))) then
  call abort()
end if


! Difference to mpfr_yn <= 192 epsilon

if (any (abs (BESSEL_YN(0, 10, 4.457) &
              - [ (BESSEL_YN(i, 4.457), i = 0, 10) ]) &
         > epsilon(0.0)*192)) then
  call abort()
end if


! Difference to mpfr_jn: None.  (Special case: X = 0.0)

if (any (BESSEL_JN(0, 10, 0.0) /= [ (BESSEL_JN(i, 0.0), i = 0, 10) ])) &
then
  call abort()
end if


! Difference to mpfr_yn: None.  (Special case: X = 0.0)

if (any (BESSEL_YN(0, 10, 0.0) /= [ (BESSEL_YN(i, 0.0), i = 0, 10) ])) &
then
  call abort()
end if


! Difference to mpfr_jn <= 1 epsilon

if (any (abs (BESSEL_JN(0, 10, 1.0) &
              - [ (BESSEL_JN(i, 1.0), i = 0, 10) ]) &
         > epsilon(0.0)*1)) then
 call abort()
end if

! Difference to mpfr_yn <= 32 epsilon

if (any (abs (BESSEL_YN(0, 10, 1.0) &
              - [ (BESSEL_YN(i, 1.0), i = 0, 10) ]) &
         > epsilon(0.0)*32)) then
  call abort()
end if

end