From 54afe616d04536d4606c03e71ca403e17b16a3b7 Mon Sep 17 00:00:00 2001 From: Theodore Gast Date: Wed, 11 Dec 2019 16:18:31 -0800 Subject: [PATCH] add more degenerate tests for 2x2 eigen --- test/eigen.jl | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/test/eigen.jl b/test/eigen.jl index fc8c98e8..1ad9bd50 100644 --- a/test/eigen.jl +++ b/test/eigen.jl @@ -75,24 +75,36 @@ using StaticArrays, Test, LinearAlgebra @test vals::SVector ≈ sort(m_d) @test eigvals(m_c) ≈ sort(m_d) @test eigvals(Hermitian(m_c)) ≈ sort(m_d) + end - # issue #523 - for (i, j) in ((1, 2), (2, 1)), uplo in (:U, :L) - A = SMatrix{2,2,Float64}((i, 0, 0, j)) - E = eigen(Symmetric(A, uplo)) - @test eigvecs(E) * SDiagonal(eigvals(E)) * eigvecs(E)' ≈ A - end - - m1_a = randn(2,2) - m1_a = m1_a*m1_a' - m1 = SMatrix{2,2}(m1_a) - m2_a = randn(2,2) - m2_a = m2_a*m2_a' - m2 = SMatrix{2,2}(m2_a) - @test (@inferred_maybe_allow SVector{2,ComplexF64} eigvals(m1, m2)) ≈ eigvals(m1_a, m2_a) - @test (@inferred_maybe_allow SVector{2,ComplexF64} eigvals(Symmetric(m1), Symmetric(m2))) ≈ eigvals(Symmetric(m1_a), Symmetric(m2_a)) + # issue #523 + @testset "2×2 degenerate cases" for (i, j) in ((1 , 1), (1, 2), (2, 1)), uplo in (:U, :L) + fmin = floatmin(Float64) + pfmin = prevfloat(fmin) + nfmin = nextfloat(fmin) + A = SMatrix{2,2,Float64}((i, 0, 0, j)) + E = eigen(Symmetric(A, uplo)) + @test eigvecs(E) * SDiagonal(eigvals(E)) * eigvecs(E)' ≈ A + A = SMatrix{2,2,Float64}((i, pfmin, pfmin, j)) + E = eigen(Symmetric(A, uplo)) + @test eigvecs(E) * SDiagonal(eigvals(E)) * eigvecs(E)' ≈ A + A = SMatrix{2,2,Float64}((i, fmin, fmin, j)) + E = eigen(Symmetric(A, uplo)) + @test eigvecs(E) * SDiagonal(eigvals(E)) * eigvecs(E)' ≈ A + A = SMatrix{2,2,Float64}((i, nfmin, nfmin, j)) + E = eigen(Symmetric(A, uplo)) + @test eigvecs(E) * SDiagonal(eigvals(E)) * eigvecs(E)' ≈ A end + m1_a = randn(2,2) + m1_a = m1_a*m1_a' + m1 = SMatrix{2,2}(m1_a) + m2_a = randn(2,2) + m2_a = m2_a*m2_a' + m2 = SMatrix{2,2}(m2_a) + @test (@inferred_maybe_allow SVector{2,ComplexF64} eigvals(m1, m2)) ≈ eigvals(m1_a, m2_a) + @test (@inferred_maybe_allow SVector{2,ComplexF64} eigvals(Symmetric(m1), Symmetric(m2))) ≈ eigvals(Symmetric(m1_a), Symmetric(m2_a)) + @test_throws DimensionMismatch eigvals(SA[1 2 3; 4 5 6], SA[1 2 3; 4 5 5]) @test_throws DimensionMismatch eigvals(SA[1 2; 4 5], SA[1 2 3; 4 5 5; 3 4 5])