Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ Measurements = "2.5"
MonteCarloMeasurements = "1"
Mooncake = "0.4, 0.5"
ReverseDiff = "1.14"
SafeTestsets = "0.1, 1"
SciMLTesting = "1"
Test = "1"
Tracker = "0.2"
julia = "1.10"
Expand All @@ -40,10 +42,11 @@ Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"
EnzymeTestUtils = "12d8515a-0907-448a-8884-5fe00fdf1c5a"
ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6"
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"

[targets]
test = ["Test", "Enzyme", "EnzymeTestUtils", "ForwardDiff", "Mooncake", "Pkg", "ReverseDiff", "Tracker"]
test = ["Enzyme", "EnzymeTestUtils", "ForwardDiff", "Mooncake", "ReverseDiff", "SafeTestsets", "SciMLTesting", "Test", "Tracker"]
11 changes: 11 additions & 0 deletions test/Enzyme/enzyme_forward_tests.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using FastPower: fastpower
using Enzyme, EnzymeTestUtils
using Test

@testset for RT in (Duplicated, DuplicatedNoNeed),
Tx in (Const, Duplicated),
Ty in (Const, Duplicated)
x = 1.0
y = 0.5
test_forward(fastpower, RT, (x, Tx), (y, Ty), atol = 1.0e-4, rtol = 1.0e-3)
end
9 changes: 9 additions & 0 deletions test/Enzyme/enzyme_reverse_tests.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
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
test_reverse(fastpower, RT, (x, Tx), (y, Ty), atol = 1.0e-4, rtol = 1.0e-3)
end
6 changes: 6 additions & 0 deletions test/fast_log2_tests.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
using FastPower: fastlog2
using Test

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 = 1.0e-3
end
13 changes: 13 additions & 0 deletions test/fast_pow_tests.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
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]
@test maximum(errors) < 1.0e-4

errors = [abs(^(x, y) - fastpower(x, y)) for x in 0.001:0.001:1, y in 0.08:0.001:1000.0]
@test maximum(errors) < 1.0e-3

errors = [abs(^(x, y) - fastpower(x, y)) for x in 0.001:0.001:100, y in 0.08:0.001:1.0]
@test maximum(errors) < 1.0e-2
18 changes: 18 additions & 0 deletions test/other_ad_engines_tests.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using FastPower: fastpower
using ForwardDiff, ReverseDiff, Tracker, Mooncake
using Test

function mooncake_derivative(f, x)
return 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) ≈
ForwardDiff.derivative(x -> ^(x, x + y), x)
@test Tracker.gradient(x -> fastpower(x, x + y), x)[1] ≈
Tracker.gradient(x -> ^(x, x + y), x)[1]
@test ReverseDiff.gradient(x -> fastpower(x[1], x[1] + y), [x])[1] ≈
ReverseDiff.gradient(x -> ^(x[1], x[1] + y), [x])[1]
@test mooncake_derivative(x -> fastpower(x, x + y), x) ≈
mooncake_derivative(x -> ^(x, x + y), x)
5 changes: 4 additions & 1 deletion test/qa/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
FastPower = "a4df4552-cc26-4903-aec0-212e50a0e84b"
JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b"
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[sources]
Expand All @@ -11,5 +12,7 @@ FastPower = {path = "../.."}
[compat]
Aqua = "0.8"
JET = "0.9,0.10,0.11"
SafeTestsets = "0.1, 1"
SciMLTesting = "1"
Test = "1"
julia = "1.10"
77 changes: 2 additions & 75 deletions test/runtests.jl
Original file line number Diff line number Diff line change
@@ -1,75 +1,2 @@
using Test
using ForwardDiff, ReverseDiff, Tracker, Mooncake
using Enzyme, EnzymeTestUtils

const GROUP = get(ENV, "GROUP", "All")

if GROUP == "QA"
using Pkg
Pkg.activate(joinpath(@__DIR__, "qa"))
Pkg.instantiate()
include(joinpath(@__DIR__, "qa", "qa.jl"))
end

if GROUP == "All" || GROUP == "Core" || GROUP == "Enzyme"
using FastPower
using FastPower: fastlog2, fastpower
end

if GROUP == "All" || GROUP == "Core"
@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 = 1.0e-3
end
end

@testset "Fast pow" begin
@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]
@test maximum(errors) < 1.0e-4

errors = [abs(^(x, y) - fastpower(x, y)) for x in 0.001:0.001:1, y in 0.08:0.001:1000.0]
@test maximum(errors) < 1.0e-3

errors = [abs(^(x, y) - fastpower(x, y)) for x in 0.001:0.001:100, y in 0.08:0.001:1.0]
@test maximum(errors) < 1.0e-2
end

function mooncake_derivative(f, x)
return Mooncake.value_and_gradient!!(Mooncake.build_rrule(f, x), f, x)[2][2]
end
@testset "Fast pow - Other AD Engines" begin
x = 1.5123233245141
y = 0.22352354326
@test ForwardDiff.derivative(x -> fastpower(x, x + y), x) ≈
ForwardDiff.derivative(x -> ^(x, x + y), x)
@test Tracker.gradient(x -> fastpower(x, x + y), x)[1] ≈
Tracker.gradient(x -> ^(x, x + y), x)[1]
@test ReverseDiff.gradient(x -> fastpower(x[1], x[1] + y), [x])[1] ≈
ReverseDiff.gradient(x -> ^(x[1], x[1] + y), [x])[1]
@test mooncake_derivative(x -> fastpower(x, x + y), x) ≈
mooncake_derivative(x -> ^(x, x + y), x)
end
end

if GROUP == "All" || GROUP == "Enzyme"
@testset "Fast pow - Enzyme forward rule" begin
@testset for RT in (Duplicated, DuplicatedNoNeed),
Tx in (Const, Duplicated),
Ty in (Const, Duplicated)

x = 1.0
y = 0.5
test_forward(fastpower, RT, (x, Tx), (y, Ty), atol = 1.0e-4, rtol = 1.0e-3)
end
end

@testset "Fast pow - Enzyme reverse rule" begin
@testset for RT in (Active,), Tx in (Active, Const), Ty in (Active, Const)
x = 1.0
y = 0.5
test_reverse(fastpower, RT, (x, Tx), (y, Ty), atol = 1.0e-4, rtol = 1.0e-3)
end
end
end
using SciMLTesting
run_tests()
Loading