Skip to content

Commit c0947d3

Browse files
authored
specialize iterate (#21)
1 parent 8eec8a8 commit c0947d3

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

src/ZeroDimensionalArrays.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,13 @@ function Base.only(a::ZeroDimensionalArray)
7575
a[]
7676
end
7777

78+
function Base.iterate(a::ZeroDimensionalArray)
79+
(a[], nothing)
80+
end
81+
Base.@nospecializeinfer function Base.iterate((@nospecialize a::ZeroDimensionalArray), @nospecialize state::Any)
82+
nothing
83+
end
84+
7885
function construct_given_eltype(::Type{Arr}, ::Type{T}, v) where {Arr <: ZeroDimensionalArray, T}
7986
c = type_to_constructor_function(Arr)
8087
c(T, v)

test/runtests.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ using Aqua: Aqua
2727
@test @inferred isassigned(Arr(0.3))
2828
@test @inferred isassigned(Arr(0.3), 1)
2929
@test !(isassigned(Arr(0.3), 2))
30+
@test (@inferred iterate(Arr(0.3))) isa Tuple{Float64, Any}
31+
@test 0.3 === first(iterate(Arr(0.3)))
32+
@test let a = Arr(0.3)
33+
nothing === @inferred iterate(a, last(iterate(a)))
34+
end
35+
@test nothing === @inferred iterate(Arr(0.3), nothing)
3036
@test (@inferred similar(Arr(0.3))) isa Box{Float64}
3137
@test (@inferred similar(Arr(0.3), Float32)) isa Box{Float32}
3238
@test (@inferred copy(Arr(0.3))) isa Arr{Float64}

0 commit comments

Comments
 (0)