From 8592dbaeb7c57b1dd592c3fb4f0b00f1cefe90f5 Mon Sep 17 00:00:00 2001 From: Fengyang Wang Date: Sun, 27 Aug 2017 16:31:15 -0400 Subject: [PATCH] mr_empty specialization for promote_sys_size --- base/reduce.jl | 6 ++++++ test/reduce.jl | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/base/reduce.jl b/base/reduce.jl index 85c88434b31e7..02494994bbe9c 100644 --- a/base/reduce.jl +++ b/base/reduce.jl @@ -242,6 +242,12 @@ mr_empty(::typeof(abs2), op::typeof(max), T) = mr_empty(abs2, scalarmax, T) mr_empty(f, op::typeof(&), T) = true mr_empty(f, op::typeof(|), T) = false +# Allow mr_empty to “see through” promote_sys_size +let ComposedFunction = typename(typeof(identity ∘ identity)).wrapper + global mr_empty(f::ComposedFunction{typeof(promote_sys_size)}, op, T) = + promote_sys_size(mr_empty(f.g, op, T)) +end + mr_empty_iter(f, op, itr, ::HasEltype) = mr_empty(f, op, eltype(itr)) mr_empty_iter(f, op::typeof(&), itr, ::EltypeUnknown) = true mr_empty_iter(f, op::typeof(|), itr, ::EltypeUnknown) = false diff --git a/test/reduce.jl b/test/reduce.jl index c0267786f3ec1..1c41f45178937 100644 --- a/test/reduce.jl +++ b/test/reduce.jl @@ -144,6 +144,14 @@ end @test sum_kbn([-0.0]) === -0.0 @test sum_kbn([-0.0,-0.0]) === -0.0 +# check sum(abs, ...) for support of empty collections +@testset "sum(abs, [])" begin + @test @inferred(sum(abs, Float64[])) === 0.0 + @test @inferred(sum(abs, Int[])) === 0 + @test @inferred(sum(abs, Set{Int}())) === 0 + @test_throws MethodError sum(abs, Any[]) +end + # prod @test prod(Int[]) === 1