Skip to content

Commit d1ad031

Browse files
committed
Backport "Preserve infinite step ranges in views" to v0.14
1 parent 932a16b commit d1ad031

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

src/infrange.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,10 @@ function getindex(Ac::AdjOrTrans{<:Any,<:InfRanges}, k::Integer, j::InfAxes)
284284
parent(Ac)[j]
285285
end
286286

287+
# views may preserve InfStepRanges
288+
Base.@propagate_inbounds Base.view(r::InfStepRange, i::AbstractUnitRange{<:Integer}) = r[i]
289+
Base.@propagate_inbounds Base.view(r::InfStepRange, i::InfStepRange{<:Integer}) = r[i]
290+
Base.@propagate_inbounds Base.view(r::InfStepRange, i::StepRange{<:Integer}) = r[i]
287291

288292
show(io::IO, r::InfUnitRange) = print(io, repr(first(r)), ':', repr(∞))
289293
show(io::IO, r::OneToInf{Int}) = print(io, "OneToInf()")
@@ -618,4 +622,4 @@ end
618622
# bounds-checking
619623
function Base.checkindex(::Type{Bool}, inds::NTuple{N, AbstractInfUnitRange}, i::AbstractRange{CartesianIndex{N}}) where {N}
620624
isempty(i) | checkindex(Bool, inds, first(i))
621-
end
625+
end

test/runtests.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,16 @@ end
391391
@test (1:-1:-∞)[1:∞] == 1:-1:-
392392
end
393393

394+
@testset "view(InfStepRange, inf-range)" begin
395+
r = 2:5:
396+
@test view(r, axes(r,1)) === r
397+
@test view(r, 1:1:∞) === r
398+
@test view(r, 2:2:∞) === 7:10:
399+
r2 = 2:5:10_000 # arbitrary high upper cutoff
400+
@test view(r, 4:10) == view(r2, 4:10)
401+
@test view(r, 4:7:50) == view(r2, 4:7:50)
402+
end
403+
394404
@testset "OneToInf" begin
395405
r = OneToInf()
396406
@test !isempty(r)

0 commit comments

Comments
 (0)