Skip to content

Commit 3f27ec3

Browse files
committed
Define < and isless for Partials
1 parent e8eb009 commit 3f27ec3

File tree

4 files changed

+41
-1
lines changed

4 files changed

+41
-1
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "ForwardDiff"
22
uuid = "f6369f11-7733-5829-9624-2563aa707210"
3-
version = "1.3.0"
3+
version = "1.3.1"
44

55
[deps]
66
CommonSubexpressions = "bbf7d656-a473-5ed7-a52c-81e309532950"

src/partials.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ Base.mightalias(x::AbstractArray, y::Partials) = false
4949

5050
Base.isequal(a::Partials{N}, b::Partials{N}) where {N} = isequal(a.values, b.values)
5151
Base.:(==)(a::Partials{N}, b::Partials{N}) where {N} = a.values == b.values
52+
Base.:(<)(a::Partials{N}, b::Partials{N}) where {N} = a.values < b.values
53+
Base.isless(a::Partials{N}, b::Partials{N}) where {N} = isless(a.values, b.values)
5254

5355
const PARTIALS_HASH = hash(Partials)
5456

test/DualTest.jl

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,8 @@ ForwardDiff.:≺(::Type{OuterTestTag}, ::Type{TestTag}) = false
259259
# M is the length of M_PARTIALS, which affects:
260260
# NESTED_FDNUM = Dual{TestTag}(Dual{TestTag}(PRIMAL, M_PARTIALS), NESTED_PARTIALS)
261261

262+
NAN_PARTIALS = Partials{N,float(V)}(map(x -> oftype(float(x), NaN), PARTIALS.values))
263+
262264
@test (FDNUM == Dual{TestTag}(PRIMAL, PARTIALS2)) == (PARTIALS == PARTIALS2)
263265
@test isequal(FDNUM, Dual{TestTag}(PRIMAL, PARTIALS2)) == (PARTIALS == PARTIALS2)
264266
@test isequal(NESTED_FDNUM, Dual{TestTag}(Dual{TestTag}(PRIMAL, M_PARTIALS2), NESTED_PARTIALS2)) == ((M_PARTIALS == M_PARTIALS2) && (NESTED_PARTIALS == NESTED_PARTIALS2))
@@ -276,10 +278,17 @@ ForwardDiff.:≺(::Type{OuterTestTag}, ::Type{TestTag}) = false
276278
@test NESTED_FDNUM != NESTED_FDNUM2
277279
end
278280

281+
@test (Dual{TestTag}(PRIMAL, NAN_PARTIALS) == Dual{TestTag}(PRIMAL, NAN_PARTIALS)) === (N == 0)
282+
@test isequal(Dual{TestTag}(PRIMAL, NAN_PARTIALS), Dual{TestTag}(PRIMAL, NAN_PARTIALS))
283+
279284
@test isless(Dual{TestTag}(1, PARTIALS), Dual{TestTag}(2, PARTIALS2))
280285
@test isless(Dual{TestTag}(1, PARTIALS), Dual{TestTag}(1, PARTIALS2)) === isless(PARTIALS, PARTIALS2)
281286
@test !(isless(Dual{TestTag}(1, PARTIALS), Dual{TestTag}(1, PARTIALS)))
282287
@test !(isless(Dual{TestTag}(2, PARTIALS), Dual{TestTag}(1, PARTIALS2)))
288+
@test isless(Dual{TestTag}(1, PARTIALS), Dual{TestTag}(2, NAN_PARTIALS))
289+
@test isless(Dual{TestTag}(1, PARTIALS), Dual{TestTag}(1, NAN_PARTIALS)) === (N > 0)
290+
@test !isless(Dual{TestTag}(1, NAN_PARTIALS), Dual{TestTag}(1, PARTIALS))
291+
@test !(isless(Dual{TestTag}(2, PARTIALS), Dual{TestTag}(1, NAN_PARTIALS)))
283292

284293
@test isless(Dual{TestTag}(Dual{TestTag}(1, M_PARTIALS), NESTED_PARTIALS), Dual{TestTag}(Dual{TestTag}(2, M_PARTIALS2), NESTED_PARTIALS2))
285294
@test isless(Dual{TestTag}(Dual{TestTag}(1, M_PARTIALS), NESTED_PARTIALS), Dual{TestTag}(Dual{TestTag}(1, M_PARTIALS), NESTED_PARTIALS2)) === isless(NESTED_PARTIALS, NESTED_PARTIALS2)
@@ -290,6 +299,10 @@ ForwardDiff.:≺(::Type{OuterTestTag}, ::Type{TestTag}) = false
290299
@test (Dual{TestTag}(1, PARTIALS) < Dual{TestTag}(1, PARTIALS2)) === (PARTIALS < PARTIALS2)
291300
@test !(Dual{TestTag}(1, PARTIALS) < Dual{TestTag}(1, PARTIALS))
292301
@test !(Dual{TestTag}(2, PARTIALS) < Dual{TestTag}(1, PARTIALS2))
302+
@test Dual{TestTag}(1, PARTIALS) < Dual{TestTag}(2, NAN_PARTIALS)
303+
@test !(Dual{TestTag}(1, PARTIALS) < Dual{TestTag}(1, NAN_PARTIALS))
304+
@test !(Dual{TestTag}(1, NAN_PARTIALS) < Dual{TestTag}(1, PARTIALS))
305+
@test !(Dual{TestTag}(2, PARTIALS) < Dual{TestTag}(1, NAN_PARTIALS))
293306

294307
@test Dual{TestTag}(Dual{TestTag}(1, M_PARTIALS), NESTED_PARTIALS) < Dual{TestTag}(Dual{TestTag}(2, M_PARTIALS2), NESTED_PARTIALS2)
295308
@test (Dual{TestTag}(Dual{TestTag}(1, M_PARTIALS), NESTED_PARTIALS) < Dual{TestTag}(Dual{TestTag}(1, M_PARTIALS), NESTED_PARTIALS2)) === (NESTED_PARTIALS < NESTED_PARTIALS2)
@@ -300,6 +313,10 @@ ForwardDiff.:≺(::Type{OuterTestTag}, ::Type{TestTag}) = false
300313
@test (Dual{TestTag}(1, PARTIALS) <= Dual{TestTag}(1, PARTIALS2)) === (PARTIALS <= PARTIALS2)
301314
@test Dual{TestTag}(1, PARTIALS) <= Dual{TestTag}(1, PARTIALS)
302315
@test !(Dual{TestTag}(2, PARTIALS) <= Dual{TestTag}(1, PARTIALS2))
316+
@test Dual{TestTag}(1, PARTIALS) <= Dual{TestTag}(2, NAN_PARTIALS)
317+
@test (Dual{TestTag}(1, PARTIALS) <= Dual{TestTag}(1, NAN_PARTIALS)) === (N == 0)
318+
@test (Dual{TestTag}(1, NAN_PARTIALS) <= Dual{TestTag}(1, PARTIALS)) === (N == 0)
319+
@test !(Dual{TestTag}(2, PARTIALS) <= Dual{TestTag}(1, NAN_PARTIALS))
303320

304321
@test Dual{TestTag}(Dual{TestTag}(1, M_PARTIALS), NESTED_PARTIALS) <= Dual{TestTag}(Dual{TestTag}(2, M_PARTIALS2), NESTED_PARTIALS2)
305322
@test (Dual{TestTag}(Dual{TestTag}(1, M_PARTIALS), NESTED_PARTIALS) <= Dual{TestTag}(Dual{TestTag}(1, M_PARTIALS), NESTED_PARTIALS2)) === (NESTED_PARTIALS <= NESTED_PARTIALS2)
@@ -310,6 +327,10 @@ ForwardDiff.:≺(::Type{OuterTestTag}, ::Type{TestTag}) = false
310327
@test (Dual{TestTag}(1, PARTIALS) > Dual{TestTag}(1, PARTIALS2)) === (PARTIALS > PARTIALS2)
311328
@test !(Dual{TestTag}(1, PARTIALS) > Dual{TestTag}(1, PARTIALS))
312329
@test !(Dual{TestTag}(1, PARTIALS) > Dual{TestTag}(2, PARTIALS2))
330+
@test !(Dual{TestTag}(1, PARTIALS) > Dual{TestTag}(2, NAN_PARTIALS))
331+
@test !(Dual{TestTag}(1, PARTIALS) > Dual{TestTag}(1, NAN_PARTIALS))
332+
@test !(Dual{TestTag}(1, NAN_PARTIALS) > Dual{TestTag}(1, PARTIALS))
333+
@test Dual{TestTag}(2, PARTIALS) > Dual{TestTag}(1, NAN_PARTIALS)
313334

314335
@test Dual{TestTag}(Dual{TestTag}(2, M_PARTIALS), NESTED_PARTIALS) > Dual{TestTag}(Dual{TestTag}(1, M_PARTIALS2), NESTED_PARTIALS2)
315336
@test (Dual{TestTag}(Dual{TestTag}(1, M_PARTIALS), NESTED_PARTIALS) > Dual{TestTag}(Dual{TestTag}(1, M_PARTIALS), NESTED_PARTIALS2)) === (NESTED_PARTIALS > NESTED_PARTIALS2)
@@ -320,6 +341,10 @@ ForwardDiff.:≺(::Type{OuterTestTag}, ::Type{TestTag}) = false
320341
@test (Dual{TestTag}(1, PARTIALS) >= Dual{TestTag}(1, PARTIALS2)) === (PARTIALS >= PARTIALS2)
321342
@test Dual{TestTag}(1, PARTIALS) >= Dual{TestTag}(1, PARTIALS)
322343
@test !(Dual{TestTag}(1, PARTIALS) >= Dual{TestTag}(2, PARTIALS2))
344+
@test !(Dual{TestTag}(1, PARTIALS) >= Dual{TestTag}(2, NAN_PARTIALS))
345+
@test ((Dual{TestTag}(1, PARTIALS) >= Dual{TestTag}(1, NAN_PARTIALS))) === (N == 0)
346+
@test ((Dual{TestTag}(1, NAN_PARTIALS) >= Dual{TestTag}(1, PARTIALS))) === (N == 0)
347+
@test Dual{TestTag}(2, PARTIALS) >= Dual{TestTag}(1, NAN_PARTIALS)
323348

324349
@test Dual{TestTag}(Dual{TestTag}(2, M_PARTIALS), NESTED_PARTIALS) >= Dual{TestTag}(Dual{TestTag}(1, M_PARTIALS2), NESTED_PARTIALS2)
325350
@test (Dual{TestTag}(Dual{TestTag}(1, M_PARTIALS), NESTED_PARTIALS) >= Dual{TestTag}(Dual{TestTag}(1, M_PARTIALS), NESTED_PARTIALS2)) === (NESTED_PARTIALS >= NESTED_PARTIALS2)

test/PartialsTest.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,19 @@ samerng() = MersenneTwister(1)
6060
@test (PARTIALS == PARTIALS2) == (N == 0)
6161
@test isequal(PARTIALS, copy(PARTIALS))
6262
@test isequal(PARTIALS, PARTIALS2) == (N == 0)
63+
@test !(PARTIALS < copy(PARTIALS))
64+
@test PARTIALS <= copy(PARTIALS)
65+
@test !(PARTIALS > copy(PARTIALS))
66+
@test !isless(PARTIALS, copy(PARTIALS))
67+
for f in (<, <=, >, isless)
68+
@test f(PARTIALS, PARTIALS2) === f(VALUES, VALUES2)
69+
end
70+
NAN_PARTIALS = Partials{N,float(T)}(map(x -> oftype(float(x), NaN), VALUES))
71+
@test !(PARTIALS < NAN_PARTIALS)
72+
@test (PARTIALS <= NAN_PARTIALS) === (N == 0)
73+
@test !(PARTIALS > NAN_PARTIALS)
74+
@test isless(PARTIALS, NAN_PARTIALS) === (N > 0)
75+
@test !isless(NAN_PARTIALS, PARTIALS)
6376

6477
@test hash(PARTIALS) == hash(copy(PARTIALS))
6578
@test hash(PARTIALS, hash(1)) == hash(copy(PARTIALS), hash(1))

0 commit comments

Comments
 (0)