From d0ad5dc44e85222b956bcc5f9e72899ee39391d3 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sun, 14 Jun 2026 04:49:36 -0400 Subject: [PATCH] Canonicalize tests to @safetestset for module isolation Convert the five independent top-level @testset units in test/runtests.jl into @safetestset blocks so each runs in its own module, matching the canonical OrdinaryDiffEq structure (test isolation + world-age safety). Each unit now carries the using/import lines its body needs; the file-scope mooncake_derivative helper moves inside the unit that uses it. Test logic, assertions, and counts are unchanged. Add SafeTestsets to the test deps (compat, extras, targets.test). Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- Project.toml | 4 +++- test/runtests.jl | 41 ++++++++++++++++++++++++++++------------- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/Project.toml b/Project.toml index 074422c..665f490 100644 --- a/Project.toml +++ b/Project.toml @@ -30,6 +30,7 @@ Measurements = "2" MonteCarloMeasurements = "1" Mooncake = "0.4" ReverseDiff = "1" +SafeTestsets = "0.1, 1" Tracker = "0.2" julia = "1.10" @@ -39,8 +40,9 @@ EnzymeTestUtils = "12d8515a-0907-448a-8884-5fe00fdf1c5a" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" +SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["Test", "Enzyme", "EnzymeTestUtils", "ForwardDiff", "Mooncake", "ReverseDiff", "Tracker"] +test = ["Test", "Enzyme", "EnzymeTestUtils", "ForwardDiff", "Mooncake", "ReverseDiff", "Tracker", "SafeTestsets"] diff --git a/test/runtests.jl b/test/runtests.jl index b391085..3cd62d9 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,16 +1,18 @@ -using FastPower -using FastPower: fastlog2, fastpower -using Enzyme, EnzymeTestUtils -using ForwardDiff, ReverseDiff, Tracker, Mooncake -using Test +using SafeTestsets, Test + +@safetestset "Fast log2" begin + using FastPower: fastlog2 + using Test -@testset "Fast log2" begin for x in 0.001:0.001:1.2 # (0, 1+something] is the domain which a controller uses @test log2(x)≈fastlog2(Float32(x)) atol=1e-3 end end -@testset "Fast pow" begin +@safetestset "Fast pow" begin + using FastPower: fastpower + using Test + @test fastpower(1, 1) isa Float64 @test fastpower(1.0, 1.0) isa Float64 errors = [abs(^(x, y) - fastpower(x, y)) for x in 0.001:0.001:1, y in 0.08:0.001:0.5] @@ -23,7 +25,11 @@ end @test maximum(errors) < 1e-2 end -@testset "Fast pow - Enzyme forward rule" begin +@safetestset "Fast pow - Enzyme forward rule" begin + using FastPower: fastpower + using Enzyme, EnzymeTestUtils + using Test + @testset for RT in (Duplicated, DuplicatedNoNeed), Tx in (Const, Duplicated), Ty in (Const, Duplicated) @@ -33,7 +39,11 @@ end end end -@testset "Fast pow - Enzyme reverse rule" begin +@safetestset "Fast pow - Enzyme reverse rule" begin + using FastPower: fastpower + using Enzyme, EnzymeTestUtils + using Test + @testset for RT in (Active,), Tx in (Active, Const), Ty in (Active, Const) x = 1.0 y = 0.5 @@ -41,10 +51,15 @@ end end end -function mooncake_derivative(f, x) - Mooncake.value_and_gradient!!(Mooncake.build_rrule(f, x), f, x)[2][2] -end -@testset "Fast pow - Other AD Engines" begin +@safetestset "Fast pow - Other AD Engines" begin + using FastPower: fastpower + using ForwardDiff, ReverseDiff, Tracker, Mooncake + using Test + + function mooncake_derivative(f, x) + Mooncake.value_and_gradient!!(Mooncake.build_rrule(f, x), f, x)[2][2] + end + x = 1.5123233245141 y = 0.22352354326 @test ForwardDiff.derivative(x -> fastpower(x, x + y), x) ≈