From ef293c11ca7c4b7fd29259e4fb50a2a0f726c5e5 Mon Sep 17 00:00:00 2001 From: Sebastian Stock <42280794+sostock@users.noreply.github.com> Date: Thu, 26 Mar 2020 19:31:43 +0100 Subject: [PATCH] eltype-preserving indexing into LinRange --- base/range.jl | 4 ++-- test/ranges.jl | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/base/range.jl b/base/range.jl index c836d94fe3a92..cabd16c61e3e8 100644 --- a/base/range.jl +++ b/base/range.jl @@ -727,12 +727,12 @@ function getindex(r::StepRangeLen{T}, s::OrdinalRange{<:Integer}) where {T} return StepRangeLen{T}(ref, r.step*step(s), length(s), offset) end -function getindex(r::LinRange, s::OrdinalRange{<:Integer}) +function getindex(r::LinRange{T}, s::OrdinalRange{<:Integer}) where {T} @_inline_meta @boundscheck checkbounds(r, s) vfirst = unsafe_getindex(r, first(s)) vlast = unsafe_getindex(r, last(s)) - return LinRange(vfirst, vlast, length(s)) + return LinRange{T}(vfirst, vlast, length(s)) end show(io::IO, r::AbstractRange) = print(io, repr(first(r)), ':', repr(step(r)), ':', repr(last(r))) diff --git a/test/ranges.jl b/test/ranges.jl index 988af1c7c2910..a2196cf549d67 100644 --- a/test/ranges.jl +++ b/test/ranges.jl @@ -1581,3 +1581,9 @@ end @test step(r) === 2 @test collect(r) == ['a','c','e','g'] end + +@testset "Return type of indexing with ranges" begin + for T = (Base.OneTo{Int}, UnitRange{Int}, StepRange{Int,Int}, StepRangeLen{Int}, LinRange{Int}) + @test eltype(T(1:5)) === eltype(T(1:5)[1:2]) + end +end