File: reference_value_map_behavior.rb

package info (click to toggle)
ruby-ref 1.0.5%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 332 kB
  • ctags: 186
  • sloc: ruby: 1,107; java: 92; makefile: 2
file content (135 lines) | stat: -rw-r--r-- 3,728 bytes parent folder | download
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