1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
module ReferenceValueMapBehavior
def test_keeps_entries_with_strong_references
Ref::Mock.use do
hash = map_class.new
value_1 = "value 1"
value_2 = "value 2"
hash["key 1"] = value_1
hash["key 2"] = value_2
assert_equal value_1, hash["key 1"]
assert_equal value_2, hash["key 2"]
end
end
def test_removes_entries_that_have_been_garbage_collected
Ref::Mock.use do
hash = map_class.new
value_1 = "value 1"
value_2 = "value 2"
hash["key 1"] = value_1
hash["key 2"] = value_2
assert_equal "value 2", hash["key 2"]
assert_equal "value 1", hash["key 1"]
Ref::Mock.gc(value_2)
assert_nil hash["key 2"]
assert_equal value_1, hash["key 1"]
end
end
def test_can_clear_the_map
Ref::Mock.use do
hash = map_class.new
value_1 = "value 1"
value_2 = "value 2"
hash["key 1"] = value_1
hash["key 2"] = value_2
hash.clear
assert_nil hash["key 1"]
assert_nil hash["key 2"]
end
end
def test_can_delete_entries
Ref::Mock.use do
hash = map_class.new
value_1 = "value 1"
value_2 = "value 2"
hash["key 1"] = value_1
hash["key 2"] = value_2
Ref::Mock.gc(value_2)
assert_nil hash.delete("key 2")
assert_equal value_1, hash.delete("key 1")
assert_nil hash["key 1"]
end
end
def test_can_merge_in_another_hash
Ref::Mock.use do
hash = map_class.new
value_1 = "value 1"
value_2 = "value 2"
value_3 = "value 3"
hash["key 1"] = value_1
hash["key 2"] = value_2
hash.merge!("key 3" => value_3)
assert_equal "value 2", hash["key 2"]
assert_equal value_1, hash["key 1"]
Ref::Mock.gc(value_2)
assert_nil hash["key 2"]
assert_equal value_1, hash["key 1"]
assert_equal value_3, hash["key 3"]
end
end
def test_can_get_all_values
Ref::Mock.use do
hash = map_class.new
value_1 = "value 1"
value_2 = "value 2"
value_3 = "value 3"
hash["key 1"] = value_1
hash["key 2"] = value_2
hash["key 3"] = value_3
assert_equal ["value 1", "value 2", "value 3"].sort, hash.values.sort
Ref::Mock.gc(value_2)
assert_equal ["value 1", "value 3"].sort, hash.values.sort
end
end
def test_can_turn_into_an_array
Ref::Mock.use do
hash = map_class.new
value_1 = "value 1"
value_2 = "value 2"
value_3 = "value 3"
hash["key 1"] = value_1
hash["key 2"] = value_2
hash["key 3"] = value_3
order = lambda{|a,b| a.first <=> b.first}
assert_equal [["key 1", "value 1"], ["key 2", "value 2"], ["key 3", "value 3"]].sort(&order), hash.to_a.sort(&order)
Ref::Mock.gc(value_2)
assert_equal [["key 1", "value 1"], ["key 3", "value 3"]].sort(&order), hash.to_a.sort(&order)
end
end
def test_can_iterate_over_all_entries
Ref::Mock.use do
hash = map_class.new
value_1 = "value 1"
value_2 = "value 2"
value_3 = "value 3"
hash["key 1"] = value_1
hash["key 2"] = value_2
hash["key 3"] = value_3
keys = []
values = []
hash.each{|k,v| keys << k; values << v}
assert_equal ["key 1", "key 2", "key 3"], keys.sort
assert_equal ["value 1", "value 2", "value 3"], values.sort
Ref::Mock.gc(value_2)
keys = []
values = []
hash.each{|k,v| keys << k; values << v}
assert_equal ["key 1", "key 3"], keys.sort
assert_equal ["value 1", "value 3"], values.sort
end
end
def test_inspect
Ref::Mock.use do
hash = map_class.new
hash["key 1"] = "value 1"
assert hash.inspect
end
end
end
|