diff --git a/test/choosetests.jl b/test/choosetests.jl new file mode 100644 index 0000000..ee68d50 --- /dev/null +++ b/test/choosetests.jl @@ -0,0 +1,67 @@ +# This file is a part of Julia. License is MIT: http://julialang.org/license + +@doc """ + +`tests, net_on = choosetests(choices)` selects a set of tests to be +run. `choices` should be a vector of test names; if empty or set to +`["all"]`, all tests are selected. + +This function also supports "test collections": specifically, "linalg" + refers to collections of tests in the correspondingly-named +directories. + +Upon return, `tests` is a vector of fully-expanded test names, and +`net_on` is true if networking is available (required for some tests). +""" -> +function choosetests(choices = []) + testnames = [ + "testing_testing" + ] + + if Base.USE_GPL_LIBS && 1 == 0 + testnames = [testnames, "fft", "dsp"; ] + end + + if isdir(joinpath(JULIA_HOME, Base.DOCDIR, "examples")) && 1 == 0 + push!(testnames, "examples") + end + + # parallel tests depend on other workers - do them last + #push!(testnames, "parallel") + + tests = (ARGS==["all"] || isempty(ARGS)) ? testnames : ARGS + + if "linalg" in tests + # specifically selected case + filter!(x -> x != "linalg", tests) + linalgtests = ["linalg1", "linalg2", "linalg3", "linalg4", + "linalg/lapack", "linalg/triangular", "linalg/tridiag", + "linalg/bidiag", "linalg/diagonal", + "linalg/pinv", "linalg/givens", "linalg/cholesky", "linalg/lu", + "linalg/symmetric"] + if Base.USE_GPL_LIBS + push!(linalgtests, "linalg/arnoldi") + end + prepend!(tests, linalgtests) + end + + net_required_for = [] + net_on = true + try + getipaddr() + catch + warn("Networking unavailable: Skipping tests [" * join(net_required_for, ", ") * "]") + net_on = false + end + + if ccall(:jl_running_on_valgrind,Cint,()) != 0 && "rounding" in tests + warn("Running under valgrind: Skipping rounding tests") + filter!(x -> x != "rounding", tests) + end + + if !net_on + filter!(x -> !(x in net_required_for), tests) + end + + tests, net_on +end diff --git a/test/runtests.jl b/test/runtests.jl new file mode 100644 index 0000000..a77d56a --- /dev/null +++ b/test/runtests.jl @@ -0,0 +1,19 @@ +# This file is a part of Julia. License is MIT: http://julialang.org/license + +include("choosetests.jl") +tests, net_on = choosetests(ARGS) +cd(dirname(@__FILE__)) do + n = 1 + if net_on + n = min(8, CPU_CORES, length(tests)) + n > 1 && addprocs(n; exeflags=`--check-bounds=yes`) + blas_set_num_threads(1) + end + + @everywhere include("testdefs.jl") + + reduce(propagate_errors, nothing, pmap(runtests, tests; err_retry=false, err_stop=true)) + + @unix_only n > 1 && rmprocs(workers(), waitfor=5.0) + println(" \033[32;1mSUCCESS\033[0m") +end diff --git a/test/testdefs.jl b/test/testdefs.jl new file mode 100644 index 0000000..e7ddcda --- /dev/null +++ b/test/testdefs.jl @@ -0,0 +1,23 @@ +# This file is a part of Julia. License is MIT: http://julialang.org/license + +using Base.Test + +function runtests(name) + @printf(" \033[1m*\033[0m \033[31m%-20s\033[0m", name) + tt = @elapsed Core.include(abspath("$name.jl")) + @printf(" in %6.2f seconds\n", tt) + nothing +end + +function propagate_errors(a,b) + if isa(a,Exception) + rethrow(a) + end + if isa(b,Exception) + rethrow(b) + end + nothing +end + +# looking in . messes things up badly +filter!(x->x!=".", LOAD_PATH) diff --git a/test/testing_testing.jl b/test/testing_testing.jl new file mode 100644 index 0000000..17b0a55 --- /dev/null +++ b/test/testing_testing.jl @@ -0,0 +1,5 @@ +# This file is a part of JuliaFEM. License is MIT: https://github.com/ovainola/JuliaFEM/blob/master/README.md + +using Base.Test + +@test 1 == 1