! RUN: %python %S/test_folding.py %s %flang_fc1
! Test implementations of IEEE inquiry functions
module m
  use ieee_arithmetic
  logical, parameter :: test_ieee_support_datatype = ieee_support_datatype() &
    .and. ieee_support_datatype(1.0_2) &
    .and. ieee_support_datatype(1.0_3) &
    .and. ieee_support_datatype(1.0_4) &
    .and. ieee_support_datatype(1.0_8) &
    .and. ieee_support_datatype(1.0_10) &
    .and. ieee_support_datatype(1.0_16)
  logical, parameter :: test_ieee_support_denormal = ieee_support_denormal() &
    .and. ieee_support_denormal(1.0_2) &
    .and. ieee_support_denormal(1.0_3) &
    .and. ieee_support_denormal(1.0_4) &
    .and. ieee_support_denormal(1.0_8) &
    .and. ieee_support_denormal(1.0_10) &
    .and. ieee_support_denormal(1.0_16)
  logical, parameter :: test_ieee_support_divide = ieee_support_divide() &
    .and. ieee_support_divide(1.0_2) &
    .and. ieee_support_divide(1.0_3) &
    .and. ieee_support_divide(1.0_4) &
    .and. ieee_support_divide(1.0_8) &
    .and. ieee_support_divide(1.0_10) &
    .and. ieee_support_divide(1.0_16)
  logical, parameter :: test_ieee_support_inf = ieee_support_inf() &
    .and. ieee_support_inf(1.0_2) &
    .and. ieee_support_inf(1.0_3) &
    .and. ieee_support_inf(1.0_4) &
    .and. ieee_support_inf(1.0_8) &
    .and. ieee_support_inf(1.0_10) &
    .and. ieee_support_inf(1.0_16)
  logical, parameter :: test_ieee_support_io = ieee_support_io() &
    .and. ieee_support_io(1.0_2) &
    .and. ieee_support_io(1.0_3) &
    .and. ieee_support_io(1.0_4) &
    .and. ieee_support_io(1.0_8) &
    .and. ieee_support_io(1.0_10) &
    .and. ieee_support_io(1.0_16)
  logical, parameter :: test_ieee_support_nan = ieee_support_nan() &
    .and. ieee_support_nan(1.0_2) &
    .and. ieee_support_nan(1.0_3) &
    .and. ieee_support_nan(1.0_4) &
    .and. ieee_support_nan(1.0_8) &
    .and. ieee_support_nan(1.0_10) &
    .and. ieee_support_nan(1.0_16)
  logical, parameter :: test_ieee_support_sqrt = ieee_support_sqrt() &
    .and. ieee_support_sqrt(1.0_2) &
    .and. ieee_support_sqrt(1.0_3) &
    .and. ieee_support_sqrt(1.0_4) &
    .and. ieee_support_sqrt(1.0_8) &
    .and. ieee_support_sqrt(1.0_10) &
    .and. ieee_support_sqrt(1.0_16)
#if __x86_64__
  logical, parameter :: test_ieee_support_standard = ieee_support_standard() &
    .and. ieee_support_standard(1.0_2) &
    .and. ieee_support_standard(1.0_3) &
    .and. ieee_support_standard(1.0_4) &
    .and. ieee_support_standard(1.0_8) &
    .and. ieee_support_standard(1.0_10) &
    .and. ieee_support_standard(1.0_16)
#endif
  logical, parameter :: test_ieee_support_subnormal = ieee_support_subnormal() &
    .and. ieee_support_subnormal(1.0_2) &
    .and. ieee_support_subnormal(1.0_3) &
    .and. ieee_support_subnormal(1.0_4) &
    .and. ieee_support_subnormal(1.0_8) &
    .and. ieee_support_subnormal(1.0_10) &
    .and. ieee_support_subnormal(1.0_16)
! varies by architecture
! logical, parameter :: test_ieee_support_underflow_control = .not. ieee_support_underflow_control() &
!   .and. .not. ieee_support_underflow_control(1.0_2) &
!   .and. ieee_support_underflow_control(1.0_3) &
!   .and. ieee_support_underflow_control(1.0_4) &
!   .and. ieee_support_underflow_control(1.0_8) &
!   .and. .not. ieee_support_underflow_control(1.0_10) &
!   .and. .not. ieee_support_underflow_control(1.0_16)
end module
