Skip to content

Commit 6ccc543

Browse files
committed
Add specialized unique(::AbstractRange) method
1 parent 4d215e4 commit 6ccc543

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

base/set.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ _unique_from(itr, out, seen, i) = unique_from(itr, out, seen, i)
166166
return out
167167
end
168168

169+
unique(r::AbstractRange) = allunique(r) ? r : oftype(r, r[begin:begin])
170+
169171
"""
170172
unique(f, itr)
171173

test/sets.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,13 @@ end
392392
@test @inferred(unique(x->x^2, Integer[3, -4, 5, 4])) == Integer[3, -4, 5]
393393
@test @inferred(unique(iseven, Integer[3, -4, 5, 4]; seen=Set{Bool}())) == Integer[3, -4]
394394
@test @inferred(unique(n -> n % 3, [5, 1, 8, 9, 3, 4, 10, 7, 2, 6])) == [5, 1, 9]
395+
for r = (Base.OneTo(-1), Base.OneTo(0), Base.OneTo(1), Base.OneTo(5),
396+
1:0, 1:1, 1:2, 1:10, 1:.5:.5, 1:.5:1, 1:.5:10, 3:-2:5, 3:-2:3, 3:-2:1,
397+
StepRangeLen(1.0, 2.0, 0), StepRangeLen(1.0, 2.0, 2), StepRangeLen(1.0, 2.0, 3),
398+
StepRangeLen(1.0, 0.0, 0), StepRangeLen(1.0, -0.0, 1), StepRangeLen(1.0, 0.0, 2),
399+
LinRange(1, 2, 3), LinRange(1, 1, 0), LinRange(1, 1, 1), LinRange(1, 1, 10))
400+
@test @inferred(unique(r)) == invoke(unique, Tuple{Any}, r)
401+
end
395402
end
396403

397404
@testset "issue 20105" begin

0 commit comments

Comments
 (0)