From f3165b313ffa1ef8d917cd5b048a2e11d0bd81cc Mon Sep 17 00:00:00 2001 From: Pablo Zubieta <8410335+pabloferz@users.noreply.github.com> Date: Tue, 6 Oct 2020 23:20:23 -0500 Subject: [PATCH] Replace convert for scalars --- docs/src/index.md | 1 + src/Intervals.jl | 1 + src/anchoredinterval.jl | 21 +++++++-------------- src/interval.jl | 9 ++++++--- test/anchoredinterval.jl | 10 +++------- test/interval.jl | 20 ++++++++++---------- 6 files changed, 28 insertions(+), 34 deletions(-) diff --git a/docs/src/index.md b/docs/src/index.md index 32cd2bf0..95f713b2 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -225,6 +225,7 @@ Open Unbounded first last +scalar span isclosed isopen diff --git a/src/Intervals.jl b/src/Intervals.jl index 0c606436..3e907523 100644 --- a/src/Intervals.jl +++ b/src/Intervals.jl @@ -48,6 +48,7 @@ export Bound, HB, first, last, + scalar, span, bounds_types, isclosed, diff --git a/src/anchoredinterval.jl b/src/anchoredinterval.jl index aa62a7aa..bcc94078 100644 --- a/src/anchoredinterval.jl +++ b/src/anchoredinterval.jl @@ -176,23 +176,16 @@ span(interval::AnchoredInterval{P}) where P = abs(P) ##### CONVERSION ##### -# Allows an interval to be converted to a scalar when the set contained by the interval only -# contains a single element. -function Base.convert(::Type{T}, interval::AnchoredInterval{P,T}) where {P,T} +""" + scalar(::AnchoredInterval{P, T}) -> T + +Converts a closed interval set with a single element into a scalar. +""" +function scalar(interval::AnchoredInterval{P}) where {P} if isclosed(interval) && (sign(P) == 0 || first(interval) == last(interval)) return first(interval) else - # Remove deprecation in version 2.0.0 - depwarn( - "`convert(T, interval::AnchoredInterval{P,T})` is deprecated for " * - "intervals which are not closed with coinciding endpoints. " * - "Use `anchor(interval)` instead.", - :convert, - ) - return anchor(interval) - - # TODO: For when deprecation is removed - # throw(DomainError(interval, "The interval is not closed with coinciding endpoints")) + throw(DomainError(interval, "The interval is not closed with coinciding endpoints")) end end diff --git a/src/interval.jl b/src/interval.jl index 281c9842..5306f6a0 100644 --- a/src/interval.jl +++ b/src/interval.jl @@ -248,9 +248,12 @@ end ##### CONVERSION ##### -# Allows an interval to be converted to a scalar when the set contained by the interval only -# contains a single element. -function Base.convert(::Type{T}, interval::Interval{T}) where T +""" + scalar(::Interval{T}) -> T + +Converts a closed interval set with a single element into a scalar. +""" +function scalar(interval::Interval) if first(interval) == last(interval) && isclosed(interval) return first(interval) else diff --git a/test/anchoredinterval.jl b/test/anchoredinterval.jl index dfe78875..bf7cf9b0 100644 --- a/test/anchoredinterval.jl +++ b/test/anchoredinterval.jl @@ -114,17 +114,13 @@ using Intervals: Bounded, Ending, Beginning, canonicalize, isunbounded @testset "conversion" begin interval = AnchoredInterval{Hour(0)}(dt) - @test convert(DateTime, interval) == dt + @test scalar(interval) == dt he = HourEnding(dt) hb = HourBeginning(dt) - # Note: When the deprecation is dropped remove the deprecated tests and uncomment - # the DomainError tests - @test (@test_deprecated convert(DateTime, he)) == anchor(he) - @test (@test_deprecated convert(DateTime, hb)) == anchor(hb) - # @test_throws DomainError convert(DateTime, he) - # @test_throws DomainError convert(DateTime, hb) + @test_throws DomainError scalar(he) + @test_throws DomainError scalar(hb) @test convert(Interval, he) == Interval{Open, Closed}(dt - Hour(1), dt) @test convert(Interval, hb) == Interval{Closed, Open}(dt, dt + Hour(1)) diff --git a/test/interval.jl b/test/interval.jl index d693c61e..dab6131f 100644 --- a/test/interval.jl +++ b/test/interval.jl @@ -98,19 +98,19 @@ end @testset "conversion" begin - @test_throws DomainError convert(Int, Interval{Open, Open}(10, 10)) - @test_throws DomainError convert(Int, Interval{Open, Closed}(10, 10)) - @test_throws DomainError convert(Int, Interval{Closed, Open}(10, 10)) - @test convert(Int, Interval{Closed, Closed}(10, 10)) == 10 - @test_throws DomainError convert(Int, Interval{Closed, Closed}(10, 11)) + @test_throws DomainError scalar(Interval{Open, Open}(10, 10)) + @test_throws DomainError scalar(Interval{Open, Closed}(10, 10)) + @test_throws DomainError scalar(Interval{Closed, Open}(10, 10)) + @test scalar(Interval{Closed, Closed}(10, 10)) == 10 + @test_throws DomainError scalar(Interval{Closed, Closed}(10, 11)) for T in (Date, DateTime) dt = T(2013, 2, 13) - @test_throws DomainError convert(T, Interval{Open, Open}(dt, dt)) - @test_throws DomainError convert(T, Interval{Open, Closed}(dt, dt)) - @test_throws DomainError convert(T, Interval{Closed, Open}(dt, dt)) - @test convert(T, Interval{Closed, Closed}(dt, dt)) == dt - @test_throws DomainError convert(T, Interval{Closed, Closed}(dt, dt + Day(1))) + @test_throws DomainError scalar(Interval{Open, Open}(dt, dt)) + @test_throws DomainError scalar(Interval{Open, Closed}(dt, dt)) + @test_throws DomainError scalar(Interval{Closed, Open}(dt, dt)) + @test scalar(Interval{Closed, Closed}(dt, dt)) == dt + @test_throws DomainError scalar(Interval{Closed, Closed}(dt, dt + Day(1))) end end