Skip to content

Commit 54afe61

Browse files
committed
add more degenerate tests for 2x2 eigen
1 parent e6d9f01 commit 54afe61

File tree

1 file changed

+27
-15
lines changed

1 file changed

+27
-15
lines changed

test/eigen.jl

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -75,24 +75,36 @@ using StaticArrays, Test, LinearAlgebra
7575
@test vals::SVector sort(m_d)
7676
@test eigvals(m_c) sort(m_d)
7777
@test eigvals(Hermitian(m_c)) sort(m_d)
78+
end
7879

79-
# issue #523
80-
for (i, j) in ((1, 2), (2, 1)), uplo in (:U, :L)
81-
A = SMatrix{2,2,Float64}((i, 0, 0, j))
82-
E = eigen(Symmetric(A, uplo))
83-
@test eigvecs(E) * SDiagonal(eigvals(E)) * eigvecs(E)' A
84-
end
85-
86-
m1_a = randn(2,2)
87-
m1_a = m1_a*m1_a'
88-
m1 = SMatrix{2,2}(m1_a)
89-
m2_a = randn(2,2)
90-
m2_a = m2_a*m2_a'
91-
m2 = SMatrix{2,2}(m2_a)
92-
@test (@inferred_maybe_allow SVector{2,ComplexF64} eigvals(m1, m2)) eigvals(m1_a, m2_a)
93-
@test (@inferred_maybe_allow SVector{2,ComplexF64} eigvals(Symmetric(m1), Symmetric(m2))) eigvals(Symmetric(m1_a), Symmetric(m2_a))
80+
# issue #523
81+
@testset "2×2 degenerate cases" for (i, j) in ((1 , 1), (1, 2), (2, 1)), uplo in (:U, :L)
82+
fmin = floatmin(Float64)
83+
pfmin = prevfloat(fmin)
84+
nfmin = nextfloat(fmin)
85+
A = SMatrix{2,2,Float64}((i, 0, 0, j))
86+
E = eigen(Symmetric(A, uplo))
87+
@test eigvecs(E) * SDiagonal(eigvals(E)) * eigvecs(E)' A
88+
A = SMatrix{2,2,Float64}((i, pfmin, pfmin, j))
89+
E = eigen(Symmetric(A, uplo))
90+
@test eigvecs(E) * SDiagonal(eigvals(E)) * eigvecs(E)' A
91+
A = SMatrix{2,2,Float64}((i, fmin, fmin, j))
92+
E = eigen(Symmetric(A, uplo))
93+
@test eigvecs(E) * SDiagonal(eigvals(E)) * eigvecs(E)' A
94+
A = SMatrix{2,2,Float64}((i, nfmin, nfmin, j))
95+
E = eigen(Symmetric(A, uplo))
96+
@test eigvecs(E) * SDiagonal(eigvals(E)) * eigvecs(E)' A
9497
end
9598

99+
m1_a = randn(2,2)
100+
m1_a = m1_a*m1_a'
101+
m1 = SMatrix{2,2}(m1_a)
102+
m2_a = randn(2,2)
103+
m2_a = m2_a*m2_a'
104+
m2 = SMatrix{2,2}(m2_a)
105+
@test (@inferred_maybe_allow SVector{2,ComplexF64} eigvals(m1, m2)) eigvals(m1_a, m2_a)
106+
@test (@inferred_maybe_allow SVector{2,ComplexF64} eigvals(Symmetric(m1), Symmetric(m2))) eigvals(Symmetric(m1_a), Symmetric(m2_a))
107+
96108
@test_throws DimensionMismatch eigvals(SA[1 2 3; 4 5 6], SA[1 2 3; 4 5 5])
97109
@test_throws DimensionMismatch eigvals(SA[1 2; 4 5], SA[1 2 3; 4 5 5; 3 4 5])
98110

0 commit comments

Comments
 (0)