From 5656c45ef3498ad2fdbecba803c868ca37acd7e6 Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Fri, 16 Mar 2018 04:20:25 -0600 Subject: [PATCH] `equalto` is now just `isequal` (JuliaLang/julia#26436) Still waiting on Compat support for this to work on julia 0.6 as well. --- src/UniqueVectors.jl | 40 +++++++++++---------- test/runtests.jl | 84 ++++++++++++++++++++++---------------------- 2 files changed, 63 insertions(+), 61 deletions(-) diff --git a/src/UniqueVectors.jl b/src/UniqueVectors.jl index 7718f05..56f626e 100644 --- a/src/UniqueVectors.jl +++ b/src/UniqueVectors.jl @@ -8,6 +8,8 @@ include("delegate.jl") import Base: copy, in, getindex, findfirst, findlast, length, size, isempty, start, done, next, empty!, push!, pop!, setindex!, indexin, findin, findnext, findprev, find, count +import Base: EqualTo + abstract type AbstractUniqueVector{T} <: AbstractVector{T} end Base.@deprecate_binding UniqueVectorError ArgumentError @@ -49,10 +51,10 @@ end in(item::T, uv::UniqueVector{T}) where {T} = haskey(uv.lookup, item) in(item, uv::UniqueVector{T}) where {T} = in(convert(T, item), uv) -findfirst(p::equalto{<:T}, uv::UniqueVector{T}) where {T} = +findfirst(p::EqualTo{<:T}, uv::UniqueVector{T}) where {T} = get(uv.lookup, p.x, 0) -function findfirst!(p::equalto{<:T}, uv::UniqueVector{T}) where {T} +function findfirst!(p::EqualTo{<:T}, uv::UniqueVector{T}) where {T} rv = get!(uv.lookup, p.x) do # NOTE: does not provide any exception safety guarantee push!(uv.items, p.x) @@ -62,51 +64,51 @@ function findfirst!(p::equalto{<:T}, uv::UniqueVector{T}) where {T} return rv end -findfirst(p::equalto, uv::UniqueVector{T}) where {T} = - findfirst(equalto(convert(T, p.x)), uv) +findfirst(p::EqualTo, uv::UniqueVector{T}) where {T} = + findfirst(isequal(convert(T, p.x)), uv) -findfirst!(p::equalto, uv::UniqueVector{T}) where {T} = - findfirst!(equalto(convert(T, p.x)), uv) +findfirst!(p::EqualTo, uv::UniqueVector{T}) where {T} = + findfirst!(isequal(convert(T, p.x)), uv) -findlast(p::equalto, uv::AbstractUniqueVector) = +findlast(p::EqualTo, uv::AbstractUniqueVector) = findfirst(p, uv) if VERSION >= v"0.7.0-DEV" - @deprecate findfirst(uv::UniqueVector, item) findfirst(equalto(item), uv) - @deprecate findfirst!(uv::UniqueVector, item) findfirst!(equalto(item), uv) + @deprecate findfirst(uv::UniqueVector, item) findfirst(isequal(item), uv) + @deprecate findfirst!(uv::UniqueVector, item) findfirst!(isequal(item), uv) else - findfirst(uv::UniqueVector, item) = findfirst(equalto(item), uv) - findfirst!(uv::UniqueVector, item) = findfirst!(equalto(item), uv) + findfirst(uv::UniqueVector, item) = findfirst(isequal(item), uv) + findfirst!(uv::UniqueVector, item) = findfirst!(isequal(item), uv) end -@deprecate findlast(uv::UniqueVector, item) findlast(equalto(item), uv) +@deprecate findlast(uv::UniqueVector, item) findlast(isequal(item), uv) indexin(a::AbstractArray, b::AbstractUniqueVector) = - [findlast(equalto(elt), b) for elt in a] + [findlast(isequal(elt), b) for elt in a] findin(a, b::AbstractUniqueVector) = [i for (i, ai) in enumerate(a) if ai ∈ b] -function findnext(p::equalto, A::AbstractUniqueVector, i::Integer) +function findnext(p::EqualTo, A::AbstractUniqueVector, i::Integer) idx = findfirst(p, A) idx >= i ? idx : 0 end -@deprecate findnext(A::UniqueVector, v, i::Integer) findnext(equalto(v), A, i) +@deprecate findnext(A::UniqueVector, v, i::Integer) findnext(isequal(v), A, i) -function findprev(p::equalto, A::AbstractUniqueVector, i::Integer) +function findprev(p::EqualTo, A::AbstractUniqueVector, i::Integer) idx = findfirst(p, A) idx <= i ? idx : 0 end -@deprecate findprev(A::UniqueVector, v, i::Integer) findprev(equalto(v), A, i) +@deprecate findprev(A::UniqueVector, v, i::Integer) findprev(isequal(v), A, i) -function find(p::equalto, uv::AbstractUniqueVector) +function find(p::EqualTo, uv::AbstractUniqueVector) idx = findfirst(p, uv) (idx == 0) ? Int[] : Int[idx] end -count(p::equalto, uv::AbstractUniqueVector) = +count(p::EqualTo, uv::AbstractUniqueVector) = Int(p.x ∈ uv) function push!(uv::UniqueVector{T}, item::T) where {T} diff --git a/test/runtests.jl b/test/runtests.jl index 11e31de..a9d8797 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -10,23 +10,23 @@ uv = UniqueVector{String}() @test isempty(uv) @test_throws ArgumentError pop!(uv) -@test findfirst(equalto("cat"), uv) == 0 -@test findfirst!(equalto("cat"), uv) == 1 +@test findfirst(isequal("cat"), uv) == 0 +@test findfirst!(isequal("cat"), uv) == 1 @test !isempty(uv) @test "cat" in uv @test "dog" ∉ uv -@test count(equalto("cat"), uv) == 1 -@test count(equalto("dog"), uv) == 0 -@test find(equalto("cat"), uv) == [1] -@test find(equalto("dog"), uv) == Int[] -@test findfirst!(equalto("dog"), uv) == 2 -@test findfirst!(equalto("cat"), uv) == 1 -@test findfirst!(equalto("mouse"), uv) == 3 -@test findfirst!(equalto("dog"), uv) == 2 -@test findfirst(equalto("cat"), uv) == 1 -@test findlast(equalto("cat"), uv) == 1 -@test findfirst(equalto("dog"), uv) == 2 -@test findfirst(equalto("mouse"), uv) == 3 +@test count(isequal("cat"), uv) == 1 +@test count(isequal("dog"), uv) == 0 +@test find(isequal("cat"), uv) == [1] +@test find(isequal("dog"), uv) == Int[] +@test findfirst!(isequal("dog"), uv) == 2 +@test findfirst!(isequal("cat"), uv) == 1 +@test findfirst!(isequal("mouse"), uv) == 3 +@test findfirst!(isequal("dog"), uv) == 2 +@test findfirst(isequal("cat"), uv) == 1 +@test findlast(isequal("cat"), uv) == 1 +@test findfirst(isequal("dog"), uv) == 2 +@test findfirst(isequal("mouse"), uv) == 3 @test uv[1] == "cat" @test uv[2] == "dog" @test uv[3] == "mouse" @@ -36,8 +36,8 @@ uv = UniqueVector{String}() @test endof(uv) == 3 uv2 = UniqueVector([1, 2, 3]) -@test findfirst(equalto(0x02), uv2) == 2 -@test findfirst!(equalto(0x02), uv2) == 2 +@test findfirst(isequal(0x02), uv2) == 2 +@test findfirst!(isequal(0x02), uv2) == 2 @test uv2 == UniqueVector(i for i in 1:3) for elt in [3,2,1] @test pop!(uv2) == elt @@ -49,19 +49,19 @@ uv2 = copy(uv) @test empty!(uv) === uv @test isempty(uv) -@test findfirst(equalto("cat"), uv) == 0 -@test findfirst!(equalto("horse"), uv) == 1 +@test findfirst(isequal("cat"), uv) == 0 +@test findfirst!(isequal("horse"), uv) == 1 @test_throws ArgumentError push!(uv, "horse") @test length(uv) == 1 @test push!(uv, "human") === uv -@test findfirst(equalto("human"), uv) == 2 +@test findfirst(isequal("human"), uv) == 2 @test pop!(uv) == "human" @test length(uv) == 1 @test uv[:] == ["horse"] -@test findfirst(equalto("human"), uv) == 0 +@test findfirst(isequal("human"), uv) == 0 @test uv2[:] == ["cat", "dog", "mouse"] -@test findfirst(equalto("cat"), uv2) == 1 +@test findfirst(isequal("cat"), uv2) == 1 let uv = UniqueVector(["cat", "dog", "mouse", "human"]), original = copy(uv) @@ -72,11 +72,11 @@ let uv = UniqueVector(["cat", "dog", "mouse", "human"]), original = copy(uv) swap!(uv, 2, 3) - @test findfirst(equalto("mouse"), uv) == 2 - @test findfirst(equalto("mouse"), original) == 3 + @test findfirst(isequal("mouse"), uv) == 2 + @test findfirst(isequal("mouse"), original) == 3 - @test findfirst(equalto("dog"), uv) == 3 - @test findfirst(equalto("dog"), original) == 2 + @test findfirst(isequal("dog"), uv) == 3 + @test findfirst(isequal("dog"), original) == 2 end @test UniqueVector([1,2,3,4]) == UniqueVector(1:4) @@ -84,12 +84,12 @@ end # Test it works with `Any` datatype let uv3 = UniqueVector([1,"cat",2,"dog"]) @test eltype(uv3) == Any - @test findfirst(equalto(1), uv3) == 1 - @test findlast(equalto(1), uv3) == 1 - @test find(equalto(1), uv3) == [1] - @test count(equalto(1), uv3) == 1 - @test findfirst!(equalto("dog"), uv3) == 4 - @test findfirst!(equalto("horse"), uv3) == 5 + @test findfirst(isequal(1), uv3) == 1 + @test findlast(isequal(1), uv3) == 1 + @test find(isequal(1), uv3) == [1] + @test count(isequal(1), uv3) == 1 + @test findfirst!(isequal("dog"), uv3) == 4 + @test findfirst!(isequal("horse"), uv3) == 5 end # Test setindex! @@ -110,20 +110,20 @@ push!(uv5, 3) uv5[1] = 4 @test uv5[:] == [4.0] @test 4 ∈ uv5 -@test findfirst(equalto(4), uv5) == 1 -@test findlast(equalto(4), uv5) == 1 -@test find(equalto(4), uv5) == [1] +@test findfirst(isequal(4), uv5) == 1 +@test findlast(isequal(4), uv5) == 1 +@test find(isequal(4), uv5) == [1] # Test indexin and findin @test indexin([1,2,34,0,5,56], UniqueVector([34,56,35,1,5,0])) == [4,0,1,6,5,2] @test findin([1,2,34,0,5,56], UniqueVector([34,56,35,1,5,0])) == [1,3,4,5,6] # Test findnext and findprev -@test findnext(equalto(7), UniqueVector([3,5,7,9]), 1) == 3 -@test findnext(equalto(7), UniqueVector([3,5,7,9]), 2) == 3 -@test findnext(equalto(7), UniqueVector([3,5,7,9]), 3) == 3 -@test findnext(equalto(7), UniqueVector([3,5,7,9]), 4) == 0 -@test findprev(equalto(7), UniqueVector([3,5,7,9]), 1) == 0 -@test findprev(equalto(7), UniqueVector([3,5,7,9]), 2) == 0 -@test findprev(equalto(7), UniqueVector([3,5,7,9]), 3) == 3 -@test findprev(equalto(7), UniqueVector([3,5,7,9]), 4) == 3 +@test findnext(isequal(7), UniqueVector([3,5,7,9]), 1) == 3 +@test findnext(isequal(7), UniqueVector([3,5,7,9]), 2) == 3 +@test findnext(isequal(7), UniqueVector([3,5,7,9]), 3) == 3 +@test findnext(isequal(7), UniqueVector([3,5,7,9]), 4) == 0 +@test findprev(isequal(7), UniqueVector([3,5,7,9]), 1) == 0 +@test findprev(isequal(7), UniqueVector([3,5,7,9]), 2) == 0 +@test findprev(isequal(7), UniqueVector([3,5,7,9]), 3) == 3 +@test findprev(isequal(7), UniqueVector([3,5,7,9]), 4) == 3