1! Tests for MIN and MAX intrinsics with character arguments 2! 3! { dg-do run } 4program test 5 character(len=3), parameter :: sp = "gee" 6 character(len=6), parameter :: tp = "crunch", wp = "flunch" 7 character(len=2), parameter :: up = "az", vp = "da" 8 9 character(len=3) :: s 10 character(len=6) :: t, w 11 character(len=2) :: u, v 12 s = "gee" 13 t = "crunch" 14 u = "az" 15 v = "da" 16 w = "flunch" 17 18 if (.not. equal(min("foo", "bar"), "bar")) call abort 19 if (.not. equal(max("foo", "bar"), "foo")) call abort 20 if (.not. equal(min("bar", "foo"), "bar")) call abort 21 if (.not. equal(max("bar", "foo"), "foo")) call abort 22 23 if (.not. equal(min("bar", "foo", sp), "bar")) call abort 24 if (.not. equal(max("bar", "foo", sp), "gee")) call abort 25 if (.not. equal(min("bar", sp, "foo"), "bar")) call abort 26 if (.not. equal(max("bar", sp, "foo"), "gee")) call abort 27 if (.not. equal(min(sp, "bar", "foo"), "bar")) call abort 28 if (.not. equal(max(sp, "bar", "foo"), "gee")) call abort 29 30 if (.not. equal(min("foo", "bar", s), "bar")) call abort 31 if (.not. equal(max("foo", "bar", s), "gee")) call abort 32 if (.not. equal(min("foo", s, "bar"), "bar")) call abort 33 if (.not. equal(max("foo", s, "bar"), "gee")) call abort 34 if (.not. equal(min(s, "foo", "bar"), "bar")) call abort 35 if (.not. equal(max(s, "foo", "bar"), "gee")) call abort 36 37 if (.not. equal(min("", ""), "")) call abort 38 if (.not. equal(max("", ""), "")) call abort 39 if (.not. equal(min("", " "), " ")) call abort 40 if (.not. equal(max("", " "), " ")) call abort 41 42 if (.not. equal(min(u,v,w), "az ")) call abort 43 if (.not. equal(max(u,v,w), "flunch")) call abort 44 if (.not. equal(min(u,vp,w), "az ")) call abort 45 if (.not. equal(max(u,vp,w), "flunch")) call abort 46 if (.not. equal(min(u,v,wp), "az ")) call abort 47 if (.not. equal(max(u,v,wp), "flunch")) call abort 48 if (.not. equal(min(up,v,w), "az ")) call abort 49 if (.not. equal(max(up,v,w), "flunch")) call abort 50 51 call foo("gee ","az ",s,t,u,v) 52 call foo("gee ","az ",s,t,u,v) 53 call foo("gee ","az ",s,t,u) 54 call foo("gee ","crunch",s,t) 55 56contains 57 58 subroutine foo(res_max, res_min, a, b, c, d) 59 character(len=*) :: res_min, res_max 60 character(len=*), optional :: a, b, c, d 61 62 if (.not. equal(min(a,b,c,d), res_min)) call abort 63 if (.not. equal(max(a,b,c,d), res_max)) call abort 64 end subroutine foo 65 66 pure function equal(a,b) 67 character(len=*), intent(in) :: a, b 68 logical :: equal 69 70 equal = (len(a) == len(b)) .and. (a == b) 71 end function equal 72 73end program test 74