Skip to content

Commit f6f6488

Browse files
committed
Binary broadcast test
1 parent e09b5f6 commit f6f6488

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
@@ -1170,26 +1170,41 @@ end
11701170
end
11711171

11721172
@testset "preserve 0d" begin
1173-
for f in (real, imag, conj),
1174-
(F, A) in ((Fill(4 + 5im), fill(4 + 5im)),
1175-
(Zeros{ComplexF64}(), zeros(ComplexF64)),
1176-
(Zeros(), zeros()),
1177-
(Ones(), ones()),
1178-
(Ones{ComplexF64}(), ones(ComplexF64)),
1179-
)
1173+
@testset for f in (real, imag, conj), (F, A) in (
1174+
(Fill(4), fill(4)),
1175+
(Fill(4 + 5im), fill(4 + 5im)),
1176+
(Fill(SMatrix{2,2,ComplexF64,4}(fill(4 + 5im, 4))), fill(SMatrix{2,2,ComplexF64,4}(fill(4 + 5im, 4)))),
1177+
(Zeros{ComplexF64}(), zeros(ComplexF64)),
1178+
(Zeros(), zeros()),
1179+
(Ones(), ones()),
1180+
(Ones{ComplexF64}(), ones(ComplexF64)),
1181+
)
11801182
x = f(F)
11811183
y = f(A)
11821184
@test x == y
1185+
@test eltype(x) == eltype(y)
11831186
@test x isa FillArrays.AbstractFill
1184-
if F[] isa Real
1187+
if F isa Ones
11851188
if f === imag
11861189
@test x isa Zeros
11871190
else
1188-
@test x isa typeof(F)
1191+
@test x isa Ones
1192+
end
1193+
end
1194+
if F[] isa Real
1195+
if f === imag
1196+
@test x isa Zeros
11891197
end
11901198
end
11911199
end
11921200
end
1201+
1202+
@testset "issue #40" begin
1203+
f(x) = x
1204+
g(x, y) = x
1205+
F = Fill(1, 2)
1206+
@test g.(F, "a") === f.(F)
1207+
end
11931208
end
11941209

11951210
@testset "map" begin

0 commit comments

Comments
 (0)