forked from JuliaLang/julia
-
Notifications
You must be signed in to change notification settings - Fork 0
/
runtests.jl
74 lines (65 loc) · 2.37 KB
/
runtests.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# This file is a part of Julia. License is MIT: http://julialang.org/license
include("choosetests.jl")
tests, net_on = choosetests(ARGS)
tests = unique(tests)
# Base.compile only works from node 1, so compile test is handled specially
compile_test = "compile" in tests
if compile_test
splice!(tests, findfirst(tests, "compile"))
end
cd(dirname(@__FILE__)) do
n = 1
if net_on
n = min(8, CPU_CORES, length(tests))
n > 1 && addprocs(n; exeflags=`--check-bounds=yes --depwarn=error`)
blas_set_num_threads(1)
end
@everywhere include("testdefs.jl")
results=[]
if haskey(ENV, "JULIA_TEST_MAXRSS_MB")
max_worker_rss = parse(Int, ENV["JULIA_TEST_MAXRSS_MB"]) * 2^20
else
max_worker_rss = typemax(Csize_t)
end
@sync begin
for p in workers()
@async begin
while length(tests) > 0
test = shift!(tests)
local resp
try
resp = remotecall_fetch(p, t -> runtests(t), test)
catch e
resp = e
end
push!(results, (test, resp))
if (isa(resp, Integer) && (resp > max_worker_rss)) || isa(resp, Exception)
if n > 1
rmprocs(p, waitfor=0.5)
p = addprocs(1; exeflags=`--check-bounds=yes --depwarn=error`)[1]
remotecall_fetch(p, ()->include("testdefs.jl"))
else
# single process testing, bail if mem limit reached, or, on an exception.
isa(resp, Exception) ? rethrow(resp) : error("Halting tests. Memory limit reached : $resp > $max_worker_rss")
end
end
end
end
end
end
errors = filter(x->isa(x[2], Exception), results)
if length(errors) > 0
for err in errors
println("Exception running test $(err[1]) :")
showerror(STDERR, err[2])
println()
end
error("Some tests exited with errors.")
end
if compile_test
n > 1 && print("\tFrom worker 1:\t")
runtests("compile")
end
@unix_only n > 1 && rmprocs(workers(), waitfor=5.0)
println(" \033[32;1mSUCCESS\033[0m")
end