diff --git a/.gitignore b/.gitignore index 340a88323..8aa929b1e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ docs/build/ docs/site/ benchmark/.results/* benchmark/.tune.jld +*.cov diff --git a/src/LightGraphs.jl b/src/LightGraphs.jl index d1126e960..438014bbc 100644 --- a/src/LightGraphs.jl +++ b/src/LightGraphs.jl @@ -18,7 +18,7 @@ import SparseArrays: blockdiag, sparse import Base: write, ==, <, *, ≈, convert, isless, issubset, union, intersect, reverse, reverse!, isassigned, getindex, setindex!, show, print, copy, in, sum, size, eltype, length, ndims, transpose, - ctranspose, join, start, next, done, eltype, get, Pair, Tuple, zero + ctranspose, join, iterate, eltype, get, Pair, Tuple, zero export diff --git a/src/SimpleGraphs/SimpleGraphs.jl b/src/SimpleGraphs/SimpleGraphs.jl index 9362337c2..c04bcc047 100644 --- a/src/SimpleGraphs/SimpleGraphs.jl +++ b/src/SimpleGraphs/SimpleGraphs.jl @@ -4,7 +4,7 @@ using SparseArrays using LinearAlgebra import Base: - eltype, show, ==, Pair, Tuple, copy, length, start, next, done, issubset, zero, in + eltype, show, ==, Pair, Tuple, copy, length, issubset, zero, in, iterate import LightGraphs: _NI, _insert_and_dedup!, AbstractGraph, AbstractEdge, AbstractEdgeIter, diff --git a/src/SimpleGraphs/simpleedgeiter.jl b/src/SimpleGraphs/simpleedgeiter.jl index daab36a24..e077ed66e 100644 --- a/src/SimpleGraphs/simpleedgeiter.jl +++ b/src/SimpleGraphs/simpleedgeiter.jl @@ -46,10 +46,17 @@ function edge_next(g::AbstractSimpleGraph, return e, SimpleEdgeIterState(zero(T), 1) end -start(eit::SimpleEdgeIter) = edge_start(eit.g) -done(eit::SimpleEdgeIter, state::SimpleEdgeIterState{T}) where T = state.s == zero(T) +function iterate(eit::SimpleEdgeIter{G}) where {G<:AbstractSimpleGraph} + state = edge_start(eit.g) + return iterate(eit, state) +end + +function iterate(eit::SimpleEdgeIter{G}, state::SimpleEdgeIterState{T}) where {T,G<:AbstractSimpleGraph{T}} + state.s == zero(T) && return nothing + return edge_next(eit.g, state) +end + length(eit::SimpleEdgeIter) = ne(eit.g) -next(eit::SimpleEdgeIter, state::SimpleEdgeIterState) = edge_next(eit.g, state) function _isequal(e1::SimpleEdgeIter, e2) k = 0 diff --git a/test/simplegraphs/simpleedgeiter.jl b/test/simplegraphs/simpleedgeiter.jl index 96bf24354..7e273138e 100644 --- a/test/simplegraphs/simpleedgeiter.jl +++ b/test/simplegraphs/simpleedgeiter.jl @@ -2,7 +2,9 @@ ga = @inferred(SimpleGraph(10, 20; seed=1)) gb = @inferred(SimpleGraph(10, 20; seed=1)) @test sprint(show, edges(ga)) == "SimpleEdgeIter 20" - @test sprint(show, start(edges(ga))) == "SimpleEdgeIterState [1, 1]" + # note: we don't get the first iterator state, + #since iterate returns the state after taking the first value + @test sprint(show, iterate(edges(ga))[2]) == "SimpleEdgeIterState [1, 2]" @test length(collect(edges(Graph(0, 0)))) == 0 @@ -46,10 +48,11 @@ end eit = edges(ga) - es = @inferred(start(eit)) + # @inferred not valid for new interface anymore (return type is a Union) + es = iterate(eit)[2] - @test es.s == 2 - @test es.di == 1 + @test es.s == 3 + @test es.di == 2 @test [e for e in eit] == [Edge(2, 3), Edge(3, 10), Edge(5, 10)] @@ -73,10 +76,10 @@ end eit = @inferred(edges(ga)) - es = @inferred(start(eit)) + es = iterate(eit)[2] @test es.s == 3 - @test es.di == 1 + @test es.di == 2 @test [e for e in eit] == [ SimpleEdge(3, 2), SimpleEdge(3, 10),