hamster 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,7 @@
1
+ === 0.1.7 / 2009-11-27
2
+
3
+ * Implemented eql?/== for Hash and Set.
4
+
1
5
  === 0.1.6 / 2009-11-23
2
6
 
3
7
  * First cut at finishing implementation of Hash.
@@ -54,7 +54,9 @@ module Hamster
54
54
 
55
55
  # Returns <tt>true</tt> if . <tt>eql?</tt> is synonymous with <tt>==</tt>
56
56
  def eql?(other)
57
- equal?(other) || (self.class.equal?(other.class) && @trie.eql?(other.instance_eval{@trie}))
57
+ return true if equal?(other)
58
+ return false unless self.class.equal?(other.class)
59
+ return @trie.eql?(other.instance_eval{@trie})
58
60
  end
59
61
  alias :== :eql?
60
62
 
@@ -50,7 +50,9 @@ module Hamster
50
50
 
51
51
  # Returns <tt>true</tt> if . <tt>eql?</tt> is synonymous with <tt>==</tt>
52
52
  def eql?(other)
53
- equal?(other) || (self.class.equal?(other.class) && @trie.eql?(other.instance_eval{@trie}))
53
+ return true if equal?(other)
54
+ return false unless self.class.equal?(other.class)
55
+ return @trie.eql?(other.instance_eval{@trie})
54
56
  end
55
57
  alias :== :eql?
56
58
 
@@ -37,7 +37,7 @@ module Hamster
37
37
  def put(key, value)
38
38
  index = index_for(key)
39
39
  entry = @entries[index]
40
- if !entry || entry.key_eql?(key)
40
+ if !entry || entry.key.eql?(key)
41
41
  entries = @entries.dup
42
42
  entries[index] = Entry.new(key, value)
43
43
  self.class.new(@significant_bits, entries, @children)
@@ -57,7 +57,7 @@ module Hamster
57
57
  def get(key)
58
58
  index = index_for(key)
59
59
  entry = @entries[index]
60
- if entry && entry.key_eql?(key)
60
+ if entry && entry.key.eql?(key)
61
61
  entry
62
62
  else
63
63
  child = @children[index]
@@ -69,12 +69,20 @@ module Hamster
69
69
 
70
70
  # Returns a copy of <tt>self</tt> with the given key (and associated value) removed. If not found, returns <tt>self</tt>.
71
71
  def remove(key)
72
- xxx(key) || Trie.new(@significant_bits)
72
+ find_and_remove(key) || Trie.new(@significant_bits)
73
+ end
74
+
75
+ def include?(key, value)
76
+ entry = get(key)
77
+ entry && value.eql?(entry.value)
73
78
  end
74
79
 
75
80
  # Returns <tt>true</tt> if . <tt>eql?</tt> is synonymous with <tt>==</tt>
76
81
  def eql?(other)
77
- false
82
+ return true if equal?(other)
83
+ return false unless self.class.equal?(other.class) && self.size == other.size
84
+ each { |entry| return false unless other.include?(entry.key, entry.value) }
85
+ true
78
86
  end
79
87
  alias :== :eql?
80
88
 
@@ -89,15 +97,15 @@ module Hamster
89
97
  # Returns a replacement instance after removing the specified key.
90
98
  # If not found, returns <tt>self</tt>.
91
99
  # If empty, returns <tt>nil</tt>.
92
- def xxx(key)
100
+ def find_and_remove(key)
93
101
  index = index_for(key)
94
102
  entry = @entries[index]
95
- if entry && entry.key_eql?(key)
103
+ if entry && entry.key.eql?(key)
96
104
  return remove_at(index)
97
105
  else
98
106
  child = @children[index]
99
107
  if child
100
- copy = child.xxx(key)
108
+ copy = child.find_and_remove(key)
101
109
  if !copy.equal?(child)
102
110
  children = @children.dup
103
111
  children[index] = copy
@@ -141,10 +149,6 @@ module Hamster
141
149
  @value = value
142
150
  end
143
151
 
144
- def key_eql?(key)
145
- @key.eql?(key)
146
- end
147
-
148
152
  end
149
153
 
150
154
  end
@@ -1,5 +1,5 @@
1
1
  module Hamster
2
2
 
3
- VERSION = "0.1.6".freeze
3
+ VERSION = "0.1.7".freeze
4
4
 
5
5
  end
@@ -10,20 +10,22 @@ describe Hamster::Hash do
10
10
  end
11
11
 
12
12
  it "is true for two empty instances" do
13
- pending do
14
- Hamster::Hash.new.should eql(Hamster::Hash.new)
15
- end
13
+ Hamster::Hash.new.should eql(Hamster::Hash.new)
16
14
  end
17
15
 
18
16
  it "is true for two instances with the same key/value pairs" do
19
- pending do
20
- a = Hamster::Hash.new.put("a", "Aye").put("b", "Bee").put("c", "See")
21
- b = Hamster::Hash.new.put("a", "Aye").put("b", "Bee").put("c", "See")
22
- a.should eql(b)
23
- end
17
+ a = Hamster::Hash.new.put("a", "Aye").put("b", "Bee").put("c", "See")
18
+ b = Hamster::Hash.new.put("a", "Aye").put("b", "Bee").put("c", "See")
19
+ a.should eql(b)
24
20
  end
25
21
 
26
22
  it "is false for two instances with different key/value pairs" do
23
+ a = Hamster::Hash.new.put("a", "Aye").put("b", "Bee").put("c", "See")
24
+ b = Hamster::Hash.new.put("a", "Aye").put("b", "Bee").put("d", "Dee")
25
+ a.should_not eql(b)
26
+ end
27
+
28
+ it "is false for two instances with different numbers of overlapping key/value pairs" do
27
29
  a = Hamster::Hash.new.put("a", "Aye").put("b", "Bee").put("c", "See")
28
30
  b = Hamster::Hash.new.put("a", "Aye").put("b", "Bee")
29
31
  a.should_not eql(b)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hamster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Harris
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-23 00:00:00 +11:00
12
+ date: 2009-11-28 00:00:00 +11:00
13
13
  default_executable:
14
14
  dependencies: []
15
15