From 6a2dcc600b4c0b944757eb696965847e8c0b7aee Mon Sep 17 00:00:00 2001 From: Jutho Date: Thu, 23 Aug 2018 00:09:59 +0200 Subject: [PATCH] Make copyto!(A,I) work for rectangular matrices (#28790) * Make copyto!(A,I) work for rectangular matrices * add tests for `copyto!` add tests for `copyto!(::Matrix, ::UniformScaling)` * fix whitespace --- stdlib/LinearAlgebra/src/uniformscaling.jl | 3 +-- stdlib/LinearAlgebra/test/uniformscaling.jl | 7 +++++++ 2 files changed, 8 insertions(+), 2 deletions(-) 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))