blob: 0cd86b093bb7bc74b3bfcb9256e1e3f34e8569e7 [file] [log] [blame]
! { dg-do run }
! { dg-options "-funsigned" }
! Test matrix multiplication
program memain
implicit none
call test1
call test2
contains
subroutine test1
integer, parameter :: n = 10, m = 28
unsigned, dimension(n,n) :: u, v, w
integer(kind=8), dimension(n,n) :: i, j, k
real(8), dimension(n,n) :: a, b
call random_number(a)
call random_number(b)
u = uint(a*2.0**m)
v = uint(b*2.0**m)
i = int(a*2.0**m,8)
j = int(b*2.0**m,8)
w = matmul(u,v)
k = mod(matmul(i,j),2_8**32)
if (any(uint(k) /= w)) error stop 1
end subroutine test1
subroutine test2
unsigned, parameter :: u(3,3) = reshape ([1u, uint(-2), 3u, uint(-4), &
5u, uint(-6), 7u, uint(-8), 9u],[3,3])
unsigned, parameter :: v(3,3) = 1u - u
unsigned, parameter :: w(3,3) = matmul(u,v)
integer(kind=8), dimension(3,3), parameter :: &
i = int(u,8), j = int(v,8)
integer(kind=8), dimension(3,3) :: k = matmul(i,j)
if (any(uint(k) /= w)) error stop 2
end subroutine test2
end program memain