From 61f3f9baa0495c869321d1320c1ff49a664e63d0 Mon Sep 17 00:00:00 2001 From: Paul Tiede Date: Thu, 10 Nov 2022 23:26:02 -0500 Subject: [PATCH 1/2] add exponent(::Dual) --- src/dual.jl | 2 ++ test/DualTest.jl | 14 +++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/dual.jl b/src/dual.jl index 1cf31731..7e86e9b2 100644 --- a/src/dual.jl +++ b/src/dual.jl @@ -332,6 +332,8 @@ Base.fld(x::Dual, y::Dual) = fld(value(x), value(y)) Base.cld(x::Dual, y::Dual) = cld(value(x), value(y)) +Base.exponent(x::Dual) = exponent(value(x)) + if VERSION ≥ v"1.4" Base.div(x::Dual, y::Dual, r::RoundingMode) = div(value(x), value(y), r) else diff --git a/test/DualTest.jl b/test/DualTest.jl index b09f0594..d556d87e 100644 --- a/test/DualTest.jl +++ b/test/DualTest.jl @@ -44,7 +44,7 @@ ForwardDiff.:≺(::Type{OuterTestTag}, ::Type{TestTag}) = false PARTIALS3 = Partials{N,V}(ntuple(n -> intrand(V), N)) PRIMAL3 = intrand(V) FDNUM3 = Dual{TestTag()}(PRIMAL3, PARTIALS3) - + if !allunique([PRIMAL, PRIMAL2, PRIMAL3]) @info "testing with non-unique primals" PRIMAL PRIMAL2 PRIMAL3 end @@ -162,6 +162,10 @@ ForwardDiff.:≺(::Type{OuterTestTag}, ::Type{TestTag}) = false @test fld(FDNUM, PRIMAL2) === fld(PRIMAL, PRIMAL2) @test fld(PRIMAL, FDNUM2) === fld(PRIMAL, PRIMAL2) + @test exponent(FDNUM) === exponent(PRIMAL) + @test exponent(FDNUM2) === exponent(PRIMAL2) + @test exponent(NESTED_FDNUM) === exponent(PRIMAL) + @test cld(FDNUM, FDNUM2) === cld(PRIMAL, PRIMAL2) @test cld(FDNUM, PRIMAL2) === cld(PRIMAL, PRIMAL2) @test cld(PRIMAL, FDNUM2) === cld(PRIMAL, PRIMAL2) @@ -238,7 +242,7 @@ ForwardDiff.:≺(::Type{OuterTestTag}, ::Type{TestTag}) = false @test ForwardDiff.isconstant(one(NESTED_FDNUM)) @test ForwardDiff.isconstant(NESTED_FDNUM) == (N == 0) - # Recall that FDNUM = Dual{TestTag()}(PRIMAL, PARTIALS) has N partials, + # Recall that FDNUM = Dual{TestTag()}(PRIMAL, PARTIALS) has N partials, # and FDNUM2 has everything with a 2, and all random numbers nonzero. # M is the length of M_PARTIALS, which affects: # NESTED_FDNUM = Dual{TestTag()}(Dual{TestTag()}(PRIMAL, M_PARTIALS), NESTED_PARTIALS) @@ -250,12 +254,12 @@ ForwardDiff.:≺(::Type{OuterTestTag}, ::Type{TestTag}) = false if PRIMAL == PRIMAL2 @test isequal(FDNUM, Dual{TestTag()}(PRIMAL, PARTIALS2)) == (PARTIALS == PARTIALS2) @test isequal(FDNUM, FDNUM2) == (PARTIALS == PARTIALS2) - + @test (FDNUM == FDNUM2) == (PARTIALS == PARTIALS2) @test (NESTED_FDNUM == NESTED_FDNUM2) == ((M_PARTIALS == M_PARTIALS2) && (NESTED_PARTIALS == NESTED_PARTIALS2)) else @test !isequal(FDNUM, FDNUM2) - + @test FDNUM != FDNUM2 @test NESTED_FDNUM != NESTED_FDNUM2 end @@ -414,7 +418,7 @@ ForwardDiff.:≺(::Type{OuterTestTag}, ::Type{TestTag}) = false #----------# if M > 0 && N > 0 - # Recall that FDNUM = Dual{TestTag()}(PRIMAL, PARTIALS) has N partials, + # Recall that FDNUM = Dual{TestTag()}(PRIMAL, PARTIALS) has N partials, # all random numbers nonzero, and FDNUM2 another draw. M only affects NESTED_FDNUM. @test Dual{1}(FDNUM) / Dual{1}(PRIMAL) === Dual{1}(FDNUM / PRIMAL) @test Dual{1}(PRIMAL) / Dual{1}(FDNUM) === Dual{1}(PRIMAL / FDNUM) From 6d96417cff477066c510357aa35dd255b22f3829 Mon Sep 17 00:00:00 2001 From: Paul Tiede Date: Thu, 10 Nov 2022 23:36:10 -0500 Subject: [PATCH 2/2] revert spacing --- test/DualTest.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/DualTest.jl b/test/DualTest.jl index d556d87e..0ec2beec 100644 --- a/test/DualTest.jl +++ b/test/DualTest.jl @@ -242,7 +242,7 @@ ForwardDiff.:≺(::Type{OuterTestTag}, ::Type{TestTag}) = false @test ForwardDiff.isconstant(one(NESTED_FDNUM)) @test ForwardDiff.isconstant(NESTED_FDNUM) == (N == 0) - # Recall that FDNUM = Dual{TestTag()}(PRIMAL, PARTIALS) has N partials, + # Recall that FDNUM = Dual{TestTag()}(PRIMAL, PARTIALS) has N partials, # and FDNUM2 has everything with a 2, and all random numbers nonzero. # M is the length of M_PARTIALS, which affects: # NESTED_FDNUM = Dual{TestTag()}(Dual{TestTag()}(PRIMAL, M_PARTIALS), NESTED_PARTIALS) @@ -254,12 +254,12 @@ ForwardDiff.:≺(::Type{OuterTestTag}, ::Type{TestTag}) = false if PRIMAL == PRIMAL2 @test isequal(FDNUM, Dual{TestTag()}(PRIMAL, PARTIALS2)) == (PARTIALS == PARTIALS2) @test isequal(FDNUM, FDNUM2) == (PARTIALS == PARTIALS2) - + @test (FDNUM == FDNUM2) == (PARTIALS == PARTIALS2) @test (NESTED_FDNUM == NESTED_FDNUM2) == ((M_PARTIALS == M_PARTIALS2) && (NESTED_PARTIALS == NESTED_PARTIALS2)) else @test !isequal(FDNUM, FDNUM2) - + @test FDNUM != FDNUM2 @test NESTED_FDNUM != NESTED_FDNUM2 end