diff --git a/src/symmetric.jl b/src/symmetric.jl index 09819325..04eaf9f0 100644 --- a/src/symmetric.jl +++ b/src/symmetric.jl @@ -266,6 +266,7 @@ Base._reverse(A::Symmetric, ::Colon) = Symmetric(reverse(A.data), A.uplo == 'U' @propagate_inbounds function setindex!(A::Symmetric, v, i::Integer, j::Integer) i == j || throw(ArgumentError("Cannot set a non-diagonal index in a symmetric matrix")) + issymmetric(v) || throw(ArgumentError("cannot set a diagonal element of a symmetric matrix to an asymmetric value")) setindex!(A.data, v, i, j) return A end @@ -276,8 +277,8 @@ Base._reverse(A::Hermitian, ::Colon) = Hermitian(reverse(A.data), A.uplo == 'U' @propagate_inbounds function setindex!(A::Hermitian, v, i::Integer, j::Integer) if i != j throw(ArgumentError("Cannot set a non-diagonal index in a Hermitian matrix")) - elseif !isreal(v) - throw(ArgumentError("Cannot set a diagonal entry in a Hermitian matrix to a nonreal value")) + elseif !ishermitian(v) + throw(ArgumentError("cannot set a diagonal element of a hermitian matrix to a non-hermitian value")) else setindex!(A.data, v, i, j) end diff --git a/test/symmetric.jl b/test/symmetric.jl index 6e4a5029..c6b6fdc4 100644 --- a/test/symmetric.jl +++ b/test/symmetric.jl @@ -1180,4 +1180,15 @@ end end end +@testset "block-symmetric setindex!" begin + A = fill([1 2; 3 4], 2, 2) + v = [1 2; 3 4] + H = Hermitian(A) + h_msg = "cannot set a diagonal element of a hermitian matrix to a non-hermitian value" + @test_throws h_msg H[1,1] = v + S = Symmetric(A) + s_msg = "cannot set a diagonal element of a symmetric matrix to an asymmetric value" + @test_throws s_msg S[1,1] = v +end + end # module TestSymmetric