Skip to content

Commit

Permalink
Merge 850b465 into 50f39be
Browse files Browse the repository at this point in the history
  • Loading branch information
ChrisRackauckas committed Jan 18, 2019
2 parents 50f39be + 850b465 commit 1bfb710
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 8 deletions.
7 changes: 5 additions & 2 deletions src/dual.jl
Original file line number Diff line number Diff line change
Expand Up @@ -281,10 +281,13 @@ end
@inline Base.one(d::Dual) = one(typeof(d))
@inline Base.one(::Type{Dual{T,V,N}}) where {T,V,N} = Dual{T}(one(V), zero(Partials{N,V}))

@inline Random.rand(d::Dual) = rand(typeof(d))
@inline Random.rand(rng::AbstractRNG, d::Dual) = rand(rng, value(d))
@inline Random.rand(::Type{Dual{T,V,N}}) where {T,V,N} = Dual{T}(rand(V), zero(Partials{N,V}))
@inline Random.rand(rng::AbstractRNG, d::Dual) = rand(rng, typeof(d))
@inline Random.rand(rng::AbstractRNG, ::Type{Dual{T,V,N}}) where {T,V,N} = Dual{T}(rand(rng, V), zero(Partials{N,V}))
@inline Random.randn(::Type{Dual{T,V,N}}) where {T,V,N} = Dual{T}(randn(V), zero(Partials{N,V}))
@inline Random.randn(rng::AbstractRNG, ::Type{Dual{T,V,N}}) where {T,V,N} = Dual{T}(randn(rng, V), zero(Partials{N,V}))
@inline Random.randexp(::Type{Dual{T,V,N}}) where {T,V,N} = Dual{T}(randexp(V), zero(Partials{N,V}))
@inline Random.randexp(rng::AbstractRNG, ::Type{Dual{T,V,N}}) where {T,V,N} = Dual{T}(randexp(rng, V), zero(Partials{N,V}))

# Predicates #
#------------#
Expand Down
19 changes: 13 additions & 6 deletions test/DualTest.jl
Original file line number Diff line number Diff line change
Expand Up @@ -170,21 +170,28 @@ for N in (0,3), M in (0,4), V in (Int, Float32)
@test one(NESTED_FDNUM) === Dual{TestTag()}(Dual{TestTag()}(one(PRIMAL), zero(M_PARTIALS)), zero(NESTED_PARTIALS))
@test one(typeof(NESTED_FDNUM)) === Dual{TestTag()}(Dual{TestTag()}(one(V), zero(Partials{M,V})), zero(Partials{N,Dual{TestTag(),V,M}}))

@test rand(samerng(), FDNUM) === Dual{TestTag()}(rand(samerng(), V), zero(PARTIALS))
@test rand(samerng(), typeof(FDNUM)) === Dual{TestTag()}(rand(samerng(), V), zero(Partials{N,V}))
@test rand(samerng(), NESTED_FDNUM) === Dual{TestTag()}(Dual{TestTag()}(rand(samerng(), V), zero(M_PARTIALS)), zero(NESTED_PARTIALS))
@test rand(samerng(), typeof(NESTED_FDNUM)) === Dual{TestTag()}(Dual{TestTag()}(rand(samerng(), V), zero(Partials{M,V})), zero(Partials{N,Dual{TestTag(),V,M}}))
if V <: Integer
@test rand(samerng(), FDNUM) == rand(samerng(), value(FDNUM))
@test rand(samerng(), NESTED_FDNUM) == rand(samerng(), value(NESTED_FDNUM))
elseif V <: AbstractFloat
@test rand(samerng(), typeof(FDNUM)) === Dual{TestTag()}(rand(samerng(), V), zero(Partials{N,V}))
@test rand(samerng(), typeof(NESTED_FDNUM)) === Dual{TestTag()}(Dual{TestTag()}(rand(samerng(), V), zero(Partials{M,V})), zero(Partials{N,Dual{TestTag(),V,M}}))
@test randn(samerng(), typeof(FDNUM)) === Dual{TestTag()}(randn(samerng(), V), zero(Partials{N,V}))
@test randn(samerng(), typeof(NESTED_FDNUM)) === Dual{TestTag()}(Dual{TestTag()}(randn(samerng(), V), zero(Partials{M,V})),
zero(Partials{N,Dual{TestTag(),V,M}}))
@test randexp(samerng(), typeof(FDNUM)) === Dual{TestTag()}(randexp(samerng(), V), zero(Partials{N,V}))
@test randexp(samerng(), typeof(NESTED_FDNUM)) === Dual{TestTag()}(Dual{TestTag()}(randexp(samerng(), V), zero(Partials{M,V})),
zero(Partials{N,Dual{TestTag(),V,M}}))
end

# Predicates #
#------------#

@test ForwardDiff.isconstant(zero(FDNUM))
@test ForwardDiff.isconstant(rand(FDNUM))
@test ForwardDiff.isconstant(one(FDNUM))
@test ForwardDiff.isconstant(FDNUM) == (N == 0)

@test ForwardDiff.isconstant(zero(NESTED_FDNUM))
@test ForwardDiff.isconstant(rand(NESTED_FDNUM))
@test ForwardDiff.isconstant(one(NESTED_FDNUM))
@test ForwardDiff.isconstant(NESTED_FDNUM) == (N == 0)

Expand Down

0 comments on commit 1bfb710

Please sign in to comment.