Skip to content

Commit bfd80f5

Browse files
ChrisRackauckas-ClaudeChrisRackauckasclaude
authored
Use SciMLTesting v1.2 folder-based run_tests (#54)
Replace the hand-written GROUP dispatcher in test/runtests.jl with the SciMLTesting v1.2 folder-discovery run_tests harness. The Core testsets are split into self-contained top-level files (fast_log2_tests.jl, fast_pow_tests.jl, other_ad_engines_tests.jl) and the Enzyme group moves to test/Enzyme/ (enzyme_forward_tests.jl, enzyme_reverse_tests.jl), run in the main test env to match the pre-conversion behavior. QA stays in test/qa/ with its env. Adds SciMLTesting + SafeTestsets to the root and qa test deps and drops Pkg (the harness owns Pkg ops). test_groups.toml is unchanged; GROUP=All still runs Core + Enzyme (QA excluded), matching the old dispatcher. Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent df74a77 commit bfd80f5

8 files changed

Lines changed: 68 additions & 78 deletions

Project.toml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ Measurements = "2.5"
3131
MonteCarloMeasurements = "1"
3232
Mooncake = "0.4, 0.5"
3333
ReverseDiff = "1.14"
34+
SafeTestsets = "0.1, 1"
35+
SciMLTesting = "1"
3436
Test = "1"
3537
Tracker = "0.2"
3638
julia = "1.10"
@@ -40,10 +42,11 @@ Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"
4042
EnzymeTestUtils = "12d8515a-0907-448a-8884-5fe00fdf1c5a"
4143
ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
4244
Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6"
43-
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
4445
ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
46+
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
47+
SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283"
4548
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
4649
Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"
4750

4851
[targets]
49-
test = ["Test", "Enzyme", "EnzymeTestUtils", "ForwardDiff", "Mooncake", "Pkg", "ReverseDiff", "Tracker"]
52+
test = ["Enzyme", "EnzymeTestUtils", "ForwardDiff", "Mooncake", "ReverseDiff", "SafeTestsets", "SciMLTesting", "Test", "Tracker"]
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using FastPower: fastpower
2+
using Enzyme, EnzymeTestUtils
3+
using Test
4+
5+
@testset for RT in (Duplicated, DuplicatedNoNeed),
6+
Tx in (Const, Duplicated),
7+
Ty in (Const, Duplicated)
8+
x = 1.0
9+
y = 0.5
10+
test_forward(fastpower, RT, (x, Tx), (y, Ty), atol = 1.0e-4, rtol = 1.0e-3)
11+
end
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using FastPower: fastpower
2+
using Enzyme, EnzymeTestUtils
3+
using Test
4+
5+
@testset for RT in (Active,), Tx in (Active, Const), Ty in (Active, Const)
6+
x = 1.0
7+
y = 0.5
8+
test_reverse(fastpower, RT, (x, Tx), (y, Ty), atol = 1.0e-4, rtol = 1.0e-3)
9+
end

test/fast_log2_tests.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
using FastPower: fastlog2
2+
using Test
3+
4+
for x in 0.001:0.001:1.2 # (0, 1+something] is the domain which a controller uses
5+
@test log2(x) fastlog2(Float32(x)) atol = 1.0e-3
6+
end

test/fast_pow_tests.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using FastPower: fastpower
2+
using Test
3+
4+
@test fastpower(1, 1) isa Float64
5+
@test fastpower(1.0, 1.0) isa Float64
6+
errors = [abs(^(x, y) - fastpower(x, y)) for x in 0.001:0.001:1, y in 0.08:0.001:0.5]
7+
@test maximum(errors) < 1.0e-4
8+
9+
errors = [abs(^(x, y) - fastpower(x, y)) for x in 0.001:0.001:1, y in 0.08:0.001:1000.0]
10+
@test maximum(errors) < 1.0e-3
11+
12+
errors = [abs(^(x, y) - fastpower(x, y)) for x in 0.001:0.001:100, y in 0.08:0.001:1.0]
13+
@test maximum(errors) < 1.0e-2

test/other_ad_engines_tests.jl

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using FastPower: fastpower
2+
using ForwardDiff, ReverseDiff, Tracker, Mooncake
3+
using Test
4+
5+
function mooncake_derivative(f, x)
6+
return Mooncake.value_and_gradient!!(Mooncake.build_rrule(f, x), f, x)[2][2]
7+
end
8+
9+
x = 1.5123233245141
10+
y = 0.22352354326
11+
@test ForwardDiff.derivative(x -> fastpower(x, x + y), x)
12+
ForwardDiff.derivative(x -> ^(x, x + y), x)
13+
@test Tracker.gradient(x -> fastpower(x, x + y), x)[1]
14+
Tracker.gradient(x -> ^(x, x + y), x)[1]
15+
@test ReverseDiff.gradient(x -> fastpower(x[1], x[1] + y), [x])[1]
16+
ReverseDiff.gradient(x -> ^(x[1], x[1] + y), [x])[1]
17+
@test mooncake_derivative(x -> fastpower(x, x + y), x)
18+
mooncake_derivative(x -> ^(x, x + y), x)

test/qa/Project.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
33
FastPower = "a4df4552-cc26-4903-aec0-212e50a0e84b"
44
JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b"
5-
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
5+
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
6+
SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283"
67
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
78

89
[sources]
@@ -11,5 +12,7 @@ FastPower = {path = "../.."}
1112
[compat]
1213
Aqua = "0.8"
1314
JET = "0.9,0.10,0.11"
15+
SafeTestsets = "0.1, 1"
16+
SciMLTesting = "1"
1417
Test = "1"
1518
julia = "1.10"

test/runtests.jl

Lines changed: 2 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,2 @@
1-
using Test
2-
using ForwardDiff, ReverseDiff, Tracker, Mooncake
3-
using Enzyme, EnzymeTestUtils
4-
5-
const GROUP = get(ENV, "GROUP", "All")
6-
7-
if GROUP == "QA"
8-
using Pkg
9-
Pkg.activate(joinpath(@__DIR__, "qa"))
10-
Pkg.instantiate()
11-
include(joinpath(@__DIR__, "qa", "qa.jl"))
12-
end
13-
14-
if GROUP == "All" || GROUP == "Core" || GROUP == "Enzyme"
15-
using FastPower
16-
using FastPower: fastlog2, fastpower
17-
end
18-
19-
if GROUP == "All" || GROUP == "Core"
20-
@testset "Fast log2" begin
21-
for x in 0.001:0.001:1.2 # (0, 1+something] is the domain which a controller uses
22-
@test log2(x) fastlog2(Float32(x)) atol = 1.0e-3
23-
end
24-
end
25-
26-
@testset "Fast pow" begin
27-
@test fastpower(1, 1) isa Float64
28-
@test fastpower(1.0, 1.0) isa Float64
29-
errors = [abs(^(x, y) - fastpower(x, y)) for x in 0.001:0.001:1, y in 0.08:0.001:0.5]
30-
@test maximum(errors) < 1.0e-4
31-
32-
errors = [abs(^(x, y) - fastpower(x, y)) for x in 0.001:0.001:1, y in 0.08:0.001:1000.0]
33-
@test maximum(errors) < 1.0e-3
34-
35-
errors = [abs(^(x, y) - fastpower(x, y)) for x in 0.001:0.001:100, y in 0.08:0.001:1.0]
36-
@test maximum(errors) < 1.0e-2
37-
end
38-
39-
function mooncake_derivative(f, x)
40-
return Mooncake.value_and_gradient!!(Mooncake.build_rrule(f, x), f, x)[2][2]
41-
end
42-
@testset "Fast pow - Other AD Engines" begin
43-
x = 1.5123233245141
44-
y = 0.22352354326
45-
@test ForwardDiff.derivative(x -> fastpower(x, x + y), x)
46-
ForwardDiff.derivative(x -> ^(x, x + y), x)
47-
@test Tracker.gradient(x -> fastpower(x, x + y), x)[1]
48-
Tracker.gradient(x -> ^(x, x + y), x)[1]
49-
@test ReverseDiff.gradient(x -> fastpower(x[1], x[1] + y), [x])[1]
50-
ReverseDiff.gradient(x -> ^(x[1], x[1] + y), [x])[1]
51-
@test mooncake_derivative(x -> fastpower(x, x + y), x)
52-
mooncake_derivative(x -> ^(x, x + y), x)
53-
end
54-
end
55-
56-
if GROUP == "All" || GROUP == "Enzyme"
57-
@testset "Fast pow - Enzyme forward rule" begin
58-
@testset for RT in (Duplicated, DuplicatedNoNeed),
59-
Tx in (Const, Duplicated),
60-
Ty in (Const, Duplicated)
61-
62-
x = 1.0
63-
y = 0.5
64-
test_forward(fastpower, RT, (x, Tx), (y, Ty), atol = 1.0e-4, rtol = 1.0e-3)
65-
end
66-
end
67-
68-
@testset "Fast pow - Enzyme reverse rule" begin
69-
@testset for RT in (Active,), Tx in (Active, Const), Ty in (Active, Const)
70-
x = 1.0
71-
y = 0.5
72-
test_reverse(fastpower, RT, (x, Tx), (y, Ty), atol = 1.0e-4, rtol = 1.0e-3)
73-
end
74-
end
75-
end
1+
using SciMLTesting
2+
run_tests()

0 commit comments

Comments
 (0)