Skip to content

Commit 14ba473

Browse files
committed
Fix ranges of CartesianIndexes
1 parent e37e290 commit 14ba473

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

base/multidimensional.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ module IteratorsMD
6868

6969
CartesianIndex(index::NTuple{N,Integer}) where {N} = CartesianIndex{N}(index)
7070
CartesianIndex(index::Integer...) = CartesianIndex(index)
71+
CartesianIndex{N}(c::CartesianIndex{N}) where {N} = c
7172
CartesianIndex{N}(index::Vararg{Integer,N}) where {N} = CartesianIndex{N}(index)
7273
# Allow passing tuples smaller than N
7374
CartesianIndex{N}(index::Tuple) where {N} = CartesianIndex{N}(fill_to_length(index, 1, Val(N)))

base/range.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,13 +170,13 @@ range_stop(stop::Integer) = range_length(stop)
170170
# Stop and length as the only argument
171171
range_stop_length(a::Real, len::Integer) = UnitRange{typeof(a)}(oftype(a, a-len+1), a)
172172
range_stop_length(a::AbstractFloat, len::Integer) = range_step_stop_length(oftype(a, 1), a, len)
173-
range_stop_length(a, len::Integer) = range_step_stop_length(oftype(a-a, 1), a, len)
173+
range_stop_length(a, len::Integer) = range_step_stop_length(oftype(a-a, oneunit(a)), a, len)
174174

175175
range_step_stop_length(step, stop, length) = reverse(range_start_step_length(stop, -step, length))
176176

177177
range_start_length(a::Real, len::Integer) = UnitRange{typeof(a)}(a, oftype(a, a+len-1))
178178
range_start_length(a::AbstractFloat, len::Integer) = range_start_step_length(a, oftype(a, 1), len)
179-
range_start_length(a, len::Integer) = range_start_step_length(a, oftype(a-a, 1), len)
179+
range_start_length(a, len::Integer) = range_start_step_length(a, oftype(a-a, oneunit(a)), len)
180180

181181
range_start_stop(start, stop) = start:stop
182182

test/ranges.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2112,3 +2112,13 @@ end
21122112
@test length(range(1, 100, length=big(100)^100)) == big(100)^100
21132113
@test length(range(big(1), big(100)^100, length=big(100)^100)) == big(100)^100
21142114
@test length(0 * (1:big(100)^100)) == big(100)^100
2115+
2116+
@testset "ranges of CartesianIndexes" begin
2117+
a = CartesianIndex(1,1)
2118+
r1 = range(a, step = CartesianIndex(2,3), length = 3)
2119+
r2 = StepRangeLen(CartesianIndex(1,1), CartesianIndex(2,3), 3)
2120+
@test r1 == r2
2121+
2122+
@test range(a, length = 4) == StepRangeLen(a, a, 4)
2123+
@test range(stop = a, length = 4) == StepRangeLen(-2a, a, 4)
2124+
end

0 commit comments

Comments
 (0)