blob: de0b2850337580b7d1af43d9267771083dd5b932 [file] [log] [blame]
! { dg-do run }
! { dg-additional-options "-fno-range-check" }
!
! Check handling of special values by FRACTION, EXPONENT,
! SPACING, RRSPACING and SET_EXPONENT.
program test
implicit none
real, parameter :: inf = 2 * huge(0.)
real, parameter :: nan = 0. / 0.
real, volatile :: x
x = 0.
call check_positive_zero(fraction(x))
if (exponent(x) /= 0) STOP 1
if (spacing(x) /= spacing(tiny(x))) STOP 2
call check_positive_zero(rrspacing(x))
call check_positive_zero(set_exponent(x,42))
x = -0.
call check_negative_zero(fraction(x))
if (exponent(x) /= 0) STOP 3
if (spacing(x) /= spacing(tiny(x))) STOP 4
call check_positive_zero(rrspacing(x))
call check_negative_zero(set_exponent(x,42))
x = inf
if (.not. isnan(fraction(x))) STOP 5
if (exponent(x) /= huge(0)) STOP 6
if (.not. isnan(spacing(x))) STOP 7
if (.not. isnan(rrspacing(x))) STOP 8
if (.not. isnan(set_exponent(x, 42))) STOP 9
x = -inf
if (.not. isnan(fraction(x))) STOP 10
if (exponent(x) /= huge(0)) STOP 11
if (.not. isnan(spacing(x))) STOP 12
if (.not. isnan(rrspacing(x))) STOP 13
if (.not. isnan(set_exponent(x, 42))) STOP 14
x = nan
if (.not. isnan(fraction(x))) STOP 15
if (exponent(x) /= huge(0)) STOP 16
if (.not. isnan(spacing(x))) STOP 17
if (.not. isnan(rrspacing(x))) STOP 18
if (.not. isnan(set_exponent(x, 42))) STOP 19
contains
subroutine check_positive_zero(x)
use ieee_arithmetic
implicit none
real, value :: x
if (ieee_class (x) /= ieee_positive_zero) STOP 20
end
subroutine check_negative_zero(x)
use ieee_arithmetic
implicit none
real, value :: x
if (ieee_class (x) /= ieee_negative_zero) STOP 21
end
end