blob: 1237b5b15275a93e477012925c93af4aa0e18943 [file] [log] [blame]
! { dg-do run }
! { dg-additional-options "-funsigned" }
!
! PR fortran/115788 - OUT_OF_RANGE
program p
use, intrinsic :: ieee_arithmetic
implicit none
real :: inf, nan
real :: r = 0.
logical :: t = .true., f = .false.
double precision :: dinf, dnan
inf = ieee_value (inf, ieee_positive_inf)
if (.not. OUT_OF_RANGE (inf, 0)) stop 1
if (.not. OUT_OF_RANGE (inf, 0, f)) stop 2
if (.not. OUT_OF_RANGE (inf, 0, t)) stop 3
if (.not. OUT_OF_RANGE (inf, 0, .false.)) stop 4
if (.not. OUT_OF_RANGE (inf, 0, .true.)) stop 5
if (.not. OUT_OF_RANGE (inf, 0U)) stop 6
if (.not. OUT_OF_RANGE (inf, 0U, f)) stop 7
if (.not. OUT_OF_RANGE (inf, 0U, t)) stop 8
if (.not. OUT_OF_RANGE (inf, 0U, .false.)) stop 9
if (.not. OUT_OF_RANGE (inf, 0U, .true.)) stop 10
if (OUT_OF_RANGE (inf, r)) stop 11
dinf = ieee_value (dinf, ieee_positive_inf)
if (OUT_OF_RANGE (inf, dinf)) stop 12
if (OUT_OF_RANGE (dinf, inf)) stop 13
if (OUT_OF_RANGE (dinf, dinf)) stop 14
call check_nan ()
contains
subroutine check_nan ()
if (.not. ieee_support_nan (nan)) return
nan = ieee_value (nan, ieee_quiet_nan)
if (.not. OUT_OF_RANGE (nan, 0)) stop 15
if (.not. OUT_OF_RANGE (nan, 0, f)) stop 16
if (.not. OUT_OF_RANGE (nan, 0, t)) stop 17
if (.not. OUT_OF_RANGE (nan, 0, .false.)) stop 18
if (.not. OUT_OF_RANGE (nan, 0, .true.)) stop 19
if (.not. OUT_OF_RANGE (nan, 0U)) stop 20
if (.not. OUT_OF_RANGE (nan, 0U, f)) stop 21
if (.not. OUT_OF_RANGE (nan, 0U, t)) stop 22
if (.not. OUT_OF_RANGE (nan, 0U, .false.)) stop 23
if (.not. OUT_OF_RANGE (nan, 0U, .true.)) stop 24
if (OUT_OF_RANGE (nan, r)) stop 25
if (.not. ieee_support_nan(dnan)) return
dnan = ieee_value(dnan, ieee_quiet_nan)
if (OUT_OF_RANGE (nan, dnan)) stop 26
if (OUT_OF_RANGE (dnan, nan)) stop 27
end subroutine check_nan
end