Skip to content

Commit ecf4377

Browse files
authored
REQUIRE -> Project.toml (#53)
* REQUIRE -> Project.toml * Increase coverage * More coverage
1 parent 9e277b2 commit ecf4377

File tree

5 files changed

+78
-16
lines changed

5 files changed

+78
-16
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
*.jl.cov
22
*.jl.*.cov
33
*.jl.mem
4+
.DS_Store

Project.toml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
name = "IntervalSets"
2+
uuid = "8197267c-284f-5f27-9208-e0e47529a953"
3+
version = "0.3.2"
4+
5+
[deps]
6+
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
7+
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
8+
9+
[compat]
10+
julia = "0.7, 1"
11+
12+
[extras]
13+
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
14+
15+
[targets]
16+
test = ["Test"]

REQUIRE

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/IntervalSets.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,8 @@ isrightclosed(d::TypedEndpointsInterval{L,:open}) where {L} = false
181181
# The third is the one we want, but the first two are needed to resolve ambiguities
182182
Base.Slice{T}(i::TypedEndpointsInterval{:closed,:closed,I}) where {T<:AbstractUnitRange,I<:Integer} =
183183
Base.Slice{T}(minimum(i):maximum(i))
184+
Base.Slice(i::TypedEndpointsInterval{:closed,:closed,I}) where I<:Integer =
185+
Base.Slice(minimum(i):maximum(i))
184186
function Base.OneTo{T}(i::TypedEndpointsInterval{:closed,:closed,I}) where {T<:Integer,I<:Integer}
185187
@noinline throwstart(i) = throw(ArgumentError("smallest element must be 1, got $(minimum(i))"))
186188
minimum(i) == 1 || throwstart(i)

test/runtests.jl

Lines changed: 59 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import IntervalSets: Domain, endpoints, closedendpoints, TypedEndpointsInterval
88

99
struct MyClosedUnitInterval <: TypedEndpointsInterval{:closed,:closed,Int} end
1010
endpoints(::MyClosedUnitInterval) = (0,1)
11+
Base.promote_rule(::Type{MyClosedUnitInterval}, ::Type{ClosedInterval{T}}) where T =
12+
ClosedInterval{T}
1113

1214
struct MyUnitInterval <: AbstractInterval{Int}
1315
isleftclosed::Bool
@@ -16,6 +18,8 @@ end
1618
endpoints(::MyUnitInterval) = (0,1)
1719
closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
1820

21+
struct IncompleteInterval <: AbstractInterval{Int} end
22+
1923
@testset "IntervalSets" begin
2024
@test isempty(detect_ambiguities(IntervalSets, Base, Core))
2125

@@ -59,6 +63,8 @@ closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
5963

6064
@test typeof(leftendpoint(M)) == typeof(rightendpoint(M)) && typeof(leftendpoint(M)) == Float64
6165
@test typeof(leftendpoint(N)) == typeof(rightendpoint(N)) && typeof(leftendpoint(N)) == Int
66+
@test @inferred(endpoints(M)) === (2.0,5.0)
67+
@test @inferred(endpoints(N)) === (255,300)
6268

6369
@test maximum(I) === 3
6470
@test minimum(I) === 0
@@ -117,6 +123,7 @@ closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
117123

118124
@test promote(1..2, 1.0..2.0) === (1.0..2.0, 1.0..2.0)
119125

126+
@test duration(1..2) == 2
120127
# duration deliberately not defined for non-integer intervals
121128
@test_throws MethodError duration(1.2..2.4)
122129
end
@@ -135,13 +142,18 @@ closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
135142
@test @inferred(convert(ClosedInterval{Float64}, I)) ===
136143
@inferred(convert(AbstractInterval{Float64}, I)) ===
137144
@inferred(convert(Domain{Float64}, I)) ===
138-
@inferred(ClosedInterval{Float64}(I)) === 0.0..3.0
145+
@inferred(ClosedInterval{Float64}(I)) ===
146+
@inferred(convert(TypedEndpointsInterval{:closed,:closed,Float64},I)) ===
147+
0.0..3.0
139148
@test @inferred(convert(ClosedInterval, I)) ===
140149
@inferred(convert(Interval, I)) ===
141150
@inferred(ClosedInterval(I)) ===
142151
@inferred(Interval(I)) ===
143152
@inferred(convert(AbstractInterval, I)) ===
144-
@inferred(convert(Domain, I)) === I
153+
@inferred(convert(Domain, I)) ===
154+
@inferred(convert(TypedEndpointsInterval{:closed,:closed}, I)) ===
155+
@inferred(convert(TypedEndpointsInterval{:closed,:closed,Int}, I)) ===
156+
@inferred(convert(ClosedInterval{Int}, I)) === I
145157
@test_throws InexactError convert(OpenInterval, I)
146158
@test_throws InexactError convert(Interval{:open,:closed}, I)
147159
@test_throws InexactError convert(Interval{:closed,:open}, I)
@@ -159,7 +171,9 @@ closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
159171
@inferred(convert(Interval, J)) ===
160172
@inferred(convert(AbstractInterval, J)) ===
161173
@inferred(convert(Domain, J)) ===
162-
@inferred(OpenInterval(J)) === OpenInterval(J)
174+
@inferred(OpenInterval(J)) ===
175+
@inferred(OpenInterval{Int}(J)) ===
176+
@inferred(convert(OpenInterval{Int},J)) === OpenInterval(J)
163177
J = Interval{:open,:closed}(I)
164178
@test_throws InexactError convert(Interval{:closed,:open}, J)
165179
@test @inferred(convert(Interval{:open,:closed,Float64}, J)) ===
@@ -194,6 +208,8 @@ closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
194208
convert(ClosedInterval{Float64}, 1) ==
195209
1.0..1.0
196210

211+
@test promote_type(Interval{:closed,:open,Float64}, Interval{:closed,:open,Int}) ===
212+
Interval{:closed,:open,Float64}
197213
end
198214

199215

@@ -226,6 +242,10 @@ closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
226242

227243
@test IntervalSets.isclosed(d)
228244
@test !IntervalSets.isopen(d)
245+
@test IntervalSets.isleftclosed(d)
246+
@test !IntervalSets.isleftopen(d)
247+
@test !IntervalSets.isrightopen(d)
248+
@test IntervalSets.isrightclosed(d)
229249

230250
@test convert(AbstractInterval, d) d
231251
@test convert(AbstractInterval{T}, d) d
@@ -235,6 +255,12 @@ closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
235255
d = OpenInterval(zero(T) .. one(T))
236256
@test IntervalSets.isopen(d)
237257
@test !IntervalSets.isclosed(d)
258+
@test IntervalSets.isopen(d)
259+
@test !IntervalSets.isclosed(d)
260+
@test !IntervalSets.isleftclosed(d)
261+
@test IntervalSets.isleftopen(d)
262+
@test IntervalSets.isrightopen(d)
263+
@test !IntervalSets.isrightclosed(d)
238264
@test leftendpoint(d) d
239265
@test BigFloat(leftendpoint(d)) d
240266
@test nextfloat(leftendpoint(d)) d
@@ -257,45 +283,50 @@ closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
257283
d = Interval{:open,:closed}(zero(T) .. one(T))
258284
@test !IntervalSets.isopen(d)
259285
@test !IntervalSets.isclosed(d)
286+
@test !IntervalSets.isleftclosed(d)
287+
@test IntervalSets.isleftopen(d)
288+
@test !IntervalSets.isrightopen(d)
289+
@test IntervalSets.isrightclosed(d)
260290
@test leftendpoint(d) d
261291
@test BigFloat(leftendpoint(d)) d
262292
@test nextfloat(leftendpoint(d)) d
263293
@test nextfloat(BigFloat(leftendpoint(d))) d
264294
@test prevfloat(leftendpoint(d)) d
265-
@test prevfloat(leftendpoint(d)) d
295+
@test prevfloat(BigFloat(leftendpoint(d))) d
266296
@test rightendpoint(d) d
267297
@test BigFloat(rightendpoint(d)) d
268298
@test nextfloat(rightendpoint(d)) d
269299
@test nextfloat(BigFloat(rightendpoint(d))) d
270300
@test prevfloat(rightendpoint(d)) d
271-
@test prevfloat(rightendpoint(d)) d
272-
@test infimum(d) == leftendpoint(d)
273-
@test supremum(d) == rightendpoint(d)
301+
@test prevfloat(BigFloat(rightendpoint(d))) d
274302
@test infimum(d) == leftendpoint(d)
275303
@test maximum(d) == supremum(d) == rightendpoint(d)
276304
@test_throws ArgumentError minimum(d)
277305

278306
d = Interval{:closed,:open}(zero(T) .. one(T))
279307
@test !IntervalSets.isopen(d)
280308
@test !IntervalSets.isclosed(d)
309+
@test IntervalSets.isleftclosed(d)
310+
@test !IntervalSets.isleftopen(d)
311+
@test IntervalSets.isrightopen(d)
312+
@test !IntervalSets.isrightclosed(d)
281313
@test leftendpoint(d) d
282314
@test BigFloat(leftendpoint(d)) d
283315
@test nextfloat(leftendpoint(d)) d
284316
@test nextfloat(BigFloat(leftendpoint(d))) d
285317
@test prevfloat(leftendpoint(d)) d
286-
@test prevfloat(leftendpoint(d)) d
318+
@test prevfloat(BigFloat(leftendpoint(d))) d
287319
@test rightendpoint(d) d
288320
@test BigFloat(rightendpoint(d)) d
289321
@test nextfloat(rightendpoint(d)) d
290322
@test nextfloat(BigFloat(rightendpoint(d))) d
291323
@test prevfloat(rightendpoint(d)) d
292-
@test prevfloat(rightendpoint(d)) d
293-
@test infimum(d) == leftendpoint(d)
294-
@test supremum(d) == rightendpoint(d)
324+
@test prevfloat(BigFloat(rightendpoint(d))) d
295325
@test infimum(d) == minimum(d) == leftendpoint(d)
296326
@test supremum(d) == rightendpoint(d)
297327
@test_throws ArgumentError maximum(d)
298328

329+
299330
# - empty interval
300331
@test isempty(one(T) .. zero(T))
301332
@test zero(T) one(T) .. zero(T)
@@ -545,19 +576,22 @@ closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
545576

546577
@testset "Custom intervals" begin
547578
I = MyUnitInterval(true,true)
579+
@test eltype(I) == eltype(typeof(I)) == Int
548580
@test leftendpoint(I) == 0
549581
@test rightendpoint(I) == 1
550-
@test isleftclosed(I) == true
551-
@test isrightclosed(I) == true
582+
@test isleftclosed(I)
583+
@test !isleftopen(I)
584+
@test isrightclosed(I)
585+
@test !isrightopen(I)
552586
@test ClosedInterval(I) === convert(ClosedInterval, I) ===
553587
ClosedInterval{Int}(I) === convert(ClosedInterval{Int}, I) ===
554588
convert(Interval, I) === Interval(I) === 0..1
555589
@test_throws InexactError convert(OpenInterval, I)
556590
I = MyUnitInterval(false,false)
557591
@test leftendpoint(I) == 0
558592
@test rightendpoint(I) == 1
559-
@test isleftclosed(I) == false
560-
@test isrightclosed(I) == false
593+
@test !isleftclosed(I)
594+
@test !isrightclosed(I)
561595
@test OpenInterval(I) === convert(OpenInterval, I) ===
562596
OpenInterval{Int}(I) === convert(OpenInterval{Int}, I) ===
563597
convert(Interval, I) === Interval(I) === OpenInterval(0..1)
@@ -590,6 +624,8 @@ closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
590624
ClosedInterval{Int}(I) === convert(ClosedInterval{Int}, I) ===
591625
convert(Interval, I) === Interval(I) === 0..1
592626
@test_throws InexactError convert(OpenInterval, I)
627+
@test I I === 0..1
628+
@test I (0.0..0.5) === 0.0..0.5
593629
end
594630

595631
@testset "Missing endpoints" begin
@@ -644,9 +680,17 @@ closedendpoints(I::MyUnitInterval) = (I.isleftclosed,I.isrightclosed)
644680
@test_throws ArgumentError Base.OneTo{Int}(0..5)
645681
@test_throws ArgumentError Base.OneTo(0..5)
646682
@test Base.OneTo(1..5) == Base.OneTo{Int}(1..5) == Base.OneTo(5)
683+
@test Base.Slice(1..5) == Base.Slice{UnitRange{Int}}(1..5) == Base.Slice(1:5)
647684
end
648685

649686
@testset "IteratorSize" begin
650687
@test Base.IteratorSize(ClosedInterval) == Base.SizeUnknown()
651688
end
689+
690+
@testset "IncompleteInterval" begin
691+
I = IncompleteInterval()
692+
@test eltype(I) === Int
693+
@test_throws ErrorException endpoints(I)
694+
@test_throws ErrorException closedendpoints(I)
695+
end
652696
end

0 commit comments

Comments
 (0)