From b5e50eb54b29c70583f6e67265ba2881bdc4c2e8 Mon Sep 17 00:00:00 2001 From: Simeon Schaub Date: Sat, 23 Nov 2019 18:34:41 +0100 Subject: [PATCH] fix broadcasting with ranges --- src/Measurements.jl | 1 + src/misc.jl | 11 +++++++++++ test/runtests.jl | 8 ++++++++ 3 files changed, 20 insertions(+) create mode 100644 src/misc.jl diff --git a/src/Measurements.jl b/src/Measurements.jl index 84cd73c0..53d49a4c 100644 --- a/src/Measurements.jl +++ b/src/Measurements.jl @@ -111,5 +111,6 @@ include("math.jl") include("show.jl") include("parsing.jl") include("plot-recipes.jl") +include("misc.jl") end # module diff --git a/src/misc.jl b/src/misc.jl new file mode 100644 index 00000000..2db5b279 --- /dev/null +++ b/src/misc.jl @@ -0,0 +1,11 @@ +using Base: Broadcast.DefaultArrayStyle, AbstractUnitRange + +_broadcasted(style, f, x, r::AbstractRange) = invoke(Base.broadcasted, Tuple{typeof(style),typeof(f),Any,typeof(r)}, style, f, x, r) +_broadcasted(style, f, r::AbstractRange, x) = invoke(Base.broadcasted, Tuple{typeof(style),typeof(f),typeof(r),Any}, style, f, r, x) + +for f in (+, -, *, /, \), R in (AbstractRange, AbstractUnitRange, StepRangeLen) + @eval begin + Base.Broadcast.broadcasted(style::DefaultArrayStyle{1}, ::typeof($f), x::Measurement, r::$R) = _broadcasted(style, $f, x, r) + Base.Broadcast.broadcasted(style::DefaultArrayStyle{1}, ::typeof($f), r::$R, x::Measurement) = _broadcasted(style, $f, r, x) + end +end diff --git a/test/runtests.jl b/test/runtests.jl index 69664acf..b5694783 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -783,3 +783,11 @@ end @testset "Plot recipes" begin include("plots.jl") end + +@testset begin "Broadcasting with ranges" + m = 2 ± 1 + @test m .+ (1:6) isa Vector{<:Measurement} + @test m .* (1:2:6) isa Vector{<:Measurement} + @test (1:.1:6) .- m isa Vector{<:Measurement} + @test m ./ (1:6.0) isa Vector{<:Measurement} +end