! RUN: %python %S/test_folding.py %s %flang_fc1
! Tests folding of BGE, BGT, BLE, BLT
module testbge
logical, parameter :: test_u = all((/&
bge(0, 0), &
bge(1, 1), &
bge(2, 1), &
bge(2147483647, 2147483647), &
bge(2147483647, 2147483646), &
bge(-1, -1), &
bge(-1, -2), &
bge(-2147483646, -2147483646), &
bge(-2147483646, -2147483647), &
bge(-1, 0), &
bge(1, 0), &
bge(-2147483647, 2147483647), &
bge(Z'80000000', 2147483647)/))
logical, parameter :: test_m = all((/&
bge(1_4, 1_8), &
bge(1_8, 1_4), &
bge(-1_8, -1_4), &
bge(-1_8, Z'FFFFFFFF'), &
bge(Z'FFFFFFFFFFFFFFFF', -1_4)/))
logical,parameter :: test_nm = all((/&
.not. bge(-1_4, -1_8), &
.not. bge(Z'FFFFFFFF', -1_8), &
.not. bge(-1_4, Z'FFFFFFFFFFFFFFFF')/))
end module testbge
module testbgt
logical, parameter :: test_u = all((/&
bgt(2, 1), &
bgt(2147483647, 2147483646), &
bgt(-1, -2), &
bgt(-2147483646, -2147483647), &
bgt(-1, 0), &
bgt(1, 0), &
bgt(-2147483647, 2147483647), &
bgt(Z'80000000', 2147483647) /))
logical, parameter :: test_nu = all((/&
.not. bgt(0, 0), &
.not. bgt(1, 1), &
.not. bgt(2147483647, 2147483647), &
.not. bgt(-1, -1), &
.not. bgt(-2147483646, -2147483646) /))
logical, parameter :: test_m = all((/&
bgt(-1_8, -1_4), &
bgt(Z'FFFFFFFFFFFFFFFF', -1_4), &
bgt(-1_8, Z'FFFFFFFF') /))
logical, parameter :: test_nm = all((/&
.not. bgt(1_4, 1_8), &
.not. bgt(1_8, 1_4), &
.not. bgt(-1_4, -1_8), &
.not. bgt(Z'FFFFFFFF', -1_8), &
.not. bgt(-1_4, Z'FFFFFFFFFFFFFFFF') /))
end module testbgt
module testble
logical, parameter :: test_u = all((/&
ble(0, 0), &
ble(1, 1), &
ble(1, 2), &
ble(2147483647, 2147483647), &
ble(2147483646, 2147483647), &
ble(-1, -1), &
ble(-2, -1), &
ble(-2147483646, -2147483646), &
ble(-2147483647, -2147483646), &
ble(0, -1), &
ble(0, 1), &
ble(2147483647, -2147483647), &
ble(2147483647, Z'80000000') /))
logical, parameter :: test_m = all((/&
ble(1_4, 1_8), &
ble(1_8, 1_4), &
ble(-1_4, -1_8), &
ble(Z'FFFFFFFF', -1_8), &
ble(-1_4, Z'FFFFFFFFFFFFFFFF') /))
logical, parameter :: test_nm = all((/ &
.not. ble(-1_8, -1_4), &
.not. ble(Z'FFFFFFFFFFFFFFFF', -1_4), &
.not. ble(-1_8, Z'FFFFFFFF') /))
end module testble
module testblt
logical, parameter :: test_u = all((/&
blt(1, 2), &
blt(2147483646, 2147483647), &
blt(-2, -1), &
blt(-2147483647, -2147483646), &
blt(0, -1), &
blt(0, 1) /))
logical, parameter :: test_nu = all((/&
.not. blt(0, 0), &
.not. blt(1, 1), &
.not. blt(2147483647, 2147483647), &
.not. blt(-1, -1), &
.not. blt(-2147483646, -2147483646), &
.not. blt(-2147483647, 2147483647), &
.not. blt(Z'80000000', 2147483647)/))
logical, parameter :: test_m = all((/&
blt(-1_4, -1_8), &
blt(Z'FFFFFFFF', -1_8), &
blt(-1_4, Z'FFFFFFFFFFFFFFFF') /))
logical, parameter :: test_nm = all ((/&
.not. blt(1_4, 1_8), &
.not. blt(1_8, 1_4), &
.not. blt(-1_8, -1_4), &
.not. blt(Z'FFFFFFFFFFFFFFFF', -1_4), &
.not. blt(-1_8, Z'FFFFFFFF') /))
end module testblt