Skip to content

Commit b72e620

Browse files
committed
Systematically test SubArrays in svd.jl.
1 parent 6a36553 commit b72e620

File tree

1 file changed

+56
-47
lines changed

1 file changed

+56
-47
lines changed

test/linalg/svd.jl

Lines changed: 56 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -19,56 +19,65 @@ a2real = randn(n,n)/2
1919
a2img = randn(n,n)/2
2020

2121
for eltya in (Float32, Float64, Complex64, Complex128, Int)
22-
a = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex(areal, aimg) : areal)
23-
a2 = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex(a2real, a2img) : a2real)
24-
asym = a'+a # symmetric indefinite
25-
apd = a'*a # symmetric positive-definite
26-
ε = εa = eps(abs(float(one(eltya))))
22+
aa = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex(areal, aimg) : areal)
23+
aa2 = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex(a2real, a2img) : a2real)
24+
for atype in ("Array", "SubArray")
25+
if atype == "Array"
26+
a = aa
27+
a2 = aa2
28+
else
29+
a = sub(aa, 1:n, 1:n)
30+
a2 = sub(aa2, 1:n, 1:n)
31+
end
32+
asym = a'+a # symmetric indefinite
33+
apd = a'*a # symmetric positive-definite
34+
ε = εa = eps(abs(float(one(eltya))))
2735

28-
debug && println("\ntype of a: ", eltya, "\n")
36+
debug && println("\ntype of a: ", eltya, "\n")
2937

30-
debug && println("singular value decomposition")
31-
usv = svdfact(a)
32-
@test usv[:S] === svdvals(usv)
33-
@test usv[:U] * (Diagonal(usv[:S]) * usv[:Vt]) a
34-
@test full(usv) a
35-
@test usv[:Vt]' usv[:V]
36-
@test_throws KeyError usv[:Z]
37-
b = rand(eltya,n)
38-
@test usv\b a\b
38+
debug && println("singular value decomposition")
39+
usv = svdfact(a)
40+
@test usv[:S] === svdvals(usv)
41+
@test usv[:U] * (Diagonal(usv[:S]) * usv[:Vt]) a
42+
@test full(usv) a
43+
@test usv[:Vt]' usv[:V]
44+
@test_throws KeyError usv[:Z]
45+
b = rand(eltya,n)
46+
@test usv\b a\b
3947

40-
if eltya <: BlasFloat
41-
svdz = svdfact!(ones(eltya,0,0))
42-
@test svdz[:U] eye(eltya,0,0)
43-
@test svdz[:S] real(zeros(eltya,0))
44-
@test svdz[:Vt] eye(eltya,0,0)
45-
end
48+
if eltya <: BlasFloat
49+
svdz = svdfact!(ones(eltya,0,0))
50+
@test svdz[:U] eye(eltya,0,0)
51+
@test svdz[:S] real(zeros(eltya,0))
52+
@test svdz[:Vt] eye(eltya,0,0)
53+
end
4654

47-
debug && println("Generalized svd")
48-
a_svd = a[1:n1, :]
49-
gsvd = svdfact(a,a_svd)
50-
@test gsvd[:U]*gsvd[:D1]*gsvd[:R]*gsvd[:Q]' a
51-
@test gsvd[:V]*gsvd[:D2]*gsvd[:R]*gsvd[:Q]' a_svd
52-
@test usv[:Vt]' usv[:V]
53-
@test_throws KeyError usv[:Z]
54-
@test_throws KeyError gsvd[:Z]
55-
@test gsvd[:vals] svdvals(a,a_svd)
56-
α = eltya == Int ? -1 : rand(eltya)
57-
β = svdfact(α)
58-
@test β[:S] == [abs(α)]
59-
@test svdvals(α) == abs(α)
60-
u,v,q,d1,d2,r0 = svd(a,a_svd)
61-
@test u gsvd[:U]
62-
@test v gsvd[:V]
63-
@test d1 gsvd[:D1]
64-
@test d2 gsvd[:D2]
65-
@test q gsvd[:Q]
66-
@test gsvd[:a].^2 + gsvd[:b].^2 ones(eltya,length(gsvd[:a]))
55+
debug && println("Generalized svd")
56+
a_svd = a[1:n1, :]
57+
gsvd = svdfact(a,a_svd)
58+
@test gsvd[:U]*gsvd[:D1]*gsvd[:R]*gsvd[:Q]' a
59+
@test gsvd[:V]*gsvd[:D2]*gsvd[:R]*gsvd[:Q]' a_svd
60+
@test usv[:Vt]' usv[:V]
61+
@test_throws KeyError usv[:Z]
62+
@test_throws KeyError gsvd[:Z]
63+
@test gsvd[:vals] svdvals(a,a_svd)
64+
α = eltya == Int ? -1 : rand(eltya)
65+
β = svdfact(α)
66+
@test β[:S] == [abs(α)]
67+
@test svdvals(α) == abs(α)
68+
u,v,q,d1,d2,r0 = svd(a,a_svd)
69+
@test u gsvd[:U]
70+
@test v gsvd[:V]
71+
@test d1 gsvd[:D1]
72+
@test d2 gsvd[:D2]
73+
@test q gsvd[:Q]
74+
@test gsvd[:a].^2 + gsvd[:b].^2 ones(eltya,length(gsvd[:a]))
6775

68-
#testing the other layout for D1 & D2
69-
b = rand(eltya,n,2*n)
70-
c = rand(eltya,n,2*n)
71-
gsvd = svdfact(b,c)
72-
@test gsvd[:U]*gsvd[:D1]*gsvd[:R]*gsvd[:Q]' b
73-
@test gsvd[:V]*gsvd[:D2]*gsvd[:R]*gsvd[:Q]' c
76+
#testing the other layout for D1 & D2
77+
b = rand(eltya,n,2*n)
78+
c = rand(eltya,n,2*n)
79+
gsvd = svdfact(b,c)
80+
@test gsvd[:U]*gsvd[:D1]*gsvd[:R]*gsvd[:Q]' b
81+
@test gsvd[:V]*gsvd[:D2]*gsvd[:R]*gsvd[:Q]' c
82+
end
7483
end

0 commit comments

Comments
 (0)