Skip to content

Commit a0936f9

Browse files
cmcaineStefanKarpinski
authored andcommitted
Support StepRange{T,U} where U is non-numeric (#32671)
With thanks to @quinnj
1 parent 62857f8 commit a0936f9

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

base/range.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -777,9 +777,9 @@ end
777777
function intersect(r::StepRange, s::StepRange)
778778
if isempty(r) || isempty(s)
779779
return range(first(r), step=step(r), length=0)
780-
elseif step(s) < 0
780+
elseif step(s) < zero(step(s))
781781
return intersect(r, reverse(s))
782-
elseif step(r) < 0
782+
elseif step(r) < zero(step(r))
783783
return reverse(intersect(reverse(r), s))
784784
end
785785

@@ -804,7 +804,7 @@ function intersect(r::StepRange, s::StepRange)
804804

805805
g, x, y = gcdx(step1, step2)
806806

807-
if rem(start1 - start2, g) != 0
807+
if !iszero(rem(start1 - start2, g))
808808
# Unaligned, no overlap possible.
809809
return range(start1, step=a, length=0)
810810
end

test/ranges.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,16 @@ end
361361

362362
@test intersect(1:3, 2) === intersect(2, 1:3) === 2:2
363363
@test intersect(1.0:3.0, 2) == intersect(2, 1.0:3.0) == [2.0]
364+
365+
@testset "Support StepRange with a non-numeric step" begin
366+
start = Date(1914, 7, 28)
367+
stop = Date(1918, 11, 11)
368+
369+
@test intersect(start:Day(1):stop, start:Day(1):stop) == start:Day(1):stop
370+
@test intersect(start:Day(1):stop, start:Day(5):stop) == start:Day(5):stop
371+
@test intersect(start-Day(10):Day(1):stop-Day(10), start:Day(5):stop) ==
372+
start:Day(5):stop-Day(10)-mod(stop-start, Day(5))
373+
end
364374
end
365375
@testset "issubset" begin
366376
@test issubset(1:3, 1:typemax(Int)) #32461

0 commit comments

Comments
 (0)