@@ -75,24 +75,36 @@ using StaticArrays, Test, LinearAlgebra
75
75
@test vals:: SVector ≈ sort (m_d)
76
76
@test eigvals (m_c) ≈ sort (m_d)
77
77
@test eigvals (Hermitian (m_c)) ≈ sort (m_d)
78
+ end
78
79
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
94
97
end
95
98
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
+
96
108
@test_throws DimensionMismatch eigvals (SA[1 2 3 ; 4 5 6 ], SA[1 2 3 ; 4 5 5 ])
97
109
@test_throws DimensionMismatch eigvals (SA[1 2 ; 4 5 ], SA[1 2 3 ; 4 5 5 ; 3 4 5 ])
98
110
0 commit comments