Skip to content

Commit b38651a

Browse files
committed
Check for elementwise equality when comparing with UniformScaling
1 parent 5f449f5 commit b38651a

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
@@ -347,15 +347,17 @@ end
347347
function ==(A::AbstractMatrix, J::UniformScaling)
348348
require_one_based_indexing(A)
349349
size(A, 1) == size(A, 2) || return false
350-
iszero(J.λ) && return iszero(A)
351-
isone(J.λ) && return isone(A)
352-
isdiag(A) || return false
353-
return all(==(J.λ), diagview(A))
350+
isempty(A) && return true
351+
# Check that the elements of A are equal to those of J,
352+
# this ensures that if A == J, their elements are equal as well
353+
iszero(J.λ) && return first(A) == J.λ && iszero(A)
354+
isone(J.λ) && return first(A) == J.λ && isone(A)
355+
return _isequalto_uniformscaling(A, J)
354356
end
355-
function ==(A::StridedMatrix, J::UniformScaling)
356-
size(A, 1) == size(A, 2) || return false
357-
iszero(J.λ) && return iszero(A)
358-
isone(J.λ) && return isone(A)
357+
function _isequalto_uniformscaling(A::AbstractMatrix, J::UniformScaling)
358+
return isdiag(A) && all(==(J.λ), diagview(A))
359+
end
360+
function _isequalto_uniformscaling(A::StridedMatrix, J::UniformScaling)
359361
for j in axes(A, 2), i in axes(A, 1)
360362
ifelse(i == j, A[i, j] == J.λ, iszero(A[i, j])) || return false
361363
end

test/uniformscaling.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,4 +589,11 @@ end
589589
@test A\J cA\J
590590
end
591591

592+
@testset "block matrix equality" begin
593+
A = Diagonal(fill(I(2), 4))
594+
@test isone(A)
595+
@test A != I
596+
@test 0*A != 0*I
597+
end
598+
592599
end # module TestUniformscaling

0 commit comments

Comments
 (0)