Skip to content

Commit b6865c0

Browse files
authored
Merge pull request #12 from nsajko/bc
make broadcasting output to `FixedSizeArray` instead of to `Array`
2 parents 73c8b29 + 7c720fb commit b6865c0

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

src/FixedSizeArrays.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,17 @@ function Base.similar(::FixedSizeArray, ::Type{S}, size::NTuple{N,Int}) where {S
3636
FixedSizeArray{S,N}(undef, size...)
3737
end
3838

39+
# broadcasting
40+
41+
function Base.BroadcastStyle(::Type{<:FixedSizeArray})
42+
Broadcast.ArrayStyle{FixedSizeArray}()
43+
end
44+
45+
function Base.similar(
46+
bc::Broadcast.Broadcasted{Broadcast.ArrayStyle{FixedSizeArray}},
47+
::Type{E},
48+
) where {E}
49+
similar(FixedSizeArray{E}, axes(bc))
50+
end
51+
3952
end # module FixedSizeArrays

test/runtests.jl

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,30 @@ using FixedSizeArrays
3333
@test similar(FixedSizeArray{Int}, (2, 3)) isa FixedSizeMatrix{Int}
3434
@test FixedSizeArray{Int}(undef, 2, 3) isa FixedSizeMatrix{Int}
3535
end
36+
37+
@testset "broadcasting" begin
38+
v3 = FixedSizeArray{Int}(undef, 3)
39+
@test v3 isa FixedSizeVector{Int}
40+
@test (@inferred (v3 + v3)) isa FixedSizeVector{Int}
41+
@test (@inferred (v3 .+ v3)) isa FixedSizeVector{Int}
42+
@test (@inferred (v3 .* v3)) isa FixedSizeVector{Int}
43+
@test (@inferred (v3 .+ 3)) isa FixedSizeVector{Int}
44+
@test (@inferred (v3 .* 3)) isa FixedSizeVector{Int}
45+
@test (@inferred (v3 .+ .3)) isa FixedSizeVector{Float64}
46+
@test (@inferred (v3 .* .3)) isa FixedSizeVector{Float64}
47+
@testset "matrices" begin
48+
m33 = FixedSizeArray{Int}(undef, 3, 3)
49+
m13 = FixedSizeArray{Int}(undef, 1, 3)
50+
m31 = FixedSizeArray{Int}(undef, 3, 1)
51+
@test m33 isa FixedSizeMatrix{Int}
52+
@test m13 isa FixedSizeMatrix{Int}
53+
@test m31 isa FixedSizeMatrix{Int}
54+
@test (@inferred (m33 .+ .3 )) isa FixedSizeMatrix{Float64}
55+
@test (@inferred (m33 .+ 3 )) isa FixedSizeMatrix{Int}
56+
@test (@inferred (m33 .+ v3 )) isa FixedSizeMatrix{Int}
57+
@test (@inferred (m33 .+ m13)) isa FixedSizeMatrix{Int}
58+
@test (@inferred (m33 .+ m31)) isa FixedSizeMatrix{Int}
59+
@test (@inferred (m33 .+ m33)) isa FixedSizeMatrix{Int}
60+
end
61+
end
3662
end

0 commit comments

Comments
 (0)