Skip to content

Commit 14af2d1

Browse files
committed
Merge pull request JuliaLang#12095 from JuliaLang/ksh/linalgtests
Fill out linalg tests
2 parents a227951 + c64edb5 commit 14af2d1

File tree

4 files changed

+31
-1
lines changed

4 files changed

+31
-1
lines changed

base/linalg/eigen.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ function eigmin(A::Union{Number, StridedMatrix}; permute::Bool=true, scale::Bool
9797
iseltype(v,Complex) ? error("DomainError: complex eigenvalues cannot be ordered") : minimum(v)
9898
end
9999

100-
inv(A::Eigen) = A.vectors/Diagonal(A.values)*A.vectors'
100+
inv(A::Eigen) = A.vectors * inv(Diagonal(A.values)) / A.vectors
101101
det(A::Eigen) = prod(A.values)
102102

103103
# Generalized eigenproblem

test/linalg/symmetric.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,23 @@ let n=10
8484
@test_approx_eq Symmetric(asym)*x+y asym*x+y
8585
end
8686

87+
C = zeros(eltya,n,n)
8788
# mat * mat
8889
if eltya <: Complex
8990
@test_approx_eq Hermitian(asym) * a asym * a
9091
@test_approx_eq a * Hermitian(asym) a * asym
9192
@test_approx_eq Hermitian(asym) * Hermitian(asym) asym*asym
9293
@test_throws DimensionMismatch Hermitian(asym) * ones(eltya,n+1)
94+
Base.LinAlg.A_mul_B!(C,a,asym)
95+
@test_approx_eq C a*asym
9396
end
9497
if eltya <: Real && eltya != Int
9598
@test_approx_eq Symmetric(asym) * Symmetric(asym) asym*asym
9699
@test_approx_eq Symmetric(asym) * a asym * a
97100
@test_approx_eq a * Symmetric(asym) a * asym
98101
@test_throws DimensionMismatch Symmetric(asym) * ones(eltya,n+1)
102+
Base.LinAlg.A_mul_B!(C,a,asym)
103+
@test_approx_eq C a*asym
99104
end
100105

101106
# solver
@@ -109,6 +114,21 @@ let n=10
109114
if eltya <: Real && eltya != Int
110115
@test_approx_eq inv(Symmetric(asym)) inv(asym)
111116
end
117+
118+
# conversion
119+
@test Symmetric(asym) == convert(Symmetric,Symmetric(asym))
120+
if eltya <: Real && eltya != Int
121+
typs = [Float16,Float32,Float64]
122+
for typ in typs
123+
@test Symmetric(convert(Matrix{typ},asym)) == convert(Symmetric{typ,Matrix{typ}},Symmetric(asym))
124+
end
125+
end
126+
if eltya <: Complex && eltya != Int
127+
typs = [Complex64,Complex128]
128+
for typ in typs
129+
@test Hermitian(convert(Matrix{typ},asym)) == convert(Hermitian{typ,Matrix{typ}},Hermitian(asym))
130+
end
131+
end
112132
end
113133
end
114134

test/linalg1.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,12 @@ debug && println("non-symmetric eigen decomposition")
143143
if eltya != BigFloat && eltyb != BigFloat # Revisit when implemented in julia
144144
d,v = eig(a)
145145
for i in 1:size(a,2) @test_approx_eq a*v[:,i] d[i]*v[:,i] end
146+
f = eigfact(a)
147+
@test_approx_eq det(a) det(f)
148+
@test_approx_eq inv(a) inv(f)
149+
150+
num_fact = eigfact(one(eltya))
151+
@test num_fact.values[1] == one(eltya)
146152
end
147153

148154
debug && println("symmetric generalized eigenproblem")

test/linalg4.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ let a=[1.0:n;]
7777
for newtype in [Diagonal, Bidiagonal, Tridiagonal, SymTridiagonal]
7878
@test_throws ArgumentError convert(newtype,A)
7979
end
80+
A = Diagonal(a)
81+
for newtype in [UpperTriangular, LowerTriangular]
82+
@test full(convert(newtype,A)) == full(A)
83+
end
8084
end
8185

8286
# Binary ops among special types

0 commit comments

Comments
 (0)