From e62f4696ddce7d65e51ec87730255477e9ee6dc2 Mon Sep 17 00:00:00 2001 From: Micah Rufsvold <86363075+mrufsvold@users.noreply.github.com> Date: Wed, 28 Jun 2023 22:57:33 -0400 Subject: [PATCH] fix: check key values, not `get` return for haskey(k, orderedrobindict) (#858) * fix: check key values, not `get` return for haskey(k, orderedrobindict) * Fix: use isequal in setindex! * re-fix: use `get` for `in keys()` but descend to the actual id-dict * Remove accidental paste in docstring * consolidate tests for issue under testset --------- Co-authored-by: Micah Rufsvold --- src/ordered_robin_dict.jl | 6 +++--- test/runtests.jl | 3 ++- test/test_ordered_robin_dict.jl | 7 +++++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/ordered_robin_dict.jl b/src/ordered_robin_dict.jl index 917e1a84b..141a5f757 100644 --- a/src/ordered_robin_dict.jl +++ b/src/ordered_robin_dict.jl @@ -132,7 +132,7 @@ function Base.setindex!(h::OrderedRobinDict{K, V}, v0, key0) where {K,V} else @assert haskey(h, key0) @inbounds orig_v = h.vals[index] - (orig_v != v0) && (@inbounds h.vals[index] = v0) + !isequal(orig_v, v0) && (@inbounds h.vals[index] = v0) end check_for_rehash(h) && rehash!(h) @@ -305,8 +305,8 @@ julia> haskey(D, 'c') false ``` """ -Base.haskey(h::OrderedRobinDict, key) = (get(h.dict, key, -2) > 0) -Base.in(key, v::Base.KeySet{K,T}) where {K,T<:OrderedRobinDict{K}} = (get(v.dict, key, -1) >= 0) +Base.haskey(h::OrderedRobinDict, key) = (get(h.dict, key, -1) > 0) +Base.in(key, v::Base.KeySet{K,T}) where {K,T<:OrderedRobinDict{K}} = (get(v.dict.dict, key, -1) >= 0) """ getkey(collection, key, default) diff --git a/test/runtests.jl b/test/runtests.jl index 33927d2a4..d44fe5bc5 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -8,7 +8,8 @@ import DataStructures: IntSet @test [] == detect_ambiguities(Core, DataStructures) @test [] == detect_ambiguities(Base, DataStructures) -tests = ["deprecations", +tests = [ + "deprecations", "int_set", "sparse_int_set", "deque", diff --git a/test/test_ordered_robin_dict.jl b/test/test_ordered_robin_dict.jl index 2a78fc7aa..79efa6572 100644 --- a/test/test_ordered_robin_dict.jl +++ b/test/test_ordered_robin_dict.jl @@ -78,6 +78,13 @@ @test od60[14] == 15 end + @testset "Fixes issue 857" begin + h = OrderedRobinDict{Any,Any}([("a", missing), ("b", -2)]) + @test 5 == (h["a"] = 5) + @test "b" in keys(h) + @test haskey(h,"b") + end + # ############################# # Copied and modified from Base/test/dict.jl