@@ -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