Skip to content

Commit abace11

Browse files
committed
add more test cases for OffsetArray constructors
1 parent fe74f25 commit abace11

File tree

2 files changed

+280
-174
lines changed

2 files changed

+280
-174
lines changed

src/OffsetArrays.jl

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ include("utils.jl")
1414

1515
# Technically we know the length of CartesianIndices but we need to convert it first, so here we
1616
# don't put it in OffsetAxisKnownLength.
17-
const OffsetAxisKnownLength = Union{Integer, UnitRange, Base.OneTo, IdentityUnitRange, IdOffsetRange}
17+
# TODO: add CartesianIndices to OffsetAxisKnownLength
18+
const OffsetAxisKnownLength = Union{Integer, AbstractUnitRange, IdOffsetRange}
1819
const OffsetAxis = Union{OffsetAxisKnownLength, CartesianIndices, Colon}
1920
const ArrayInitializer = Union{UndefInitializer, Missing, Nothing}
2021

@@ -92,7 +93,7 @@ end
9293
for FT in (:OffsetArray, :OffsetVector, :OffsetMatrix)
9394
# The only route out to inner constructor
9495
@eval function $FT(A::AbstractArray{T}, offsets::NTuple{N, Integer}) where {T, N}
95-
ndims(A) == N || throw(DimensionMismatch("The number of offsets should equal ndims(A) = $(ndims(A))"))
96+
ndims(A) == N || throw(DimensionMismatch("The number of offsets $(N) should equal ndims(A) = $(ndims(A))"))
9697
OffsetArray{T, ndims(A), typeof(A)}(A, offsets)
9798
end
9899
# nested OffsetArrays
@@ -115,32 +116,25 @@ for FT in (:OffsetArray, :OffsetVector, :OffsetMatrix)
115116
end
116117

117118
# array initialization
118-
OffsetArray{T,N}(init::ArrayInitializer, inds::NTuple{N, OffsetAxisKnownLength}) where {T,N} =
119-
OffsetArray(Array{T,N}(init, map(_indexlength, inds)), map(_indexoffset, inds))
120-
OffsetArray{T,N}(init::ArrayInitializer, inds::Vararg{OffsetAxisKnownLength,N}) where {T,N} = OffsetArray{T,N}(init, inds)
121-
function OffsetArray{T, N}(init::ArrayInitializer, inds::NTuple{N, Union{OffsetAxisKnownLength, CartesianIndices}}) where {T, N}
122-
OffsetArray{T, N}(init, _expandCartesianIndices(inds))
119+
function OffsetArray{T,N}(init::ArrayInitializer, inds::NTuple{N, OffsetAxisKnownLength}) where {T,N}
120+
AA = Array{T,N}(init, map(_indexlength, inds))
121+
OffsetArray{T, N, typeof(AA)}(AA, map(_indexoffset, inds))
123122
end
124-
function OffsetArray{T, N}(init::ArrayInitializer, inds::Vararg{Union{OffsetAxisKnownLength, CartesianIndices}}) where {T, N}
125-
OffsetArray{T, N}(init, inds)
126-
end
127-
function OffsetArray{T, N}(init::ArrayInitializer, inds::CartesianIndices{N}) where {T,N}
128-
OffsetArray{T, N}(init, convert(Tuple{Vararg{AbstractUnitRange{Int}}}, inds))
123+
function OffsetArray{T, N}(init::ArrayInitializer, inds::NTuple{NT, Union{OffsetAxisKnownLength, CartesianIndices}}) where {T, N, NT}
124+
# NT is probably not the actual dimension of the array; CartesianIndices might contain multiple dimensions
125+
indsN = _expandCartesianIndices(inds)
126+
length(indsN) == N || throw(DimensionMismatch("The number of offsets $(length(indsN)) should equal ndims(A) = $N"))
127+
OffsetArray{T, N}(init, indsN)
129128
end
129+
OffsetArray{T,N}(init::ArrayInitializer, inds::Union{OffsetAxisKnownLength, CartesianIndices}...) where {T,N} = OffsetArray{T,N}(init, inds)
130130

131131
OffsetArray{T}(init::ArrayInitializer, inds::NTuple{N, OffsetAxisKnownLength}) where {T,N} = OffsetArray{T,N}(init, inds)
132-
OffsetArray{T}(init::ArrayInitializer, inds::Vararg{OffsetAxisKnownLength,N}) where {T,N} = OffsetArray{T,N}(init, inds)
133132
function OffsetArray{T}(init::ArrayInitializer, inds::NTuple{N, Union{OffsetAxisKnownLength, CartesianIndices}}) where {T, N}
134133
# N is probably not the actual dimension of the array; CartesianIndices might contain multiple dimensions
135134
indsN = _expandCartesianIndices(inds)
136135
OffsetArray{T, length(indsN)}(init, indsN)
137136
end
138-
function OffsetArray{T}(init::ArrayInitializer, inds::Vararg{Union{OffsetAxisKnownLength, CartesianIndices}, N}) where {T, N}
139-
OffsetArray{T}(init, inds)
140-
end
141-
function OffsetArray{T}(init::ArrayInitializer, inds::CartesianIndices{N}) where {T,N}
142-
OffsetArray{T, N}(init, convert(Tuple{Vararg{AbstractUnitRange{Int}}}, inds))
143-
end
137+
OffsetArray{T}(init::ArrayInitializer, inds::Union{OffsetAxisKnownLength, CartesianIndices}...) where {T} = OffsetArray{T}(init, inds)
144138

145139
Base.IndexStyle(::Type{OA}) where {OA<:OffsetArray} = IndexStyle(parenttype(OA))
146140
parenttype(::Type{OffsetArray{T,N,AA}}) where {T,N,AA} = AA

0 commit comments

Comments
 (0)