blob: 8765aa4819aa7a4812089c1dee8e2dfdbf99c734 [file] [log] [blame]
! Tests for MIN and MAX intrinsics with character arguments
!
! { dg-do run }
program test
character(len=3), parameter :: sp = "gee"
character(len=6), parameter :: tp = "crunch", wp = "flunch"
character(len=2), parameter :: up = "az", vp = "da"
character(len=3) :: s
character(len=6) :: t, w
character(len=2) :: u, v
s = "gee"
t = "crunch"
u = "az"
v = "da"
w = "flunch"
if (.not. equal(min("foo", "bar"), "bar")) STOP 1
if (.not. equal(max("foo", "bar"), "foo")) STOP 2
if (.not. equal(min("bar", "foo"), "bar")) STOP 3
if (.not. equal(max("bar", "foo"), "foo")) STOP 4
if (.not. equal(min("bar", "foo", sp), "bar")) STOP 5
if (.not. equal(max("bar", "foo", sp), "gee")) STOP 6
if (.not. equal(min("bar", sp, "foo"), "bar")) STOP 7
if (.not. equal(max("bar", sp, "foo"), "gee")) STOP 8
if (.not. equal(min(sp, "bar", "foo"), "bar")) STOP 9
if (.not. equal(max(sp, "bar", "foo"), "gee")) STOP 10
if (.not. equal(min("foo", "bar", s), "bar")) STOP 11
if (.not. equal(max("foo", "bar", s), "gee")) STOP 12
if (.not. equal(min("foo", s, "bar"), "bar")) STOP 13
if (.not. equal(max("foo", s, "bar"), "gee")) STOP 14
if (.not. equal(min(s, "foo", "bar"), "bar")) STOP 15
if (.not. equal(max(s, "foo", "bar"), "gee")) STOP 16
if (.not. equal(min("", ""), "")) STOP 17
if (.not. equal(max("", ""), "")) STOP 18
if (.not. equal(min("", " "), " ")) STOP 19
if (.not. equal(max("", " "), " ")) STOP 20
if (.not. equal(min(u,v,w), "az ")) STOP 21
if (.not. equal(max(u,v,w), "flunch")) STOP 22
if (.not. equal(min(u,vp,w), "az ")) STOP 23
if (.not. equal(max(u,vp,w), "flunch")) STOP 24
if (.not. equal(min(u,v,wp), "az ")) STOP 25
if (.not. equal(max(u,v,wp), "flunch")) STOP 26
if (.not. equal(min(up,v,w), "az ")) STOP 27
if (.not. equal(max(up,v,w), "flunch")) STOP 28
call foo("gee ","az ",s,t,u,v)
call foo("gee ","az ",s,t,u,v)
call foo("gee ","az ",s,t,u)
call foo("gee ","crunch",s,t)
contains
subroutine foo(res_max, res_min, a, b, c, d)
character(len=*) :: res_min, res_max
character(len=*), optional :: a, b, c, d
if (.not. equal(min(a,b,c,d), res_min)) STOP 29
if (.not. equal(max(a,b,c,d), res_max)) STOP 30
end subroutine foo
pure function equal(a,b)
character(len=*), intent(in) :: a, b
logical :: equal
equal = (len(a) == len(b)) .and. (a == b)
end function equal
end program test