From 24188523c58ad3b501fee0644e7a6418a86d7e37 Mon Sep 17 00:00:00 2001 From: Christian Guinard <28689358+christiangnrd@users.noreply.github.com> Date: Sat, 26 Sep 2026 14:27:17 -0300 Subject: [PATCH 1/3] load_test_history only once --- src/ParallelTestRunner.jl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ParallelTestRunner.jl b/src/ParallelTestRunner.jl index 4f6105c..fc202b9 100644 --- a/src/ParallelTestRunner.jl +++ b/src/ParallelTestRunner.jl @@ -242,9 +242,11 @@ function runtests(mod::Module, args::ParsedArgs; # set-up # + + historical_durations, historical_failures = load_test_history(mod, history_key) + # list tests, if requested if args.list !== nothing - historical_durations, historical_failures = load_test_history(mod, history_key) sorted_tests = sort(collect(keys(testsuite))) name_align = isempty(sorted_tests) ? 0 : maximum(textwidth, sorted_tests) duration_strs = Dict( @@ -276,7 +278,6 @@ function runtests(mod::Module, args::ParsedArgs; # determine test order tests = collect(keys(testsuite)) Random.shuffle!(tests) - historical_durations, historical_failures = load_test_history(mod, history_key) get_historical_duration(test) = TestHistoryEntry(get(historical_durations, test, Inf), test in historical_failures) sort!(tests, by = x -> get_historical_duration(x), rev = true) From f49a22fd810878f23df6a5d1dfc3a08b90b48a94 Mon Sep 17 00:00:00 2001 From: Christian Guinard <28689358+christiangnrd@users.noreply.github.com> Date: Sat, 26 Sep 2026 14:39:26 -0300 Subject: [PATCH 2/3] Allow skipping passing tests --- src/ParallelTestRunner.jl | 9 +++++++++ src/args.jl | 4 +++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/ParallelTestRunner.jl b/src/ParallelTestRunner.jl index fc202b9..0dee6a6 100644 --- a/src/ParallelTestRunner.jl +++ b/src/ParallelTestRunner.jl @@ -272,6 +272,15 @@ function runtests(mod::Module, args::ParsedArgs; # filter tests filter_tests!(testsuite, args) + # remove tests that previously passed + if args.skippassed !== nothing + for test in keys(testsuite) + if test in keys(historical_durations) && test ∉ historical_failures + delete!(testsuite, test) + end + end + end + # filter serial list to only include tests that survived filtering serial = filter(t -> haskey(testsuite, t), serial) diff --git a/src/args.jl b/src/args.jl index 5f20c4b..002df33 100644 --- a/src/args.jl +++ b/src/args.jl @@ -63,6 +63,7 @@ struct ParsedArgs verbose::Union{Some{Nothing}, Nothing} quickfail::Union{Some{Nothing}, Nothing} list::Union{Some{Nothing}, Nothing} + skippassed::Union{Some{Nothing}, Nothing} custom::Dict{String,Any} @@ -145,6 +146,7 @@ function parse_args(args; custom::Array{String} = String[]) verbose = extract_flag!(args, "--verbose") quickfail = extract_flag!(args, "--quickfail") list = extract_flag!(args, "--list") + skippassed = extract_flag!(args, "--skippassed") # boolean flags don't take values for (flag, val) in (("--verbose", verbose), ("--quickfail", quickfail), ("--list", list)) @@ -164,7 +166,7 @@ function parse_args(args; custom::Array{String} = String[]) error("Unknown test options `$(join(optlike_args, " "))` (try `--help` for usage instructions)") end - return ParsedArgs(jobs, verbose, quickfail, list, custom_args, args) + return ParsedArgs(jobs, verbose, quickfail, list, skippassed, custom_args, args) end """ From 53772c8f6c945a25208be9c92341da10d02f202f Mon Sep 17 00:00:00 2001 From: Christian Guinard <28689358+christiangnrd@users.noreply.github.com> Date: Tue, 29 Sep 2026 14:34:20 -0300 Subject: [PATCH 3/3] Update src/args.jl --- src/args.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/args.jl b/src/args.jl index 002df33..24bc768 100644 --- a/src/args.jl +++ b/src/args.jl @@ -146,7 +146,7 @@ function parse_args(args; custom::Array{String} = String[]) verbose = extract_flag!(args, "--verbose") quickfail = extract_flag!(args, "--quickfail") list = extract_flag!(args, "--list") - skippassed = extract_flag!(args, "--skippassed") + skippassed = extract_flag!(args, "--skippassed") # Experimental # boolean flags don't take values for (flag, val) in (("--verbose", verbose), ("--quickfail", quickfail), ("--list", list))