Skip to content

Commit e4199e2

Browse files
authored
Add similar(::Type{<:OffsetArray}, axes) (#264)
* Add similar(::Type{<:OffsetArray}, axes) * Add tests for size * Add test for a 2D array
1 parent 20deccb commit e4199e2

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

src/OffsetArrays.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,7 @@ function Base.similar(A::AbstractArray, ::Type{T}, shape::Tuple{OffsetAxisKnownL
320320
P = _similar_axes_or_length(A, T, new_shape, shape)
321321
return OffsetArray(P, map(_offset, axes(P), shape))
322322
end
323+
Base.similar(::Type{A}, sz::Tuple{Vararg{Int}}) where {A<:OffsetArray} = similar(Array{eltype(A)}, sz)
323324
function Base.similar(::Type{T}, shape::Tuple{OffsetAxisKnownLength,Vararg{OffsetAxisKnownLength}}) where {T<:AbstractArray}
324325
new_shape = map(_strip_IdOffsetRange, shape)
325326
P = _similar_axes_or_length(T, new_shape, shape)

test/runtests.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1679,6 +1679,19 @@ end
16791679
testsimilar(typeof(A), (:, :))
16801680
testsimilar(typeof(A), (:, 2))
16811681
testsimilar(typeof(A), (:, 1:3))
1682+
1683+
@testset "similar with OffsetArray type (issue #263)" begin
1684+
for i in Any[[1,2,3], 1:3, SVector{2,Int}(1,2), reshape(1:4, 2, 2)]
1685+
k = OffsetArray(i, map(x -> -2, size(i)))
1686+
j = similar(typeof(k), axes(k))
1687+
@test axes(j) == axes(k)
1688+
@test eltype(j) == eltype(k)
1689+
j = similar(typeof(k), size(k))
1690+
@test eltype(j) == eltype(k)
1691+
@test size(j) == size(k)
1692+
@test all(==(1), first.(axes(j)))
1693+
end
1694+
end
16821695
end
16831696

16841697
@testset "reshape" begin

0 commit comments

Comments
 (0)