Skip to content

Commit 5d6d757

Browse files
authored
Convert from StepRangeLen to StepRange (#57521)
Currently, one may convert from a `StepRangeLen` to a `StepRange` by using the fully parameterized constructor: ```julia julia> r = StepRangeLen(3, 1, 4) 3:1:6 julia> StepRange{Int,Int}(r) 3:1:6 ``` This PR adds a few other constructors that have fewer parameters specified. These parameters may be derived from the argument. After this PR, the following work: ```julia julia> StepRange(r) 3:1:6 julia> StepRange{Int32}(r) 3:1:6 julia> StepRange{Int32}(r) |> typeof StepRange{Int32, Int64} ```
1 parent f207224 commit 5d6d757

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

base/range.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1329,6 +1329,8 @@ StepRange{T1,T2}(r::AbstractRange) where {T1,T2} =
13291329
StepRange(r::AbstractUnitRange{T}) where {T} =
13301330
StepRange{T,T}(first(r), step(r), last(r))
13311331
(StepRange{T1,T2} where T1)(r::AbstractRange) where {T2} = StepRange{eltype(r),T2}(r)
1332+
StepRange(r::StepRangeLen) = StepRange{eltype(r)}(r)
1333+
StepRange{T}(r::StepRangeLen{<:Any,<:Any,S}) where {T,S} = StepRange{T,S}(r)
13321334

13331335
function promote_rule(::Type{StepRangeLen{T1,R1,S1,L1}},::Type{StepRangeLen{T2,R2,S2,L2}}) where {T1,T2,R1,R2,S1,S2,L1,L2}
13341336
R, S, L = promote_type(R1, R2), promote_type(S1, S2), promote_type(L1, L2)

test/ranges.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2786,3 +2786,20 @@ end
27862786
@test promote(MyUnitRange(2:3), Base.OneTo(3)) == (2:3, 1:3)
27872787
@test promote(MyUnitRange(UnitRange(3.0, 4.0)), Base.OneTo(3)) == (3.0:4.0, 1.0:3.0)
27882788
end
2789+
2790+
@testset "StepRange(::StepRangeLen)" begin
2791+
ind = StepRangeLen(2, -1, 2)
2792+
@test StepRange(ind) == ind
2793+
@test StepRange(ind) isa StepRange{eltype(ind), typeof(step(ind))}
2794+
@test StepRange{Int8}(ind) == ind
2795+
@test StepRange{Int8}(ind) isa StepRange{Int8}
2796+
@test StepRange{Int8,Int8}(ind) == ind
2797+
@test StepRange{Int8,Int8}(ind) isa StepRange{Int8,Int8}
2798+
2799+
r = StepRangeLen(3, 0, 4)
2800+
@test_throws "step cannot be zero" StepRange(r)
2801+
2802+
r = StepRangeLen(Date(2020,1,1), Day(1), 4)
2803+
@test StepRange(r) == r
2804+
@test StepRange(r) isa StepRange{Date,Day}
2805+
end

0 commit comments

Comments
 (0)