Skip to content

Commit e25d605

Browse files
authored
Support in with complex (#45) (#46)
* Support in with complex (#45) * test open and mixed complex in * increase coverage * more coverage
1 parent 90576a7 commit e25d605

File tree

2 files changed

+49
-2
lines changed

2 files changed

+49
-2
lines changed

src/IntervalSets.jl

+7
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,11 @@ in(v, I::TypedEndpointsInterval{:open,:open}) = leftendpoint(I) < v < rightendpo
124124
in(v, I::TypedEndpointsInterval{:closed,:open}) = leftendpoint(I) v < rightendpoint(I)
125125
in(v, I::TypedEndpointsInterval{:open,:closed}) = leftendpoint(I) < v rightendpoint(I)
126126

127+
in(v::Complex, I::TypedEndpointsInterval{:closed,:closed}) = isreal(v) && in(real(v), I)
128+
in(v::Complex, I::TypedEndpointsInterval{:open,:open}) = isreal(v) && in(real(v), I)
129+
in(v::Complex, I::TypedEndpointsInterval{:closed,:open}) = isreal(v) && in(real(v), I)
130+
in(v::Complex, I::TypedEndpointsInterval{:open,:closed}) = isreal(v) && in(real(v), I)
131+
127132
in(a::AbstractInterval, b::TypedEndpointsInterval{:closed,:closed}) =
128133
(leftendpoint(a) leftendpoint(b)) & (rightendpoint(a) rightendpoint(b))
129134
in(a::TypedEndpointsInterval{:open,:open}, b::TypedEndpointsInterval{:open,:open}) =
@@ -176,6 +181,8 @@ function Base.OneTo{T}(i::TypedEndpointsInterval{:closed,:closed,I}) where {T<:I
176181
minimum(i) == 1 || throwstart(i)
177182
Base.OneTo{T}(maximum(i))
178183
end
184+
Base.OneTo(i::TypedEndpointsInterval{:closed,:closed,I}) where {I<:Integer} =
185+
Base.OneTo{I}(i)
179186
UnitRange{T}(i::TypedEndpointsInterval{:closed,:closed,I}) where {T<:Integer,I<:Integer} = UnitRange{T}(minimum(i), maximum(i))
180187
UnitRange(i::TypedEndpointsInterval{:closed,:closed,I}) where {I<:Integer} = UnitRange{I}(i)
181188
range(i::TypedEndpointsInterval{:closed,:closed,I}) where {I<:Integer} = UnitRange{I}(i)

test/runtests.jl

+42-2
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,9 @@ closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
463463
@test Interval{:open,:closed}(i2) OpenInterval(i3) OpenInterval(i3) Interval{:open,:closed}(i2) Interval{:open,:closed}(d)
464464
@test Interval{:open,:closed}(i2) Interval{:closed,:open}(i3) Interval{:closed,:open}(i3) Interval{:open,:closed}(i2) d
465465

466+
# - intersection of custom intervals
467+
@test intersect(MyUnitInterval(true,true), MyUnitInterval(false,false)) == OpenInterval(0,1)
468+
@test intersect(MyUnitInterval(true,true), OpenInterval(0,1)) == OpenInterval(0,1)
466469

467470
# - union of non-overlapping intervals
468471
@test_throws ArgumentError i1 i4
@@ -472,8 +475,6 @@ closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
472475
@test_throws ArgumentError Interval{:closed,:open}(i1) i4
473476
@test_throws ArgumentError Interval{:closed,:open}(i1) OpenInterval(i4)
474477

475-
476-
477478
# - union of almost-overlapping intervals
478479
@test_throws ArgumentError i1 i5
479480
@test_throws ArgumentError i5 i1
@@ -577,6 +578,7 @@ closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
577578
@test Interval{:closed,:open}(I) === convert(Interval{:closed,:open}, I) ===
578579
Interval{:closed,:open,Int}(I) === convert(Interval{:closed,:open,Int}, I) ===
579580
convert(Interval, I) === Interval(I) === Interval{:closed,:open}(0..1)
581+
@test convert(AbstractInterval, I) === convert(AbstractInterval{Int}, I) === I
580582
end
581583

582584
@testset "Custom typed endpoints interval" begin
@@ -597,4 +599,42 @@ closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
597599
@test issubset(1.1, 0.0..1.0) == false
598600
@test issubset(0.0, nextfloat(0.0)..1.0) == false
599601
end
602+
603+
@testset "complex in" begin
604+
@test 0+im 0..2
605+
@test 0+0im 0..2
606+
@test 0+eps()im 0..2
607+
608+
@test 0+im OpenInterval(0,2)
609+
@test 0+0im OpenInterval(0,2)
610+
@test 1+0im OpenInterval(0,2)
611+
@test 1+eps()im OpenInterval(0,2)
612+
613+
@test 0+im Interval{:closed,:open}(0,2)
614+
@test 0+0im Interval{:closed,:open}(0,2)
615+
@test 1+0im Interval{:closed,:open}(0,2)
616+
@test 1+eps()im Interval{:closed,:open}(0,2)
617+
618+
@test 0+im Interval{:open,:closed}(0,2)
619+
@test 0+0im Interval{:open,:closed}(0,2)
620+
@test 1+0im Interval{:open,:closed}(0,2)
621+
@test 1+eps()im Interval{:open,:closed}(0,2)
622+
end
623+
624+
@testset "closedendpoints" begin
625+
@test closedendpoints(0..1) == closedendpoints(MyClosedUnitInterval()) == (true,true)
626+
@test closedendpoints(Interval{:open,:closed}(0,1)) == (false,true)
627+
@test closedendpoints(Interval{:closed,:open}(0,1)) == (true,false)
628+
@test closedendpoints(OpenInterval(0,1)) == (false,false)
629+
end
630+
631+
@testset "OneTo" begin
632+
@test_throws ArgumentError Base.OneTo{Int}(0..5)
633+
@test_throws ArgumentError Base.OneTo(0..5)
634+
@test Base.OneTo(1..5) == Base.OneTo{Int}(1..5) == Base.OneTo(5)
635+
end
636+
637+
@testset "IteratorSize" begin
638+
@test Base.IteratorSize(ClosedInterval) == Base.SizeUnknown()
639+
end
600640
end

0 commit comments

Comments
 (0)