Skip to content

Commit f5100a1

Browse files
authored
[CUSOLVER] Add tests for geqrf, orgqr and ormqr (#2300)
1 parent ad5ddf8 commit f5100a1

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

lib/cusolver/dense.jl

+2-1
Original file line numberDiff line numberDiff line change
@@ -268,10 +268,11 @@ for (bname, fname, elty) in ((:cusolverDnSormqr_bufferSize, :cusolverDnSormqr, :
268268

269269
# Support transa = 'C' for real matrices
270270
trans = $elty <: Real && trans == 'C' ? 'T' : trans
271+
($elty <: Complex) && (trans == 'T') && throw(ArgumentError("trans = 'T' is not supported with complex matrices."))
271272

272273
chkside(side)
273274
chktrans(trans)
274-
m,n = ndims(C) == 2 ? size(C) : (size(C, 1), 1)
275+
m,n = ndims(C) == 2 ? size(C) : (length(C), 1)
275276
mA = size(A, 1)
276277
k = length(tau)
277278
if side == 'L' && m != mA

test/libraries/cusolver/dense.jl

+31
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,37 @@ l = 13
99
k = 1
1010

1111
@testset "elty = $elty" for elty in [Float32, Float64, ComplexF32, ComplexF64]
12+
@testset "geqrf! -- orgqr!" begin
13+
A = rand(elty, m, n)
14+
dA = CuArray(A)
15+
dA, τ = CUSOLVER.geqrf!(dA)
16+
CUSOLVER.orgqr!(dA, τ)
17+
@test dA' * dA I
18+
end
19+
20+
@testset "ormqr!" begin
21+
@testset "side = $side" for side in ['L', 'R']
22+
@testset "trans = $trans" for (trans, op) in [('N', identity), ('T', transpose), ('C', adjoint)]
23+
(elty <: Complex) && (trans == 'T') && continue
24+
A = rand(elty, m, n)
25+
dA = CuArray(A)
26+
dA, dτ = CUSOLVER.geqrf!(dA)
27+
28+
hI = Matrix{elty}(I, m, m)
29+
dI = CuArray(hI)
30+
dH = CUSOLVER.ormqr!(side, 'N', dA, dτ, dI)
31+
@test dH' * dH I
32+
33+
C = side == 'L' ? rand(elty, m, n) : rand(elty, n, m)
34+
dC = CuArray(C)
35+
dD = side == 'L' ? op(dH) * dC : dC * op(dH)
36+
37+
CUSOLVER.ormqr!(side, trans, dA, dτ, dC)
38+
@test dC dD
39+
end
40+
end
41+
end
42+
1243
@testset "inv -- unsymmetric" begin
1344
A = rand(elty,n,n)
1445
dA = CuArray(A)

0 commit comments

Comments
 (0)