diff --git a/src/macros.jl b/src/macros.jl index 4285073..d85e2af 100644 --- a/src/macros.jl +++ b/src/macros.jl @@ -172,7 +172,7 @@ Equivalent to calling `remotecall_eval(Main, procs, expr)`. """ macro everywhere(ex) procs = GlobalRef(@__MODULE__, :procs) - return esc(:(@everywhere $procs() $ex)) + return esc(:($(Distributed).@everywhere $procs() $ex)) end macro everywhere(procs, ex) diff --git a/src/pmap.jl b/src/pmap.jl index 35f23ac..77a59af 100644 --- a/src/pmap.jl +++ b/src/pmap.jl @@ -238,14 +238,11 @@ Return `head`: the first `n` elements of `c`; and `tail`: an iterator over the remaining elements. ```jldoctest -julia> a = 1:10 -1:10 - -julia> b, c = Base.head_and_tail(a, 3) -([1,2,3],Base.Iterators.Rest{UnitRange{Int64},Int64}(1:10,4)) +julia> b, c = Distributed.head_and_tail(1:10, 3) +([1, 2, 3], Base.Iterators.Rest{UnitRange{Int64},Int64}(1:10, 3)) julia> collect(c) -7-element Array{Any,1}: +7-element Array{Int64,1}: 4 5 6 @@ -268,7 +265,7 @@ function head_and_tail(c, n) i += 1 head[i] = y[1] end - return head, Iterators.rest(c, s) + return head, Iterators.rest(c, y[2]) end """ diff --git a/test/distributed_exec.jl b/test/distributed_exec.jl index 90ecb16..c00e8b0 100644 --- a/test/distributed_exec.jl +++ b/test/distributed_exec.jl @@ -1614,6 +1614,44 @@ for T in (UInt8, Int8, UInt16, Int16, UInt32, Int32, UInt64) @test n == 55 end +# issue #28966 +let code = """ + import Distributed + Distributed.addprocs(1) + Distributed.@everywhere f() = myid() + for w in Distributed.workers() + @assert Distributed.remotecall_fetch(f, w) == w + end + """ + @test success(`$(Base.julia_cmd()) --startup-file=no -e $code`) +end + +# PR 32431: tests for internal Distributed.head_and_tail +let (h, t) = Distributed.head_and_tail(1:10, 3) + @test h == 1:3 + @test collect(t) == 4:10 +end +let (h, t) = Distributed.head_and_tail(1:10, 0) + @test h == [] + @test collect(t) == 1:10 +end +let (h, t) = Distributed.head_and_tail(1:3, 5) + @test h == 1:3 + @test collect(t) == [] +end +let (h, t) = Distributed.head_and_tail(1:3, 3) + @test h == 1:3 + @test collect(t) == [] +end +let (h, t) = Distributed.head_and_tail(Int[], 3) + @test h == [] + @test collect(t) == [] +end +let (h, t) = Distributed.head_and_tail(Int[], 0) + @test h == [] + @test collect(t) == [] +end + # Run topology tests last after removing all workers, since a given # cluster at any time only supports a single topology. rmprocs(workers())