1! Program to test the MINLOC and MAXLOC intrinsics
2program testmmloc
3   implicit none
4   integer, dimension (3, 3) :: a
5   integer, dimension (3) :: b
6   logical, dimension (3, 3) :: m, tr
7   integer i
8   character(len=10) line
9
10   a = reshape ((/1, 2, 3, 5, 4, 6, 9, 8, 7/), (/3, 3/));
11   tr = .true.
12
13   b = minloc (a, 1)
14   if (b(1) .ne. 1) STOP 1
15   if (b(2) .ne. 2) STOP 2
16   if (b(3) .ne. 3) STOP 3
17   b = -1
18   write (line, 9000) minloc(a,1)
19   read (line, 9000) b
20   if (b(1) .ne. 1) STOP 4
21   if (b(2) .ne. 2) STOP 5
22   if (b(3) .ne. 3) STOP 6
23
24   m = .true.
25   m(1, 1) = .false.
26   m(1, 2) = .false.
27   b = minloc (a, 1, m)
28   if (b(1) .ne. 2) STOP 7
29   if (b(2) .ne. 2) STOP 8
30   if (b(3) .ne. 3) STOP 9
31   b = minloc (a, 1, m .and. tr)
32   if (b(1) .ne. 2) STOP 10
33   if (b(2) .ne. 2) STOP 11
34   if (b(3) .ne. 3) STOP 12
35   b = -1
36   write (line, 9000) minloc(a, 1, m)
37   read (line, 9000) b
38   if (b(1) .ne. 2) STOP 13
39   if (b(2) .ne. 2) STOP 14
40   if (b(3) .ne. 3) STOP 15
41
42   b(1:2) = minloc(a)
43   if (b(1) .ne. 1) STOP 16
44   if (b(2) .ne. 1) STOP 17
45   b = -1
46   write (line, 9000) minloc(a)
47   read (line, 9000) b
48   if (b(1) .ne. 1) STOP 18
49   if (b(2) .ne. 1) STOP 19
50   if (b(3) .ne. 0) STOP 20
51
52   b(1:2) = minloc(a, mask=m)
53   if (b(1) .ne. 2) STOP 21
54   if (b(2) .ne. 1) STOP 22
55   b(1:2) = minloc(a, mask=m .and. tr)
56   if (b(1) .ne. 2) STOP 23
57   if (b(2) .ne. 1) STOP 24
58   b = -1
59   write (line, 9000) minloc(a, mask=m)
60   read (line, 9000) b
61   if (b(1) .ne. 2) STOP 25
62   if (b(2) .ne. 1) STOP 26
63   if (b(3) .ne. 0) STOP 27
64
65   b = maxloc (a, 1)
66   if (b(1) .ne. 3) STOP 28
67   if (b(2) .ne. 3) STOP 29
68   if (b(3) .ne. 1) STOP 30
69   b = -1
70   write (line, 9000) maxloc(a, 1)
71   read (line, 9000) b
72   if (b(1) .ne. 3) STOP 31
73   if (b(2) .ne. 3) STOP 32
74   if (b(3) .ne. 1) STOP 33
75
76   m = .true.
77   m(1, 2) = .false.
78   m(1, 3) = .false.
79   b = maxloc (a, 1, m)
80   if (b(1) .ne. 3) STOP 34
81   if (b(2) .ne. 3) STOP 35
82   if (b(3) .ne. 2) STOP 36
83   b = maxloc (a, 1, m .and. tr)
84   if (b(1) .ne. 3) STOP 37
85   if (b(2) .ne. 3) STOP 38
86   if (b(3) .ne. 2) STOP 39
87   b = -1
88   write (line, 9000) maxloc(a, 1, m)
89   read (line, 9000) b
90   if (b(1) .ne. 3) STOP 40
91   if (b(2) .ne. 3) STOP 41
92   if (b(3) .ne. 2) STOP 42
93
94   b(1:2) = maxloc(a)
95   if (b(1) .ne. 1) STOP 43
96   if (b(2) .ne. 3) STOP 44
97   b = -1
98   write (line, 9000) maxloc(a)
99   read (line, 9000) b
100   if (b(1) .ne. 1) STOP 45
101   if (b(2) .ne. 3) STOP 46
102
103   b(1:2) = maxloc(a, mask=m)
104   if (b(1) .ne. 2) STOP 47
105   if (b(2) .ne. 3) STOP 48
106   b(1:2) = maxloc(a, mask=m .and. tr)
107   if (b(1) .ne. 2) STOP 49
108   if (b(2) .ne. 3) STOP 50
109   b = -1
110   write (line, 9000) maxloc(a, mask=m)
111   read (line, 9000) b
112   if (b(1) .ne. 2) STOP 51
113   if (b(2) .ne. 3) STOP 52
114   if (b(3) .ne. 0) STOP 53
115
1169000 format (3I3)
117end program
118