From a573b51641df96bcea6ebefbd24748955603c383 Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Sun, 16 Sep 2018 07:12:46 -0500 Subject: [PATCH] Remove OrderedCollections tests --- test/runtests.jl | 2 - test/test_ordered_dict.jl | 376 -------------------------------------- test/test_ordered_set.jl | 264 -------------------------- 3 files changed, 642 deletions(-) delete mode 100644 test/test_ordered_dict.jl delete mode 100644 test/test_ordered_set.jl diff --git a/test/runtests.jl b/test/runtests.jl index c854e2bab..c18f267c8 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -19,8 +19,6 @@ tests = ["int_set", "binheap", "mutable_binheap", "default_dict", - "ordered_dict", - "ordered_set", "trie", "list", "multi_dict", diff --git a/test/test_ordered_dict.jl b/test/test_ordered_dict.jl deleted file mode 100644 index c4169bb90..000000000 --- a/test/test_ordered_dict.jl +++ /dev/null @@ -1,376 +0,0 @@ -using DataStructures, Test - -@testset "OrderedDict" begin - - @testset "Constructors" begin - @test isa(OrderedDict(), OrderedDict{Any,Any}) - @test isa(OrderedDict([(1,2.0)]), OrderedDict{Int,Float64}) - @test isa(OrderedDict([("a",1),("b",2)]), OrderedDict{String,Int}) - @test isa(OrderedDict(Pair(1, 1.0)), OrderedDict{Int,Float64}) - @test isa(OrderedDict(Pair(1, 1.0), Pair(2, 2.0)), OrderedDict{Int,Float64}) - @test isa(OrderedDict(Pair(1, 1.0), Pair(2, 2.0), Pair(3, 3.0)), OrderedDict{Int,Float64}) - end - - @testset "empty dictionary" begin - d = OrderedDict{Char, Int}() - @test length(d) == 0 - @test isempty(d) - @test_throws KeyError d['c'] == 1 - d['c'] = 1 - @test !isempty(d) - @test_throws KeyError d[0.01] - @test isempty(empty(d)) - empty!(d) - @test isempty(d) - - # access, modification - for c in 'a':'z' - d[c] = c - 'a' + 1 - end - - @test (d['a'] += 1) == 2 - @test 'a' in keys(d) - @test haskey(d, 'a') - @test get(d, 'B', 0) == 0 - @test !('B' in keys(d)) - @test !haskey(d, 'B') - @test pop!(d, 'a') == 2 - - @test collect(keys(d)) == collect('b':'z') - @test collect(values(d)) == collect(2:26) - @test collect(d) == [Pair(a,i) for (a,i) in zip('b':'z', 2:26)] - end - - @testset "Issue #60" begin - od60 = OrderedDict{Int,Int}() - od60[1] = 2 - - ranges = [2:5, 6:9, 10:13] - for range in ranges - for i = range - od60[i] = i+1 - end - for i = range - delete!( od60, i ) - end - end - od60[14]=15 - - @test od60[14] == 15 - end - - - ############################## - # Copied and modified from Base/test/dict.jl - - # OrderedDict - - @testset "OrderedDict{Int,Int}" begin - h = OrderedDict{Int,Int}() - for i=1:10000 - h[i] = i+1 - end - - @test collect(h) == [Pair(x,y) for (x,y) in zip(1:10000, 2:10001)] - - for i=1:2:10000 - delete!(h, i) - end - for i=1:2:10000 - h[i] = i+1 - end - - for i=1:10000 - @test h[i]==i+1 - end - - for i=1:10000 - delete!(h, i) - end - @test isempty(h) - - h[77] = 100 - @test h[77]==100 - - for i=1:10000 - h[i] = i+1 - end - - for i=1:2:10000 - delete!(h, i) - end - - for i=10001:20000 - h[i] = i+1 - end - - for i=2:2:10000 - @test h[i]==i+1 - end - - for i=10000:20000 - @test h[i]==i+1 - end - end - - @testset "OrderedDict{Any,Any}" begin - h = OrderedDict{Any,Any}([("a", 3)]) - @test h["a"] == 3 - h["a","b"] = 4 - @test h["a","b"] == h[("a","b")] == 4 - h["a","b","c"] = 4 - @test h["a","b","c"] == h[("a","b","c")] == 4 - end - - @testset "KeyError" begin - z = OrderedDict() - get_KeyError = false - try - z["a"] - catch _e123_ - get_KeyError = isa(_e123_, KeyError) - end - @test get_KeyError - end - - @testset "filter" begin - _d = OrderedDict([("a", 0)]) - v = [k for k in filter(x->length(x)==1, collect(keys(_d)))] - @test isa(v, Vector{String}) - end - - @testset "from tuple/vector/pairs/tuple of pair 1" begin - d = OrderedDict(((1, 2), (3, 4))) - d2 = OrderedDict([(1, 2), (3, 4)]) - d3 = OrderedDict(1 => 2, 3 => 4) - d4 = OrderedDict((1 => 2, 3 => 4)) - - @test d[1] === 2 - @test d[3] === 4 - - @test d == d2 == d3 == d4 - @test isa(d, OrderedDict{Int,Int}) - @test isa(d2, OrderedDict{Int,Int}) - @test isa(d3, OrderedDict{Int,Int}) - @test isa(d4, OrderedDict{Int,Int}) - end - - @testset "from tuple/vector/pairs/tuple of pair 2" begin - d = OrderedDict(((1, 2), (3, "b"))) - d2 = OrderedDict([(1, 2), (3, "b")]) - d3 = OrderedDict(1 => 2, 3 => "b") - d4 = OrderedDict((1 => 2, 3 => "b")) - - @test d2[1] === 2 - @test d2[3] == "b" - - ## TODO: tuple of tuples doesn't work for mixed tuple types - # @test d == d2 == d3 == d4 - # @test isa(d, OrderedDict{Int,Any}) - @test d2 == d3 == d4 - @test isa(d2, OrderedDict{Int,Any}) - @test isa(d3, OrderedDict{Int,Any}) - @test isa(d4, OrderedDict{Int,Any}) - end - - @testset "from tuple/vector/pairs/tuple of pair 3" begin - d = OrderedDict(((1, 2), ("a", 4))) - d2 = OrderedDict([(1, 2), ("a", 4)]) - d3 = OrderedDict(1 => 2, "a" => 4) - d4 = OrderedDict((1 => 2, "a" => 4)) - - @test d2[1] === 2 - @test d2["a"] === 4 - - ## TODO: tuple of tuples doesn't work for mixed tuple types - # @test d == d2 == d3 == d4 - @test d2 == d3 == d4 - # @test isa(d, OrderedDict{Any,Int}) - @test isa(d2, OrderedDict{Any,Int}) - @test isa(d3, OrderedDict{Any,Int}) - @test isa(d4, OrderedDict{Any,Int}) - end - - @testset "from tuple/vector/pairs/tuple of pair 4" begin - d = OrderedDict(((1, 2), ("a", "b"))) - d2 = OrderedDict([(1, 2), ("a", "b")]) - d3 = OrderedDict(1 => 2, "a" => "b") - d4 = OrderedDict((1 => 2, "a" => "b")) - - @test d[1] === 2 - @test d["a"] == "b" - - @test d == d2 == d3 == d4 - @test isa(d, OrderedDict{Any,Any}) - @test isa(d2, OrderedDict{Any,Any}) - @test isa(d3, OrderedDict{Any,Any}) - @test isa(d4, OrderedDict{Any,Any}) - end - - @testset "first" begin - @test_throws ArgumentError first(OrderedDict()) - @test first(OrderedDict([(:f, 2)])) == Pair(:f,2) - end - - @testset "Issue #1821" begin - d = OrderedDict{String, Vector{Int}}() - d["a"] = [1, 2] - @test_throws MethodError d["b"] = 1 - @test isa(repr(d), AbstractString) # check that printable without error - end - - @testset "Issue #2344" begin - bestkey(d, key) = key - bestkey(d::AbstractDict{K,V}, key) where {K<:AbstractString,V} = string(key) - bar(x) = bestkey(x, :y) - @test bar(OrderedDict([(:x, [1,2,5])])) == :y - @test bar(OrderedDict([("x", [1,2,5])])) == "y" - end - - @testset "isequal" begin - @test isequal(OrderedDict(), OrderedDict()) - @test isequal(OrderedDict([(1, 1)]), OrderedDict([(1, 1)])) - @test !isequal(OrderedDict([(1, 1)]), OrderedDict()) - @test !isequal(OrderedDict([(1, 1)]), OrderedDict([(1, 2)])) - @test !isequal(OrderedDict([(1, 1)]), OrderedDict([(2, 1)])) - - @test isequal(OrderedDict(), sizehint!(OrderedDict(),96)) - - # Here is what currently happens when dictionaries of different types - # are compared. This is not necessarily desirable. These tests are - # descriptive rather than proscriptive. - @test !isequal(OrderedDict([(1, 2)]), OrderedDict([("dog", "bone")])) - @test isequal(OrderedDict{Int,Int}(), OrderedDict{AbstractString,AbstractString}()) - end - - @testset "data_in" begin - # Generate some data to populate dicts to be compared - data_in = [ (rand(1:1000), randstring(2)) for _ in 1:1001 ] - - # Populate the first dict - d1 = OrderedDict{Int, String}() - for (k,v) in data_in - d1[k] = v - end - data_in = collect(d1) - # shuffle the data - for i in 1:length(data_in) - j = rand(1:length(data_in)) - data_in[i], data_in[j] = data_in[j], data_in[i] - end - # Inserting data in different (shuffled) order should result in - # equivalent dict. - d2 = OrderedDict{Int, AbstractString}() - for (k,v) in data_in - d2[k] = v - end - - @test isequal(d1, d2) - d3 = copy(d2) - d4 = copy(d2) - # Removing an item gives different dict - delete!(d1, data_in[rand(1:length(data_in))][1]) - @test !isequal(d1, d2) - # Changing a value gives different dict - d3[data_in[rand(1:length(data_in))][1]] = randstring(3) - !isequal(d1, d3) - # Adding a pair gives different dict - d4[1001] = randstring(3) - @test !isequal(d1, d4) - end - - @testset "get!" begin - # get! (get with default values assigned to the given location) - f(x) = x^2 - d = OrderedDict(8 => 19) - - @test get!(d, 8, 5) == 19 - @test get!(d, 19, 2) == 2 - - @test get!(d, 42) do # d is updated with f(2) - f(2) - end == 4 - - @test get!(d, 42) do # d is not updated - f(200) - end == 4 - - @test get(d, 13) do # d is not updated - f(4) - end == 16 - - @test d == OrderedDict(8=>19, 19=>2, 42=>4) - end - - @testset "Issue #5886" begin - d5886 = OrderedDict() - for k5886 in 1:11 - d5886[k5886] = 1 - end - for k5886 in keys(d5886) - # undefined ref if not fixed - d5886[k5886] += 1 - end - end - - @testset "Issue #216" begin - @test DataStructures.isordered(OrderedDict{Int, String}) - @test !DataStructures.isordered(Dict{Int, String}) - end - - @testset "Test merging" begin - a = OrderedDict("foo" => 0.0, "bar" => 42.0) - b = OrderedDict("フー" => 17, "バー" => 4711) - @test isa(merge(a, b), OrderedDict{String,Float64}) - end - - @testset "Issue #9295" begin - d = OrderedDict() - @test push!(d, 'a'=> 1) === d - @test d['a'] == 1 - @test push!(d, 'b' => 2, 'c' => 3) === d - @test d['b'] == 2 - @test d['c'] == 3 - @test push!(d, 'd' => 4, 'e' => 5, 'f' => 6) === d - @test d['d'] == 4 - @test d['e'] == 5 - @test d['f'] == 6 - @test length(d) == 6 - end - - @testset "Serialization" begin - s = IOBuffer() - od = OrderedDict{Char,Int64}() - for c in 'a':'e' - od[c] = c-'a'+1 - end - serialize(s, od) - seek(s, 0) - dd = deserialize(s) - @test isa(dd, DataStructures.OrderedDict{Char,Int64}) - @test dd == od - close(s) - end - - @testset "Issue #148" begin - d148 = OrderedDict( - :gps => [], - :direction => 1:8, - :weather => 1:10 - ) - - d148_2 = OrderedDict( - :time => 1:10, - :features => OrderedDict( - :gps => 1:5, - :direction => 1:8, - :weather => 1:10 - ) - ) - end - - @testset "Issue #400" begin - @test filter(p->first(p) > 1, OrderedDict(1=>2, 3=>4)) isa OrderedDict - end - -end # @teestset OrderedDict diff --git a/test/test_ordered_set.jl b/test/test_ordered_set.jl deleted file mode 100644 index f114e12f6..000000000 --- a/test/test_ordered_set.jl +++ /dev/null @@ -1,264 +0,0 @@ -@testset "OrderedSet" begin - - @testset "Constructors" begin - @test isa(OrderedSet(), OrderedSet{Any}) - @test isa(OrderedSet([1,2,3]), OrderedSet{Int}) - @test isa(OrderedSet{Int}([3]), OrderedSet{Int}) - data_in = (1, "banana", ()) - s = OrderedSet(data_in) - data_out = collect(s) - @test isa(data_out, Array{Any,1}) - @test tuple(data_out...) === data_in - @test tuple(data_in...) === tuple(s...) - @test length(data_out) == length(data_in) - end - - @testset "hash" begin - s1 = OrderedSet{String}(["bar", "foo"]) - s2 = OrderedSet{String}(["foo", "bar"]) - s3 = OrderedSet{String}(["baz"]) - @test hash(s1) != hash(s2) - @test hash(s1) != hash(s3) - end - - @testset "isequal" begin - @test isequal(OrderedSet(), OrderedSet()) - @test !isequal(OrderedSet(), OrderedSet([1])) - @test isequal(OrderedSet{Any}(Any[1,2]), OrderedSet{Int}([1,2])) - @test !isequal(OrderedSet{Any}(Any[1,2]), OrderedSet{Int}([1,2,3])) - - @test isequal(OrderedSet{Int}(), OrderedSet{AbstractString}()) - @test !isequal(OrderedSet{Int}(), OrderedSet{AbstractString}([""])) - @test !isequal(OrderedSet{AbstractString}(), OrderedSet{Int}([0])) - @test !isequal(OrderedSet{Int}([1]), OrderedSet{AbstractString}()) - @test isequal(OrderedSet{Any}([1,2,3]), OrderedSet{Int}([1,2,3])) - @test isequal(OrderedSet{Int}([1,2,3]), OrderedSet{Any}([1,2,3])) - @test !isequal(OrderedSet{Any}([1,2,3]), OrderedSet{Int}([1,2,3,4])) - @test !isequal(OrderedSet{Int}([1,2,3]), OrderedSet{Any}([1,2,3,4])) - @test !isequal(OrderedSet{Any}([1,2,3,4]), OrderedSet{Int}([1,2,3])) - @test !isequal(OrderedSet{Int}([1,2,3,4]), OrderedSet{Any}([1,2,3])) - end - - @testset "eltype, empty" begin - s1 = empty(OrderedSet([1,"hello"])) - @test isequal(s1, OrderedSet()) - @test eltype(s1) === Any - s2 = empty(OrderedSet{Float32}([2.0f0,3.0f0,4.0f0])) - @test isequal(s2, OrderedSet()) - @test eltype(s2) === Float32 - end - - @testset "show" begin - @test endswith(sprint(show, OrderedSet()), "OrderedSet{Any}()") - @test endswith(sprint(show, OrderedSet(['a'])), "OrderedSet{Char}(['a'])") - end - - @testset "Core Functionality" begin - s = OrderedSet(); push!(s,1); push!(s,2); push!(s,3) - @test !isempty(s) - @test in(1,s) - @test in(2,s) - @test length(s) == 3 - push!(s,1); push!(s,2); push!(s,3) - @test length(s) == 3 - @test pop!(s,1) == 1 - @test !in(1,s) - @test in(2,s) - @test length(s) == 2 - @test_throws KeyError pop!(s,1) - @test pop!(s,1,:foo) == :foo - @test length(delete!(s,2)) == 1 - @test !in(1,s) - @test !in(2,s) - @test pop!(s) == 3 - @test length(s) == 0 - @test isempty(s) - end - - @testset "copy" begin - data_in = (1,2,9,8,4) - s = OrderedSet(data_in) - c = copy(s) - @test isequal(s,c) - v = pop!(s) - @test !in(v,s) - @test in(v,c) - push!(s,100) - push!(c,200) - @test !in(100,c) - @test !in(200,s) - end - - @testset "sizehint!, empty" begin - s = OrderedSet([1]) - @test isequal(sizehint!(s, 10), OrderedSet([1])) - @test isequal(empty!(s), OrderedSet()) - # TODO: rehash - end - - @testset "iterate" begin - for data_in in ((7,8,4,5), - ("hello", 23, 2.7, (), [], (1,8))) - s = OrderedSet(data_in) - - s_new = OrderedSet() - for el in s - push!(s_new, el) - end - @test isequal(s, s_new) - - t = tuple(s...) - - @test t === data_in - @test length(t) == length(s) - for (e,f) in zip(t,s) - @test e === f - end - end - end - - @testset "union" begin - @test isequal(union(OrderedSet([1])),OrderedSet([1])) - s = ∪(OrderedSet([1,2]), OrderedSet([3,4])) - @test isequal(s, OrderedSet([1,2,3,4])) - s = union(OrderedSet([5,6,7,8]), OrderedSet([7,8,9])) - @test isequal(s, OrderedSet([5,6,7,8,9])) - s = OrderedSet([1,3,5,7]) - union!(s,(2,3,4,5)) - # TODO: order is not the same, so isequal should return false... - @test isequal(s,OrderedSet([1,2,3,4,5,7])) - end - - @testset "intersect" begin - @test isequal(intersect(OrderedSet([1])),OrderedSet([1])) - s = ∩(OrderedSet([1,2]), OrderedSet([3,4])) - @test isequal(s, OrderedSet()) - s = intersect(OrderedSet([5,6,7,8]), OrderedSet([7,8,9])) - @test isequal(s, OrderedSet([7,8])) - @test isequal(intersect(OrderedSet([2,3,1]), OrderedSet([4,2,3]), OrderedSet([5,4,3,2])), OrderedSet([2,3])) - end - - @testset "indexing" begin - s = OrderedSet([1,3,5,7]) - @test s[1] == 1 - @test s[2] == 3 - @test s[end] == 7 - end - - @testset "find" begin - s = OrderedSet([1,3,5,7]) - @test findfirst(isequal(1), s) == 1 - @test findfirst(isequal(7), s) == 4 - if VERSION >= v"0.7.0-DEV.3399" - @test findfirst(isequal(2), s) == nothing - else - @test findfirst(isequal(2), s) == 0 - end - end - - @testset "setdiff" begin - @test isequal(setdiff(OrderedSet([1,2,3]), OrderedSet()), OrderedSet([1,2,3])) - @test isequal(setdiff(OrderedSet([1,2,3]), OrderedSet([1])), OrderedSet([2,3])) - @test isequal(setdiff(OrderedSet([1,2,3]), OrderedSet([1,2])), OrderedSet([3])) - @test isequal(setdiff(OrderedSet([1,2,3]), OrderedSet([1,2,3])), OrderedSet()) - @test isequal(setdiff(OrderedSet([1,2,3]), OrderedSet([4])), OrderedSet([1,2,3])) - @test isequal(setdiff(OrderedSet([1,2,3]), OrderedSet([4,1])), OrderedSet([2,3])) - s = OrderedSet([1,3,5,7]) - setdiff!(s,(3,5)) - @test isequal(s,OrderedSet([1,7])) - s = OrderedSet([1,2,3,4]) - setdiff!(s, OrderedSet([2,4,5,6])) - @test isequal(s,OrderedSet([1,3])) - end - - @testset "ordering" begin - @test OrderedSet() < OrderedSet([1]) - @test OrderedSet([1]) < OrderedSet([1,2]) - @test !(OrderedSet([3]) < OrderedSet([1,2])) - @test !(OrderedSet([3]) > OrderedSet([1,2])) - @test OrderedSet([1,2,3]) > OrderedSet([1,2]) - @test !(OrderedSet([3]) <= OrderedSet([1,2])) - @test !(OrderedSet([3]) >= OrderedSet([1,2])) - @test OrderedSet([1]) <= OrderedSet([1,2]) - @test OrderedSet([1,2]) <= OrderedSet([1,2]) - @test OrderedSet([1,2]) >= OrderedSet([1,2]) - @test OrderedSet([1,2,3]) >= OrderedSet([1,2]) - @test !(OrderedSet([1,2,3]) >= OrderedSet([1,2,4])) - @test !(OrderedSet([1,2,3]) <= OrderedSet([1,2,4])) - end - - @testset "issubset, symdiff" begin - for (l,r) in ((OrderedSet([1,2]), OrderedSet([3,4])), - (OrderedSet([5,6,7,8]), OrderedSet([7,8,9])), - (OrderedSet([1,2]), OrderedSet([3,4])), - (OrderedSet([5,6,7,8]), OrderedSet([7,8,9])), - (OrderedSet([1,2,3]), OrderedSet()), - (OrderedSet([1,2,3]), OrderedSet([1])), - (OrderedSet([1,2,3]), OrderedSet([1,2])), - (OrderedSet([1,2,3]), OrderedSet([1,2,3])), - (OrderedSet([1,2,3]), OrderedSet([4])), - (OrderedSet([1,2,3]), OrderedSet([4,1]))) - @test issubset(intersect(l,r), l) - @test issubset(intersect(l,r), r) - @test issubset(l, union(l,r)) - @test issubset(r, union(l,r)) - @test isequal(union(intersect(l,r),symdiff(l,r)), union(l,r)) - end - @test ⊆(OrderedSet([1]), OrderedSet([1,2])) - - ## TODO: not implemented for OrderedSets - #@test ⊊(OrderedSet([1]), OrderedSet([1,2])) - #@test !⊊(OrderedSet([1]), OrderedSet([1])) - #@test ⊈(OrderedSet([1]), OrderedSet([2])) - - # TODO: returns false! - # == is not properly defined for OrderedSets - #@test symdiff(OrderedSet([1,2,3,4]), OrderedSet([2,4,5,6])) == OrderedSet([1,3,5,6]) - - if VERSION >= v"0.7.0-DEV.3127" - # in Julia 0.7 symdiff always returns an array - @test isequal(symdiff(OrderedSet([1,2,3,4]), OrderedSet([2,4,5,6])), [1,3,5,6]) - else - @test isequal(symdiff(OrderedSet([1,2,3,4]), OrderedSet([2,4,5,6])), OrderedSet([1,3,5,6])) - end - - end - - @testset "filter" begin - s = OrderedSet([1,2,3,4]) - @test isequal(filter(isodd,s), OrderedSet([1,3])) - filter!(isodd, s) - @test isequal(s, OrderedSet([1,3])) - end - - @testset "first" begin - @test_throws ArgumentError first(OrderedSet()) - @test first(OrderedSet([2])) == 2 - end - - @testset "empty set" begin - d = OrderedSet{Char}() - @test length(d) == 0 - @test isempty(d) - @test !('c' in d) - push!(d, 'c') - @test !isempty(d) - empty!(d) - @test isempty(d) - end - - @testset "access, modification" begin - d = OrderedSet{Char}() - - for c in 'a':'z' - push!(d, c) - end - - for c in 'a':'z' - @test c in d - end - - @test collect(d) == collect('a':'z') - end - -end # @testset OrderedSet