1 |
694 |
jeremybenn |
! Tests for MIN and MAX intrinsics with character arguments
|
2 |
|
|
!
|
3 |
|
|
! { dg-do run }
|
4 |
|
|
program 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 |
|
|
|
56 |
|
|
contains
|
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 |
|
|
|
73 |
|
|
end program test
|