xref: /llvm-project/flang/test/Evaluate/folding20.f90 (revision 82e1e412e3249e15908c3f916eeaa04b96d4b453)
1! RUN: %python %S/test_folding.py %s %flang_fc1
2! Tests reduction intrinsic function folding
3module m
4  implicit none
5  integer, parameter :: intmatrix(*,*) = reshape([1, 2, 3, 4, 5, 6], [2, 3])
6  logical, parameter :: odds(2,3) = mod(intmatrix, 2) == 1
7  character(*), parameter :: chmatrix(*,*) = reshape(['abc', 'def', 'ghi', 'jkl', 'mno', 'pqr'], [2, 3])
8  real, parameter :: nan = real(z'7FC00000'), inf = real(z'7F800000')
9  real, parameter :: nans(*) = [nan, nan]
10  real, parameter :: someNan(*) = [nan, 0.]
11  real, parameter :: someInf(*) = [inf, 0.]
12
13  logical, parameter :: test_allidentity = all([Logical::])
14  logical, parameter :: test_all = .not. all(odds)
15  logical, parameter :: test_alldim1 = all(.not. all(odds,1))
16  logical, parameter :: test_alldim2 = all(all(odds,2) .eqv. [.true., .false.])
17  logical, parameter :: test_anyidentity = .not. any([Logical::])
18  logical, parameter :: test_any = any(odds)
19  logical, parameter :: test_anydim1 = all(any(odds,1))
20  logical, parameter :: test_anydim2 = all(any(odds,2) .eqv. [.true., .false.])
21
22  logical, parameter :: test_iallidentity = iall([integer::]) == -1
23  logical, parameter :: test_iall = iall(intmatrix) == 0
24  logical, parameter :: test_iall_masked = iall(intmatrix,odds) == 1
25  logical, parameter :: test_ialldim1 = all(iall(intmatrix,dim=1) == [0, 0, 4])
26  logical, parameter :: test_ialldim2 = all(iall(intmatrix,dim=2) == [1, 0])
27  logical, parameter :: test_ianyidentity = iany([integer::]) == 0
28  logical, parameter :: test_iany = iany(intmatrix) == 7
29  logical, parameter :: test_iany_masked = iany(intmatrix,odds) == 7
30  logical, parameter :: test_ianydim1 = all(iany(intmatrix,dim=1) == [3, 7, 7])
31  logical, parameter :: test_ianydim2 = all(iany(intmatrix,dim=2) == [7, 6])
32  logical, parameter :: test_iparityidentity = iparity([integer::]) == 0
33  logical, parameter :: test_iparity = iparity(intmatrix) == 7
34  logical, parameter :: test_iparity_masked = iparity(intmatrix,odds) == 7
35  logical, parameter :: test_iparitydim1 = all(iparity(intmatrix,dim=1) == [3, 7, 3])
36  logical, parameter :: test_iparitydim2 = all(iparity(intmatrix,dim=2) == [7, 0])
37
38  logical, parameter :: test_imaxidentity = maxval([integer::]) == -huge(0) - 1
39  logical, parameter :: test_iminidentity = minval([integer::]) == huge(0)
40  logical, parameter :: test_imaxval = maxval(intmatrix) == 6
41  logical, parameter :: test_iminval = minval(intmatrix) == 1
42  logical, parameter :: test_imaxval_masked = maxval(intmatrix,odds) == 5
43  logical, parameter :: test_iminval_masked = minval(intmatrix,.not.odds) == 2
44  logical, parameter :: test_rmaxidentity = maxval([real::]) == -huge(0.0)
45  logical, parameter :: test_rminidentity = minval([real::]) == huge(0.0)
46  logical, parameter :: test_rmaxval = maxval(real(intmatrix)) == 6.0
47  logical, parameter :: test_rminval = minval(real(intmatrix)) == 1.0
48  logical, parameter :: test_rmaxval_scalar_mask = maxval(real(intmatrix), .true.) == 6.0
49  logical, parameter :: test_rminval_scalar_mask = minval(real(intmatrix), .false.) == huge(0.0)
50  logical, parameter :: test_rmaxval_allNaN = maxval(nans) /= maxval(nans)
51  logical, parameter :: test_rminval_allNaN = maxval(nans) /= maxval(nans)
52  logical, parameter :: test_rmaxval_someNaN = maxval(someNan) == 0.
53  logical, parameter :: test_rminval_someNaN = minval(someNan) == 0.
54  logical, parameter :: test_rmaxval_someInf = maxval(someInf) == inf
55  logical, parameter :: test_rminval_someInf = minval(-someInf) == -inf
56  logical, parameter :: test_cmaxlen = len(maxval([character*4::])) == 4
57  logical, parameter :: test_cmaxidentity = maxval([character*4::]) == repeat(char(0), 4)
58  logical, parameter :: test_cminidentity = minval([character*4::]) == repeat(char(255), 4)
59  logical, parameter :: test_cmaxval = maxval(chmatrix) == 'pqr'
60  logical, parameter :: test_cminval = minval(chmatrix) == 'abc'
61  logical, parameter :: test_maxvaldim1 = all(maxval(intmatrix,dim=1) == [2, 4, 6])
62  logical, parameter :: test_minvaldim2 = all(minval(intmatrix,dim=2,mask=odds) == [1, huge(0)])
63
64  logical, parameter :: test_iproductidentity = product([integer::]) == 1
65  logical, parameter :: test_iproduct = product(intmatrix) == 720
66  logical, parameter :: test_iproduct_masked = product(intmatrix,odds) == 15
67  logical, parameter :: test_productdim1 = all(product(intmatrix,dim=1) == [2, 12, 30])
68  logical, parameter :: test_productdim2 = all(product(intmatrix,dim=2) == [15, 48])
69  logical, parameter :: test_rproductidentity = product([real::]) == 1.
70  logical, parameter :: test_rproduct = product(real(intmatrix)) == 720.
71  logical, parameter :: test_cproductidentity = product([complex::]) == (1.,0.)
72  logical, parameter :: test_cproduct = product(cmplx(intmatrix,-intmatrix)) == (0.,5760.)
73
74  logical, parameter :: test_isumidentity = sum([integer::]) == 0
75  logical, parameter :: test_isum = sum(intmatrix) == 21
76  logical, parameter :: test_isum_masked = sum(intmatrix,odds) == 9
77  logical, parameter :: test_sumdim1 = all(sum(intmatrix,dim=1) == [3, 7, 11])
78  logical, parameter :: test_sumdim2 = all(sum(intmatrix,dim=2) == [9, 12])
79  logical, parameter :: test_rsumidentity = sum([real::]) == 0.
80  logical, parameter :: test_rsum = sum(real(intmatrix)) == 21.
81  logical, parameter :: test_csumidentity = sum([complex::]) == (0.,0.)
82  logical, parameter :: test_csum = sum(cmplx(intmatrix,-intmatrix)) == (21.,-21.)
83end
84