Skip to content

Commit d3387ba

Browse files
authored
Fix isone for an empty AbstractFill (#327)
* Fix isone for empty AbstractFill * Test for non-square arrays
1 parent be48fbf commit d3387ba

File tree

2 files changed

+44
-17
lines changed

2 files changed

+44
-17
lines changed

src/FillArrays.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ module FillArrays
44
using LinearAlgebra
55
import Base: size, getindex, setindex!, IndexStyle, checkbounds, convert,
66
+, -, *, /, \, diff, sum, cumsum, maximum, minimum, sort, sort!,
7-
any, all, axes, isone, iterate, unique, allunique, permutedims, inv,
7+
any, all, axes, isone, iszero, iterate, unique, allunique, permutedims, inv,
88
copy, vec, setindex!, count, ==, reshape, map, zero,
99
show, view, in, mapreduce, one, reverse, promote_op, promote_rule, repeat,
1010
parent, similar, issorted
@@ -621,9 +621,10 @@ end
621621
#########
622622

623623
function isone(AF::AbstractFillMatrix)
624-
isone(getindex_value(AF)) || return false
625624
(n,m) = size(AF)
626625
n != m && return false
626+
(n == 0 || m == 0) && return true
627+
isone(getindex_value(AF)) || return false
627628
n == 1 && return true
628629
return false
629630
end

test/runtests.jl

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1238,40 +1238,62 @@ end
12381238
@test ! all(iszero, m)
12391239
@test ! all(isone, m)
12401240
end
1241-
for d in (1, )
1241+
@testset for d in (0, 1)
12421242
for m in (Eye{T}(d), Eye{T}(d, d))
1243+
M = Array(m)
12431244
@test ! any(iszero, m)
12441245
@test ! all(iszero, m)
1245-
@test any(isone, m)
1246-
@test all(isone, m)
1246+
@test any(isone, m) == !isempty(m)
1247+
@test all(isone, m) == !isempty(m)
1248+
if !isempty(m)
1249+
@test ! any(iszero, m) == ! any(iszero, M)
1250+
@test ! all(iszero, m) == ! all(iszero, M)
1251+
@test any(isone, m) == any(isone, M)
1252+
@test all(isone, m) == all(isone, M)
1253+
end
12471254
end
12481255

12491256
for m in (Eye{T}(d, d + 1), Eye{T}(d + 1, d))
1250-
@test any(iszero, m)
1257+
M = Array(m)
1258+
@test any(iszero, m) == !isempty(m)
12511259
@test ! all(iszero, m)
1252-
@test any(isone, m)
1260+
@test any(isone, m) == !isempty(m)
12531261
@test ! all(isone, m)
1262+
if !isempty(M)
1263+
@test any(iszero, m) == any(iszero, M)
1264+
@test ! all(iszero, m) == ! all(iszero, M)
1265+
@test any(isone, m) == any(isone, M)
1266+
@test ! all(isone, m) == ! all(isone, M)
1267+
end
12541268
end
12551269

12561270
onem = Ones{T}(d, d)
1257-
@test isone(onem)
1258-
@test ! iszero(onem)
1271+
@test isone(onem) == isone(Array(onem))
1272+
@test iszero(onem) == isempty(onem) == iszero(Array(onem))
1273+
1274+
if d > 0
1275+
@test !isone(Ones{T}(d, 2d))
1276+
end
12591277

12601278
zerom = Zeros{T}(d, d)
1261-
@test ! isone(zerom)
1262-
@test iszero(zerom)
1279+
@test isone(zerom) == isempty(zerom) == isone(Array(zerom))
1280+
@test iszero(zerom) == iszero(Array(zerom))
1281+
1282+
if d > 0
1283+
@test iszero(Zeros{T}(d, 2d))
1284+
end
12631285

12641286
fillm0 = Fill(T(0), d, d)
1265-
@test ! isone(fillm0)
1266-
@test iszero(fillm0)
1287+
@test isone(fillm0) == isempty(fillm0) == isone(Array(fillm0))
1288+
@test iszero(fillm0) == iszero(Array(fillm0))
12671289

12681290
fillm1 = Fill(T(1), d, d)
1269-
@test isone(fillm1)
1270-
@test ! iszero(fillm1)
1291+
@test isone(fillm1) == isone(Array(fillm1))
1292+
@test iszero(fillm1) == isempty(fillm1) == iszero(Array(fillm1))
12711293

12721294
fillm2 = Fill(T(2), d, d)
1273-
@test ! isone(fillm2)
1274-
@test ! iszero(fillm2)
1295+
@test isone(fillm2) == isempty(fillm2) == isone(Array(fillm2))
1296+
@test iszero(fillm2) == isempty(fillm2) == iszero(Array(fillm2))
12751297
end
12761298
for d in (2, 3)
12771299
for m in (Eye{T}(d), Eye{T}(d, d), Eye{T}(d, d + 2), Eye{T}(d + 2, d))
@@ -1306,6 +1328,10 @@ end
13061328
end
13071329
end
13081330

1331+
@test iszero(Zeros{SMatrix{2,2,Int,4}}(2))
1332+
@test iszero(Fill(SMatrix{2,2}(0,0,0,0), 2))
1333+
@test iszero(Fill(SMatrix{2,2}(0,0,0,1), 0))
1334+
13091335
@testset "all/any" begin
13101336
@test any(Ones{Bool}(10)) === all(Ones{Bool}(10)) === any(Fill(true,10)) === all(Fill(true,10)) === true
13111337
@test any(Zeros{Bool}(10)) === all(Zeros{Bool}(10)) === any(Fill(false,10)) === all(Fill(false,10)) === false

0 commit comments

Comments
 (0)