@@ -200,6 +200,7 @@ ForwardDiff.:≺(::Int, ::Type{TestTag()}) = false
200
200
201
201
# Predicates #
202
202
# ------------#
203
+ @testset " Predicates" begin
203
204
204
205
@test ForwardDiff. isconstant (zero (FDNUM))
205
206
@test ForwardDiff. isconstant (one (FDNUM))
@@ -212,10 +213,13 @@ ForwardDiff.:≺(::Int, ::Type{TestTag()}) = false
212
213
@test isequal (FDNUM, Dual {TestTag()} (PRIMAL, PARTIALS2)) == (N == 0 )
213
214
@test isequal (PRIMAL, PRIMAL2) == isequal (FDNUM, FDNUM2)
214
215
215
- @test isequal (NESTED_FDNUM, Dual {TestTag()} (Dual {TestTag()} (PRIMAL, M_PARTIALS2), NESTED_PARTIALS2)) == (N == M == 0 )
216
- # @test isequal(PRIMAL, PRIMAL2) == isequal(NESTED_FDNUM, NESTED_FDNUM2)
216
+ # Recall that FDNUM = Dual{TestTag()}(PRIMAL, PARTIALS) has N partials,
217
+ # and FDNUM2 has everything with a 2, and all random numbers nonzero.
218
+ # M is the length of M_PARTIALS, which affects:
219
+ # NESTED_FDNUM = Dual{TestTag()}(Dual{TestTag()}(PRIMAL, M_PARTIALS), NESTED_PARTIALS)
217
220
218
- @info " Predicates" N M V PRIMAL PRIMAL2 NESTED_FDNUM NESTED_FDNUM2
221
+ @test isequal (NESTED_FDNUM, Dual {TestTag()} (Dual {TestTag()} (PRIMAL, M_PARTIALS2), NESTED_PARTIALS2)) == (N == M == 0 )
222
+ @test isequal (NESTED_FDNUM, NESTED_FDNUM2) == isequal (PRIMAL, PRIMAL2) && (N == M == 0 )
219
223
220
224
@test (FDNUM == Dual {TestTag()} (PRIMAL, PARTIALS2)) == (N == 0 )
221
225
@test (PRIMAL == PRIMAL2) == (FDNUM == FDNUM2)
@@ -300,6 +304,7 @@ ForwardDiff.:≺(::Int, ::Type{TestTag()}) = false
300
304
@test isodd (Dual {TestTag()} (Dual {TestTag()} (1 )))
301
305
@test ! (isodd (Dual {TestTag()} (Dual {TestTag()} (2 ))))
302
306
307
+ end
303
308
# #######################
304
309
# Promotion/Conversion #
305
310
# #######################
@@ -373,8 +378,11 @@ ForwardDiff.:≺(::Int, ::Type{TestTag()}) = false
373
378
374
379
# Division #
375
380
# ----------#
381
+ @testset " Division" begin
376
382
377
383
if M > 0 && N > 0
384
+ # Recall that FDNUM = Dual{TestTag()}(PRIMAL, PARTIALS) has N partials,
385
+ # all random numbers nonzero, and FDNUM2 another draw. M only affects NESTED_FDNUM.
378
386
@test Dual {1} (FDNUM) / Dual {1} (PRIMAL) === Dual {1} (FDNUM / PRIMAL)
379
387
@test Dual {1} (PRIMAL) / Dual {1} (FDNUM) === Dual {1} (PRIMAL / FDNUM)
380
388
@test_broken Dual {1} (FDNUM) / FDNUM2 === Dual {1} (FDNUM / FDNUM2)
@@ -391,8 +399,10 @@ ForwardDiff.:≺(::Int, ::Type{TestTag()}) = false
391
399
@test dual_isapprox (NESTED_FDNUM / PRIMAL, Dual {TestTag()} (value (NESTED_FDNUM) / PRIMAL, partials (NESTED_FDNUM) / PRIMAL))
392
400
@test dual_isapprox (PRIMAL / NESTED_FDNUM, Dual {TestTag()} (PRIMAL / value (NESTED_FDNUM), (- (PRIMAL) / value (NESTED_FDNUM)^ 2 ) * partials (NESTED_FDNUM)))
393
401
402
+ end
394
403
# Exponentiation #
395
404
# ----------------#
405
+ @testset " Exponentiation" begin
396
406
397
407
@test dual_isapprox (FDNUM^ FDNUM2, exp (FDNUM2 * log (FDNUM)))
398
408
@test dual_isapprox (FDNUM^ PRIMAL, exp (PRIMAL * log (FDNUM)))
@@ -404,6 +414,7 @@ ForwardDiff.:≺(::Int, ::Type{TestTag()}) = false
404
414
405
415
@test partials (NaNMath. pow (Dual {TestTag()} (- 2.0 , 1.0 ), Dual {TestTag()} (2.0 , 0.0 )), 1 ) == - 4.0
406
416
417
+ end
407
418
# ##################################
408
419
# General Mathematical Operations #
409
420
# ##################################
@@ -459,6 +470,7 @@ ForwardDiff.:≺(::Int, ::Type{TestTag()}) = false
459
470
460
471
# Special Cases #
461
472
# ---------------#
473
+ @testset " Special Cases" begin
462
474
463
475
@test_broken dual_isapprox (hypot (FDNUM, FDNUM2, FDNUM), sqrt (2 * (FDNUM^ 2 ) + FDNUM2^ 2 ))
464
476
@test_broken dual_isapprox (hypot (FDNUM, FDNUM2, FDNUM3), sqrt (FDNUM^ 2 + FDNUM2^ 2 + FDNUM3^ 2 ))
@@ -483,8 +495,14 @@ ForwardDiff.:≺(::Int, ::Type{TestTag()}) = false
483
495
@test dual_isapprox (f (FDNUM, PRIMAL2, PRIMAL3), Dual {TestTag()} (f (PRIMAL, PRIMAL2, PRIMAL3), PRIMAL2* PARTIALS))
484
496
@test dual_isapprox (f (PRIMAL, PRIMAL2, FDNUM3), Dual {TestTag()} (f (PRIMAL, PRIMAL2, PRIMAL3), PARTIALS3))
485
497
end
498
+
499
+ end # testset
486
500
end
487
501
502
+ # ############
503
+ # bug fixes #
504
+ # ############
505
+
488
506
@testset " Exponentiation of zero" begin
489
507
x0 = 0.0
490
508
x1 = Dual {:t1} (x0, 1.0 )
0 commit comments