Skip to content

Commit 6b2fa78

Browse files
authored
add 1-arg count, sum, prod, etc. methods; with tests (#243)
* add 2-arg count method, with tests * add init arg to count method * Revert "add init arg to count method" This reverts commit e137ee0. * add 1-arg method to sum, prod, etc too * better tests
1 parent d62bf49 commit 6b2fa78

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

Project.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,17 @@ LRUCache = "1"
1414
Mmap = "1"
1515
OffsetArrays = "1"
1616
Statistics = "1.9"
17+
Suppressor = "0.2.8"
1718
Test = "1.9"
19+
TraceFuns = "0.2.0"
1820
julia = "1.9"
1921

2022
[extras]
2123
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
2224
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
2325
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
26+
Suppressor = "fd094767-a336-5f1f-9728-57cf17d0bbfb"
27+
TraceFuns = "626f57eb-f6ca-464c-8f04-384fee2a352e"
2428

2529
[targets]
26-
test = ["Aqua", "Statistics", "Test"]
30+
test = ["Aqua", "Statistics", "Test", "Suppressor", "TraceFuns"]

src/mapreduce.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,17 @@ end
5252
# Implementation for special cases and if fallback breaks in future julia versions
5353

5454
for fname in [:sum, :prod, :all, :any, :minimum, :maximum]
55+
@eval Base.$fname(v::AbstractDiskArray) = Base.$fname(identity, v::AbstractDiskArray)
5556
@eval function Base.$fname(f::Function, v::AbstractDiskArray)
5657
$fname(eachchunk(v)) do chunk
5758
$fname(f, v[chunk...])
5859
end
5960
end
6061
end
6162

63+
Base.count(v::AbstractDiskArray) = count(identity, v::AbstractDiskArray)
6264
function Base.count(f, v::AbstractDiskArray)
6365
sum(eachchunk(v)) do chunk
6466
count(f, v[chunk...])
6567
end
66-
end
68+
end

test/runtests.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ using DiskArrays.TestTypes
44
using Test
55
using Statistics
66
using Aqua
7+
using TraceFuns, Suppressor
78

89
# Run with any code changes
910
# using JET
@@ -1049,3 +1050,12 @@ end
10491050
@inferred Matrix{Int} map(identity, da)
10501051
@inferred Matrix{Float64} map(x -> x * 5.0, da)
10511052
end
1053+
1054+
@testset "identity function" begin
1055+
a = ChunkedDiskArray(1:10 .> 3; chunksize=(3, ))
1056+
for fname in [:sum, :prod, :all, :any, :minimum, :maximum, :count]
1057+
@eval out = @capture_out @trace $fname($a) DiskArrays
1058+
@test occursin("DiskGenerator", out) == false
1059+
end
1060+
@test count(a) + count(!, a) == length(a)
1061+
end

0 commit comments

Comments
 (0)