Skip to content

Commit 848fd7e

Browse files
committed
Redefine * between ::Zero and ::Any
1 parent d329ed8 commit 848fd7e

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

src/differential_arithmetic.jl

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,19 @@ Base.:*(::DoesNotExist, ::Zero) = Zero()
3232
Base.:*(::Zero, ::DoesNotExist) = Zero()
3333

3434

35-
Base.:+(::Zero, b::Zero) = Zero()
35+
Base.:+(::Zero, ::Zero) = Zero()
3636
Base.:*(::Zero, ::Zero) = Zero()
3737
for T in (:One, :AbstractThunk, :Any)
3838
@eval Base.:+(::Zero, b::$T) = b
3939
@eval Base.:+(a::$T, ::Zero) = a
4040

41-
@eval Base.:*(::Zero, ::$T) = Zero()
42-
@eval Base.:*(::$T, ::Zero) = Zero()
41+
if T !== Any
42+
@eval Base.:*(::Zero, ::$T) = Zero()
43+
@eval Base.:*(::$T, ::Zero) = Zero()
44+
end
4345
end
46+
Base.:*(::Zero, x) = zero(x)
47+
Base.:*(x, ::Zero) = zero(x)
4448

4549

4650
Base.:+(a::One, b::One) = extern(a) + extern(b)

test/differentials/zero.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
@testset "Zero" begin
22
z = Zero()
33
@test extern(z) === false
4-
@test z + z == z
5-
@test z + 1 == 1
6-
@test 1 + z == 1
7-
@test z * z == z
8-
@test z * 1 == z
9-
@test 1 * z == z
4+
@test z + z === z
5+
@test z + 1 === 1
6+
@test 1 + z === 1
7+
@test z * z === z
8+
@test z * 1 === 0
9+
@test 1 * z === 0
1010
for x in z
1111
@test x === z
1212
end
1313
@test broadcastable(z) isa Ref{Zero}
14-
@test conj(z) == z
14+
@test conj(z) === z
1515
end

0 commit comments

Comments
 (0)