From 72be89a6d5de41ebadf7fc8c46226d2f7706aad6 Mon Sep 17 00:00:00 2001 From: Curtis Vogt Date: Tue, 28 Feb 2017 09:06:29 -0600 Subject: [PATCH] Make length for Date ranges type stable --- base/dates/ranges.jl | 2 +- test/dates/ranges.jl | 24 ++++++++++++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/base/dates/ranges.jl b/base/dates/ranges.jl index bd853f68e5b06..3f9717fb21495 100644 --- a/base/dates/ranges.jl +++ b/base/dates/ranges.jl @@ -25,7 +25,7 @@ function len(a, b, c) end return i - 1 end -Base.length(r::StepRange{<:TimeType}) = isempty(r) ? 0 : len(r.start, r.stop, r.step) + 1 +Base.length(r::StepRange{<:TimeType}) = isempty(r) ? Int64(0) : len(r.start, r.stop, r.step) + 1 # Period ranges hook into Int64 overflow detection Base.length(r::StepRange{<:Period}) = length(StepRange(value(r.start), value(r.step), value(r.stop))) diff --git a/test/dates/ranges.jl b/test/dates/ranges.jl index 622382b9c6da3..87ed8beaa0d9f 100644 --- a/test/dates/ranges.jl +++ b/test/dates/ranges.jl @@ -11,7 +11,9 @@ let for pos_step in (P(1), P(2), P(50), P(2048), P(10000)) # empty range dr = f1:pos_step:l1 - @test length(dr) == 0 + len = length(dr) + @test len == 0 + @test isa(len, Int64) @test isempty(dr) @test first(dr) == f1 @test last(dr) < f1 @@ -36,7 +38,7 @@ let dr = f:pos_step:l len = length(dr) @test len > 0 - @test typeof(len) <: Int64 + @test isa(len, Int64) @test !isempty(dr) @test first(dr) == f @test last(dr) <= l @@ -63,7 +65,9 @@ let for neg_step in (P(-1), P(-2), P(-50), P(-2048), P(-10000)) # empty range dr = l1:neg_step:f1 - @test length(dr) == 0 + len = length(dr) + @test len == 0 + @test isa(len, Int64) @test isempty(dr) @test first(dr) == l1 @test last(dr) > l1 @@ -88,7 +92,7 @@ let dr = l:neg_step:f len = length(dr) @test len > 0 - @test typeof(len) <: Int64 + @test isa(len, Int64) @test !isempty(dr) @test first(dr) == l @test last(dr) >= f @@ -117,7 +121,9 @@ let for pos_step in (P(1), P(2), P(50), P(2048), P(10000)) # empty range dr = f1:pos_step:l1 - @test length(dr) == 0 + len = length(dr) + @test len == 0 + @test isa(len, Int64) @test isempty(dr) @test first(dr) == f1 @test last(dr) < f1 @@ -142,7 +148,7 @@ let dr = f:pos_step:l len = length(dr) @test len > 0 - @test typeof(len) <: Int64 + @test isa(len, Int64) @test !isempty(dr) @test first(dr) == f @test last(dr) <= l @@ -169,7 +175,9 @@ let for neg_step in (P(-1), P(-2), P(-50), P(-2048), P(-10000)) # empty range dr = l1:neg_step:f1 - @test length(dr) == 0 + len = length(dr) + @test len == 0 + @test isa(len, Int64) @test isempty(dr) @test first(dr) == l1 @test last(dr) > l1 @@ -194,7 +202,7 @@ let dr = l:neg_step:f len = length(dr) @test len > 0 - @test typeof(len) <: Int64 + @test isa(len, Int64) @test !isempty(dr) @test first(dr) == l @test last(dr) >= f