Skip to content

Commit 56e1d8e

Browse files
tpapptimholy
authored andcommitted
Add length (#23)
See discussion at #21, this should fix the issue.
1 parent 77d4bf0 commit 56e1d8e

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

src/closed.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,15 @@ function width{T}(A::ClosedInterval{T})
9494
max(zero(_width), _width) # this works when T is a Date
9595
end
9696

97+
length{T <: Integer}(A::ClosedInterval{T}) = max(0, Int(A.right - A.left) + 1)
98+
99+
length(A::ClosedInterval{Date}) = max(0, Dates.days(A.right - A.left) + 1)
100+
97101
function convert{R<:AbstractUnitRange,I<:Integer}(::Type{R}, i::ClosedInterval{I})
98102
R(minimum(i), maximum(i))
99103
end
100104

101105
range{I<:Integer}(i::ClosedInterval{I}) = convert(UnitRange{I}, i)
102106

103107
Base.promote_rule{T1,T2}(::Type{ClosedInterval{T1}}, ::Type{ClosedInterval{T2}}) = ClosedInterval{promote_type(T1, T2)}
108+

test/runtests.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,19 @@ using Base.Test
7979
@test width(ClosedInterval(A, B)) == Base.Dates.Day(59)
8080
@test width(ClosedInterval(B, A)) == Base.Dates.Day(0)
8181
@test isempty(ClosedInterval(B, A))
82+
@test length(ClosedInterval(A, B)) 60
83+
@test length(ClosedInterval(B, A)) 0
8284
end
8385

8486
@test width(ClosedInterval(3,7)) 4
8587
@test width(ClosedInterval(4.0,8.0)) 4.0
8688

8789
@test promote(1..2, 1.0..2.0) === (1.0..2.0, 1.0..2.0)
90+
91+
@test length(I) == 4
92+
@test length(J) == 0
93+
# length deliberately not defined for non-integer intervals
94+
@test_throws MethodError length(1.2..2.4)
8895
end
8996
end
9097

0 commit comments

Comments
 (0)