From bdf9ead91e5a8dfd91643a17c1626032faada329 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Thu, 11 Nov 2021 14:30:03 -0500 Subject: [PATCH] [Dates] define arithmetic promotion for more operators --- stdlib/Dates/src/Dates.jl | 2 +- stdlib/Dates/src/periods.jl | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/stdlib/Dates/src/Dates.jl b/stdlib/Dates/src/Dates.jl index 15276a5a3be55..6164216cbd1af 100644 --- a/stdlib/Dates/src/Dates.jl +++ b/stdlib/Dates/src/Dates.jl @@ -32,7 +32,7 @@ for more information. """ module Dates -import Base: ==, div, fld, mod, rem, gcd, lcm, +, -, *, /, %, broadcast +import Base: ==, isless, div, fld, mod, rem, gcd, lcm, +, -, *, /, %, broadcast using Printf: @sprintf using Base.Iterators diff --git a/stdlib/Dates/src/periods.jl b/stdlib/Dates/src/periods.jl index 61df01302521b..021e91924ce59 100644 --- a/stdlib/Dates/src/periods.jl +++ b/stdlib/Dates/src/periods.jl @@ -70,9 +70,7 @@ default(p::Union{T,Type{T}}) where {T<:TimePeriod} = T(0) (-)(x::P) where {P<:Period} = P(-value(x)) ==(x::P, y::P) where {P<:Period} = value(x) == value(y) -==(x::Period, y::Period) = (==)(promote(x, y)...) Base.isless(x::P, y::P) where {P<:Period} = isless(value(x), value(y)) -Base.isless(x::Period, y::Period) = isless(promote(x, y)...) # Period Arithmetic, grouped by dimensionality: for op in (:+, :-, :lcm, :gcd) @@ -97,6 +95,11 @@ end (*)(A::Period, B::AbstractArray) = Broadcast.broadcast_preserving_zero_d(*, A, B) (*)(A::AbstractArray, B::Period) = Broadcast.broadcast_preserving_zero_d(*, A, B) +for op in (:(==), :isless, :/, :rem, :mod, :lcm, :gcd) + @eval ($op)(x::Period, y::Period) = ($op)(promote(x, y)...) +end +div(x::Period, y::Period, r::RoundingMode) = div(promote(x, y)..., r) + # intfuncs Base.gcdx(a::T, b::T) where {T<:Period} = ((g, x, y) = gcdx(value(a), value(b)); return T(g), x, y) Base.abs(a::T) where {T<:Period} = T(abs(value(a)))