Skip to content

Commit 3cc0c92

Browse files
authored
Implement sum(f, ::AbstractFill) (#132)
* Implement `sum(f, ::AbstractFill)` * Bump version * Fix method ambiguity error on Julia 1.0
1 parent ba49d16 commit 3cc0c92

File tree

3 files changed

+11
-1
lines changed

3 files changed

+11
-1
lines changed

Project.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "FillArrays"
22
uuid = "1a297f60-69ca-5386-bcde-b61e274b549b"
3-
version = "0.10.1"
3+
version = "0.10.2"
44

55
[deps]
66
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

src/FillArrays.jl

+5
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,11 @@ end
489489
sum(x::AbstractFill) = getindex_value(x)*length(x)
490490
sum(x::Zeros) = getindex_value(x)
491491

492+
# define `sum(::Callable, ::AbstractFill)` to avoid method ambiguity errors on Julia 1.0
493+
sum(f, x::AbstractFill) = _sum(f, x)
494+
sum(f::Base.Callable, x::AbstractFill) = _sum(f, x)
495+
_sum(f, x::AbstractFill) = length(x) * f(getindex_value(x))
496+
492497
cumsum(x::AbstractFill{<:Any,1}) = range(getindex_value(x); step=getindex_value(x),
493498
length=length(x))
494499

test/runtests.jl

+5
Original file line numberDiff line numberDiff line change
@@ -508,18 +508,23 @@ end
508508

509509
@testset "Cumsum and diff" begin
510510
@test sum(Fill(3,10)) 30
511+
@test sum(x -> x + 1, Fill(3,10)) 40
511512
@test cumsum(Fill(3,10)) 3:3:30
512513

513514
@test sum(Ones(10)) 10.0
515+
@test sum(x -> x + 1, Ones(10)) 20.0
514516
@test cumsum(Ones(10)) 1.0:10.0
515517

516518
@test sum(Ones{Int}(10)) 10
519+
@test sum(x -> x + 1, Ones{Int}(10)) 20
517520
@test cumsum(Ones{Int}(10)) Base.OneTo(10)
518521

519522
@test sum(Zeros(10)) 0.0
523+
@test sum(x -> x + 1, Zeros(10)) 10.0
520524
@test cumsum(Zeros(10)) Zeros(10)
521525

522526
@test sum(Zeros{Int}(10)) 0
527+
@test sum(x -> x + 1, Zeros{Int}(10)) 10
523528
@test cumsum(Zeros{Int}(10)) Zeros{Int}(10)
524529

525530
@test cumsum(Zeros{Bool}(10)) Zeros{Bool}(10)

0 commit comments

Comments
 (0)