Skip to content

Commit 5de2eeb

Browse files
committed
Add a precompilation workload
1 parent 69f2e7d commit 5de2eeb

File tree

3 files changed

+59
-0
lines changed

3 files changed

+59
-0
lines changed

Project.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ version = "0.3.3"
66
[deps]
77
Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b"
88
InlineTest = "bd334432-b1e7-49c7-a2dc-dd9149e4ebd6"
9+
PrecompileTools = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
910
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
1011
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
1112
Sockets = "6462fe0b-24de-5631-8697-dd941f90decc"
@@ -14,6 +15,7 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
1415
[compat]
1516
InlineTest = "=0.2.0"
1617
Revise = "3.1"
18+
PrecompileTools = "1.2.1"
1719
julia = "1"
1820

1921
[extras]

src/ReTest.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1413,6 +1413,11 @@ function process_args(@nospecialize(args);
14131413
# tests is passed to retest in order to run tests in its submodules
14141414
filter!(m -> isdefined(m, INLINE_TEST), modules)
14151415

1416+
# Remove the precompilation module if we're not precompiling
1417+
if ccall(:jl_generating_output, Cint, ()) == 0
1418+
filter!(m -> nameof(m) !== :_ReTestPrecompileTests, modules)
1419+
end
1420+
14161421
shuffle && shuffle!(modules)
14171422

14181423
########## process verbose
@@ -1749,4 +1754,6 @@ function runtests(tests::String="")
17491754
Pkg.test("ReTest", test_args=Vector{String}(split(tests)))
17501755
end
17511756

1757+
include("precompile.jl")
1758+
17521759
end # module ReTest

src/precompile.jl

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import PrecompileTools: @setup_workload, @compile_workload
2+
3+
module _ReTestPrecompile
4+
const x = 1
5+
end
6+
7+
module _ReTestPrecompileTests
8+
import .._ReTestPrecompile
9+
using ..ReTest
10+
11+
@testset "precompilation workload" begin
12+
@test _ReTestPrecompile.x == 1
13+
@test false
14+
end
15+
16+
end # _ReTestPrecompileTestsModule
17+
18+
19+
@setup_workload begin
20+
stderr_pipe = Pipe()
21+
stdout_pipe = Pipe()
22+
23+
@compile_workload begin
24+
try
25+
redirect_stdio(; stderr=stderr_pipe, stdout=stdout_pipe) do
26+
retest(_ReTestPrecompile, _ReTestPrecompileTests; recursive=false, stats=true, spin=true)
27+
end
28+
catch ex
29+
close(stderr_pipe.in)
30+
close(stdout_pipe.in)
31+
32+
if !(ex isa Test.TestSetException)
33+
stdout_str = read(stdout_pipe, String)
34+
stderr_str = read(stderr_pipe, String)
35+
36+
@error "Precompilation failed, this is the captured stdout ($(length(stdout_str)) chars):"
37+
println(stdout_str)
38+
39+
@error "And this is the captured stderr ($(length(stderr_str)) chars):"
40+
println(stderr_str)
41+
42+
rethrow()
43+
end
44+
finally
45+
empty!(ReTest.TESTED_MODULES)
46+
close(stderr_pipe)
47+
close(stdout_pipe)
48+
end
49+
end
50+
end

0 commit comments

Comments
 (0)