Skip to content

Commit 9460105

Browse files
committed
Check for elementwise equality when comparing with UniformScaling
1 parent 1f1a1e2 commit 9460105

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

src/uniformscaling.jl

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -336,15 +336,17 @@ end
336336
function ==(A::AbstractMatrix, J::UniformScaling)
337337
require_one_based_indexing(A)
338338
size(A, 1) == size(A, 2) || return false
339-
iszero(J.λ) && return iszero(A)
340-
isone(J.λ) && return isone(A)
341-
isdiag(A) || return false
342-
return all(==(J.λ), diagview(A))
339+
isempty(A) && return true
340+
# Check that the elements of A are equal to those of J,
341+
# this ensures that if A == J, their elements are equal as well
342+
iszero(J.λ) && return first(A) == J.λ && iszero(A)
343+
isone(J.λ) && return first(A) == J.λ && isone(A)
344+
return _isequalto_uniformscaling(A, J)
343345
end
344-
function ==(A::StridedMatrix, J::UniformScaling)
345-
size(A, 1) == size(A, 2) || return false
346-
iszero(J.λ) && return iszero(A)
347-
isone(J.λ) && return isone(A)
346+
function _isequalto_uniformscaling(A::AbstractMatrix, J::UniformScaling)
347+
return isdiag(A) && all(==(J.λ), diagview(A))
348+
end
349+
function _isequalto_uniformscaling(A::StridedMatrix, J::UniformScaling)
348350
for j in axes(A, 2), i in axes(A, 1)
349351
ifelse(i == j, A[i, j] == J.λ, iszero(A[i, j])) || return false
350352
end

test/uniformscaling.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,4 +576,11 @@ end
576576
@test A\J cA\J
577577
end
578578

579+
@testset "block matrix equality" begin
580+
A = Diagonal(fill(I(2), 4))
581+
@test isone(A)
582+
@test A != I
583+
@test 0*A != 0*I
584+
end
585+
579586
end # module TestUniformscaling

0 commit comments

Comments
 (0)