| ! 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 |