Skip to content

Commit 49fc01a

Browse files
mcabbottJeffBezanson
authored andcommitted
efficient subset query for unit ranges (#32463)
1 parent 1fc51b7 commit 49fc01a

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

base/range.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -847,6 +847,11 @@ function _findin(r::AbstractRange{<:Integer}, span::AbstractUnitRange{<:Integer}
847847
r isa AbstractUnitRange ? (ifirst:ilast) : (ifirst:1:ilast)
848848
end
849849

850+
issubset(r::OneTo, s::OneTo) = r.stop <= s.stop
851+
852+
issubset(r::AbstractUnitRange{<:Integer}, s::AbstractUnitRange{<:Integer}) =
853+
first(r) >= first(s) && last(r) <= last(s)
854+
850855
## linear operations on ranges ##
851856

852857
-(r::OrdinalRange) = range(-first(r), step=-step(r), length=length(r))

test/ranges.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,20 @@ end
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]
364364
end
365+
@testset "issubset" begin
366+
@test issubset(1:3, 1:typemax(Int)) #32461
367+
@test issubset(1:3, 1:3)
368+
@test issubset(1:3, 1:4)
369+
@test issubset(1:3, 0:3)
370+
@test issubset(1:3, 0:4)
371+
@test !issubset(1:5, 2:5)
372+
@test !issubset(1:5, 1:4)
373+
@test !issubset(1:5, 2:4)
374+
@test issubset(Base.OneTo(5), Base.OneTo(10))
375+
@test !issubset(Base.OneTo(10), Base.OneTo(5))
376+
@test issubset(1:3:10, 1:10)
377+
@test !issubset(1:10, 1:3:10)
378+
end
365379
@testset "sort/sort!/partialsort" begin
366380
@test sort(UnitRange(1,2)) == UnitRange(1,2)
367381
@test sort!(UnitRange(1,2)) == UnitRange(1,2)

0 commit comments

Comments
 (0)