diff --git a/Project.toml b/Project.toml index 1f12c7ba..6355850d 100644 --- a/Project.toml +++ b/Project.toml @@ -35,6 +35,7 @@ StaticArrays = "1.5" julia = "1.6" [extras] +Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" Calculus = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" DiffTests = "de460e47-3fe3-5279-bb4a-814414816d5d" InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240" @@ -43,4 +44,4 @@ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["Calculus", "DiffTests", "SparseArrays", "StaticArrays", "Test", "InteractiveUtils"] +test = ["Aqua", "Calculus", "DiffTests", "SparseArrays", "StaticArrays", "Test", "InteractiveUtils"] diff --git a/test/AquaTest.jl b/test/AquaTest.jl new file mode 100644 index 00000000..d22cf692 --- /dev/null +++ b/test/AquaTest.jl @@ -0,0 +1,30 @@ +using Test +using ForwardDiff +using Aqua + +@testset "Aqua tests (performance)" begin + # This tests that we don't accidentally run into + # https://github.com/JuliaLang/julia/issues/29393 + ua = Aqua.detect_unbound_args_recursively(ForwardDiff) + @test length(ua) == 6 + + # See: https://github.com/SciML/OrdinaryDiffEq.jl/issues/1750 + # Test that we're not introducing method ambiguities across deps + ambs = Aqua.detect_ambiguities(ForwardDiff; recursive = true) + pkg_match(pkgname, pkdir::Nothing) = false + pkg_match(pkgname, pkdir::AbstractString) = occursin(pkgname, pkdir) + filter!(x -> pkg_match("ForwardDiff", pkgdir(last(x).module)), ambs) + + @test length(ambs) == 0 +end + +@testset "Aqua tests (additional)" begin + Aqua.test_undefined_exports(ForwardDiff) + Aqua.test_stale_deps(ForwardDiff) + Aqua.test_deps_compat(ForwardDiff) + Aqua.test_project_extras(ForwardDiff) + Aqua.test_project_toml_formatting(ForwardDiff) + Aqua.test_piracy(ForwardDiff) +end + +nothing diff --git a/test/runtests.jl b/test/runtests.jl index e440af65..8f920c90 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -51,5 +51,10 @@ Random.seed!(SEED) t = @elapsed include("AllocationsTest.jl") println("##### done (took $t seconds).") end + @testset "Aqua" begin + println("##### Testing aqua...") + t = @elapsed include("AquaTest.jl") + println("##### done (took $t seconds).") + end println("##### Running all ForwardDiff tests took $(time() - t0) seconds.") end