diff --git a/stdlib/LinearAlgebra/src/uniformscaling.jl b/stdlib/LinearAlgebra/src/uniformscaling.jl index 57037473f4b29..54db4d8a6b893 100644 --- a/stdlib/LinearAlgebra/src/uniformscaling.jl +++ b/stdlib/LinearAlgebra/src/uniformscaling.jl @@ -207,10 +207,9 @@ isapprox(A::AbstractMatrix, J::UniformScaling; kwargs...) = isapprox(J, A; kwarg function copyto!(A::AbstractMatrix, J::UniformScaling) @assert !has_offset_axes(A) - size(A,1)==size(A,2) || throw(DimensionMismatch("a UniformScaling can only be copied to a square matrix")) fill!(A, 0) λ = J.λ - for i = 1:size(A,1) + for i = 1:min(size(A,1),size(A,2)) @inbounds A[i,i] = λ end return A diff --git a/stdlib/LinearAlgebra/test/uniformscaling.jl b/stdlib/LinearAlgebra/test/uniformscaling.jl index 52271177a1f96..2e2b33a08250e 100644 --- a/stdlib/LinearAlgebra/test/uniformscaling.jl +++ b/stdlib/LinearAlgebra/test/uniformscaling.jl @@ -86,6 +86,13 @@ let @test cond(J) == (λ ≠ zero(λ) ? one(real(λ)) : oftype(real(λ), Inf)) end + @testset "copyto!" begin + A = Matrix{Int}(undef, (3,3)) + @test copyto!(A, I) == one(A) + B = Matrix{ComplexF64}(undef, (1,2)) + @test copyto!(B, J) == [λ zero(λ)] + end + @testset "binary ops with matrices" begin B = bitrand(2, 2) @test B + I == B + Matrix(I, size(B))