diff --git a/src/OffsetArrays.jl b/src/OffsetArrays.jl index a6f6553d..c19b4d40 100644 --- a/src/OffsetArrays.jl +++ b/src/OffsetArrays.jl @@ -234,7 +234,7 @@ Base.reshape(A::OffsetVector, ::Colon) = A Base.reshape(A::OffsetArray, inds::Union{Int,Colon}...) = reshape(parent(A), inds) Base.reshape(A::OffsetArray, inds::Tuple{Vararg{Union{Int,Colon}}}) = reshape(parent(A), inds) -function Base.similar(::Type{T}, shape::Tuple{OffsetAxis,Vararg{OffsetAxis}}) where {T<:AbstractArray} +function Base.similar(::Type{T}, shape::Tuple{OffsetAxisKnownLength,Vararg{OffsetAxisKnownLength}}) where {T<:AbstractArray} P = T(undef, map(_indexlength, shape)) OffsetArray(P, map(_offset, axes(P), shape)) end diff --git a/test/runtests.jl b/test/runtests.jl index 89ee52fe..284633f4 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -969,6 +969,22 @@ end @test_throws MethodError similar(A, (: ,2)) @test_throws MethodError similar(A, Float64, (: ,:)) @test_throws MethodError similar(A, Float64, (: ,2)) + + function testsimilar(args...) + try + similar(args...) + catch e + @test e isa MethodError + io = IOBuffer() + showerror(io, e) + s = split(String(take!(io)),'\n')[1] + @test occursin(repr(similar), s) + end + end + + testsimilar(typeof(A), (:, :)) + testsimilar(typeof(A), (:, 2)) + testsimilar(typeof(A), (:, 1:3)) end @testset "reshape" begin