Skip to content

Commit 2cc6485

Browse files
committed
Binary broadcast test
1 parent 684280d commit 2cc6485

File tree

2 files changed

+34
-16
lines changed

2 files changed

+34
-16
lines changed

src/fillbroadcast.jl

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -143,15 +143,18 @@ function broadcast_preserving_0d(f, As...)
143143
r = copy(bc)
144144
length(axes(bc)) == 0 ? Fill(r) : r
145145
end
146-
for f in (:real, :imag, :conj)
146+
for f in (:real, :imag)
147147
@eval ($f)(A::AbstractFill) = broadcast_preserving_0d($f, A)
148-
@eval ($f)(A::AbstractZeros) = A
149-
end
150-
for T in (:AbstractOnes, :(AbstractFill{<:Real}))
151-
@eval real(A::$T) = A
152-
@eval imag(A::$T) = Zeros{eltype(A)}(axes(A))
153-
@eval conj(A::$T) = A
148+
@eval ($f)(A::AbstractZeros) = Zeros{real(eltype(A))}(axes(A))
154149
end
150+
conj(A::AbstractFill) = broadcast_preserving_0d(conj, A)
151+
conj(A::AbstractZeros) = A
152+
real(A::AbstractOnes) = Ones{real(eltype(A))}(axes(A))
153+
imag(A::AbstractOnes) = Zeros{real(eltype(A))}(axes(A))
154+
conj(A::AbstractOnes) = A
155+
real(A::AbstractFill{<:Real}) = A
156+
imag(A::AbstractFill{<:Real}) = Zeros{eltype(A)}(axes(A))
157+
conj(A::AbstractFill{<:Real}) = A
155158

156159
### Binary broadcasting
157160

test/runtests.jl

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1199,26 +1199,41 @@ end
11991199
end
12001200

12011201
@testset "preserve 0d" begin
1202-
for f in (real, imag, conj),
1203-
(F, A) in ((Fill(4 + 5im), fill(4 + 5im)),
1204-
(Zeros{ComplexF64}(), zeros(ComplexF64)),
1205-
(Zeros(), zeros()),
1206-
(Ones(), ones()),
1207-
(Ones{ComplexF64}(), ones(ComplexF64)),
1208-
)
1202+
@testset for f in (real, imag, conj), (F, A) in (
1203+
(Fill(4), fill(4)),
1204+
(Fill(4 + 5im), fill(4 + 5im)),
1205+
(Fill(SMatrix{2,2,ComplexF64,4}(fill(4 + 5im, 4))), fill(SMatrix{2,2,ComplexF64,4}(fill(4 + 5im, 4)))),
1206+
(Zeros{ComplexF64}(), zeros(ComplexF64)),
1207+
(Zeros(), zeros()),
1208+
(Ones(), ones()),
1209+
(Ones{ComplexF64}(), ones(ComplexF64)),
1210+
)
12091211
x = f(F)
12101212
y = f(A)
12111213
@test x == y
1214+
@test eltype(x) == eltype(y)
12121215
@test x isa FillArrays.AbstractFill
1213-
if F[] isa Real
1216+
if F isa Ones
12141217
if f === imag
12151218
@test x isa Zeros
12161219
else
1217-
@test x isa typeof(F)
1220+
@test x isa Ones
1221+
end
1222+
end
1223+
if F[] isa Real
1224+
if f === imag
1225+
@test x isa Zeros
12181226
end
12191227
end
12201228
end
12211229
end
1230+
1231+
@testset "issue #40" begin
1232+
f(x) = x
1233+
g(x, y) = x
1234+
F = Fill(1, 2)
1235+
@test g.(F, "a") === f.(F)
1236+
end
12221237
end
12231238

12241239
@testset "map" begin

0 commit comments

Comments
 (0)