Skip to content

Commit 0aefabe

Browse files
authored
Fix reduction over empty array (#1115)
* Fix reduction over empty array * bump version
1 parent 865f80e commit 0aefabe

File tree

3 files changed

+21
-11
lines changed

3 files changed

+21
-11
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "StaticArrays"
22
uuid = "90137ffa-7385-5640-81b9-e52037218182"
3-
version = "1.5.11"
3+
version = "1.5.12"
44

55
[deps]
66
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

src/mapreduce.jl

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -197,18 +197,21 @@ end
197197
exprs = Array{Expr}(undef, Snew)
198198
itr = [1:n for n Snew]
199199
for i Base.product(itr...)
200-
expr = :(f(a[$(i...)]))
201-
if init === _InitialValue
202-
expr = :(Base.reduce_first(op, $expr))
200+
if S[D] == 0
201+
expr = :(Base.mapreduce_empty(f, op, eltype(a)))
203202
else
204-
expr = :(op(init, $expr))
205-
end
206-
for k = 2:S[D]
207-
ik = collect(i)
208-
ik[D] = k
209-
expr = :(op($expr, f(a[$(ik...)])))
203+
expr = :(f(a[$(i...)]))
204+
if init === _InitialValue
205+
expr = :(Base.reduce_first(op, $expr))
206+
else
207+
expr = :(op(init, $expr))
208+
end
209+
for k = 2:S[D]
210+
ik = collect(i)
211+
ik[D] = k
212+
expr = :(op($expr, f(a[$(ik...)])))
213+
end
210214
end
211-
212215
exprs[i...] = expr
213216
end
214217

test/mapreduce.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,4 +251,11 @@ using Statistics: mean
251251
@test @inferred(map(f -> f, enumerate_static(v0))) === SVector{0,Tuple{Int,Float64}}()
252252
@test @inferred(map(f -> f, enumerate_static(m0))) === SMatrix{0,0,Tuple{Int,Float64}}()
253253
end
254+
@testset "reduce over empty array" begin
255+
# issue #1114
256+
@test (@inferred reduce(|,zeros(SMatrix{0,3,Bool}); dims=Val(1), init=false)) ==
257+
reduce(|,zeros(Bool,0,3); dims=1, init=false)
258+
@test reduce(|,zeros(SMatrix{0,3,Bool}); dims=1, init=false) ==
259+
reduce(|,zeros(Bool,0,3); dims=1, init=false)
260+
end
254261
end

0 commit comments

Comments
 (0)