diff --git a/Project.toml b/Project.toml index edfb55d9..d2bc4d2a 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "ForwardDiff" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "0.10.19" +version = "0.10.20" [deps] CommonSubexpressions = "bbf7d656-a473-5ed7-a52c-81e309532950" diff --git a/src/dual.jl b/src/dual.jl index 81745f07..15499020 100644 --- a/src/dual.jl +++ b/src/dual.jl @@ -383,6 +383,10 @@ Base.convert(::Type{D}, d::D) where {D<:Dual} = d Base.float(d::Dual{T,V,N}) where {T,V,N} = convert(Dual{T,promote_type(V, Float16),N}, d) Base.AbstractFloat(d::Dual{T,V,N}) where {T,V,N} = convert(Dual{T,promote_type(V, Float16),N}, d) +for F in (:Float16, :Float32, :Float64) + @eval @inline Base.$F(d::Dual{T,V,N}) where {T,V,N} = convert(Dual{T,promote_type(V, $F),N}, d) +end + ################################### # General Mathematical Operations # ################################### diff --git a/test/DerivativeTest.jl b/test/DerivativeTest.jl index f5645a7e..c309cded 100644 --- a/test/DerivativeTest.jl +++ b/test/DerivativeTest.jl @@ -100,4 +100,8 @@ end @test_throws DimensionMismatch ForwardDiff.derivative(sum, fill(2pi, 3)) end +@testset "function that calls a floating point constructor" begin + @test ForwardDiff.derivative(x->2*Float32(x), 3) === 2f0 +end + end # module diff --git a/test/DualTest.jl b/test/DualTest.jl index 285fe3ab..365a399c 100644 --- a/test/DualTest.jl +++ b/test/DualTest.jl @@ -517,6 +517,12 @@ end @test length(UnitRange(Dual(1.5), Dual(3.5))) == 3 @test length(UnitRange(Dual(1.5,1), Dual(3.5,3))) == 3 end + +@testset "Float" begin + for F in (Float16, Float32, Float64) + @test F(Dual(3, 5)) == Dual(F(3), F(5)) + end +end if VERSION >= v"1.6.0-rc1" @testset "@printf" begin