Skip to content

Commit 0bcd057

Browse files
authored
StepRangeLen to support 0 step size in cumsum #226 (#230)
* use StepRangeLen to support 0 step size * v0.13.11 * allow special casing on ∞ length * Restore ± special cases * Update runtests.jl * fix more tests * Update runtests.jl
1 parent b681ddd commit 0bcd057

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

src/FillArrays.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -496,14 +496,14 @@ sum(x::AbstractFill) = getindex_value(x)*length(x)
496496
sum(f, x::AbstractFill) = length(x) * f(getindex_value(x))
497497
sum(x::Zeros) = getindex_value(x)
498498

499-
cumsum(x::AbstractFill{<:Any,1}) = range(getindex_value(x); step=getindex_value(x),
500-
length=length(x))
499+
# needed to support infinite case
500+
steprangelen(st...) = StepRangeLen(st...)
501+
cumsum(x::AbstractFill{<:Any,1}) = steprangelen(getindex_value(x), getindex_value(x), length(x))
501502

502503
cumsum(x::ZerosVector) = x
503504
cumsum(x::ZerosVector{Bool}) = x
504505
cumsum(x::OnesVector{II}) where II<:Integer = convert(AbstractVector{II}, oneto(length(x)))
505506
cumsum(x::OnesVector{Bool}) = oneto(length(x))
506-
cumsum(x::AbstractFillVector{Bool}) = cumsum(AbstractFill{Int}(x))
507507

508508

509509
#########

test/runtests.jl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -634,11 +634,11 @@ end
634634
@test sum(Fill(3,10)) 30
635635
@test reduce(+, Fill(3,10)) 30
636636
@test sum(x -> x + 1, Fill(3,10)) 40
637-
@test cumsum(Fill(3,10)) 3:3:30
637+
@test cumsum(Fill(3,10)) StepRangeLen(3,3,10)
638638

639639
@test sum(Ones(10)) 10.0
640640
@test sum(x -> x + 1, Ones(10)) 20.0
641-
@test cumsum(Ones(10)) 1.0:10.0
641+
@test cumsum(Ones(10)) StepRangeLen(1.0, 1.0, 10)
642642

643643
@test sum(Ones{Int}(10)) 10
644644
@test sum(x -> x + 1, Ones{Int}(10)) 20
@@ -654,7 +654,7 @@ end
654654

655655
@test cumsum(Zeros{Bool}(10)) Zeros{Bool}(10)
656656
@test cumsum(Ones{Bool}(10)) Base.OneTo{Int}(10)
657-
@test cumsum(Fill(true,10)) 1:1:10
657+
@test cumsum(Fill(true,10)) StepRangeLen(true, true, 10)
658658

659659
@test diff(Fill(1,10)) Zeros{Int}(9)
660660
@test diff(Ones{Float64}(10)) Zeros{Float64}(9)
@@ -1338,6 +1338,8 @@ end
13381338
@test stringmime("text/plain", Fill(7,2,3)) == "2×3 Fill{$Int}, with entries equal to 7"
13391339
@test stringmime("text/plain", Fill(8.0,1)) == "1-element Fill{Float64}, with entry equal to 8.0"
13401340
@test stringmime("text/plain", Eye(5)) == "5×5 Eye{Float64}"
1341+
# used downstream in LazyArrays.jl to deduce sparsity
1342+
@test Base.replace_in_print_matrix(Zeros(5,3), 1, 2, "0.0") == ""
13411343

13421344
# 2-arg show, compact printing
13431345
@test repr(Zeros(3)) == "Zeros(3)"

0 commit comments

Comments
 (0)