From a355d82a0d5901c8432d53ac75f927f4f6c3a881 Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Thu, 9 Jun 2016 11:58:48 -0700 Subject: [PATCH 1/2] Added a fallback sorting method, plus a couple more --- base/sort.jl | 7 +++++++ test/sorting.jl | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/base/sort.jl b/base/sort.jl index 62ffe0c9e8ee1..74921004512c3 100644 --- a/base/sort.jl +++ b/base/sort.jl @@ -413,6 +413,13 @@ end sort(v::AbstractVector; kws...) = sort!(copymutable(v); kws...) +## other iterables and fallback ## + +sort(s::String; kws...) = String(sort(collect(s); kws...)) +sort(n::Number) = throw(MethodError("no method matching sort(::Number)")) +sort(itr; kws...) = sort(collect(itr); kws...) + + ## selectperm: the permutation to sort the first k elements of an array ## selectperm(v::AbstractVector, k::Union{Integer,OrdinalRange}; kwargs...) = diff --git a/test/sorting.jl b/test/sorting.jl index 2ec0d37095512..5f29b90c9338d 100644 --- a/test/sorting.jl +++ b/test/sorting.jl @@ -348,3 +348,11 @@ end # issue #12833 - type stability of sort @test Base.return_types(sort, (Vector{Int},)) == [Vector{Int}] + +# general iterables +@test sort(take([3,2,1], 2)) == [2,3] +@test sort(drop([1,3,2], 1)) == [2,3] +@test sort("Julia") == "Jailu" +@test sort("Julia", by=isupper) == "uliaJ" +@test sort(graphemes("bca")) == collect(graphemes("abc")) +@test_throws MethodError sort(1) From 60aae00792ef5eb3e486e77bce1d9a81ea057d03 Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Thu, 9 Jun 2016 14:31:46 -0700 Subject: [PATCH 2/2] Better use of MethodError --- base/sort.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/sort.jl b/base/sort.jl index 74921004512c3..1535955893756 100644 --- a/base/sort.jl +++ b/base/sort.jl @@ -416,7 +416,7 @@ sort(v::AbstractVector; kws...) = sort!(copymutable(v); kws...) ## other iterables and fallback ## sort(s::String; kws...) = String(sort(collect(s); kws...)) -sort(n::Number) = throw(MethodError("no method matching sort(::Number)")) +sort(n::Number) = throw(MethodError(sort, n)) sort(itr; kws...) = sort(collect(itr); kws...)