hamster 1.0.1.pre.rc.1 → 1.0.1.pre.rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hamster/groupable.rb +12 -0
  3. data/lib/hamster/hash.rb +32 -12
  4. data/lib/hamster/list.rb +68 -22
  5. data/lib/hamster/queue.rb +5 -6
  6. data/lib/hamster/set.rb +50 -14
  7. data/lib/hamster/stack.rb +2 -0
  8. data/lib/hamster/trie.rb +34 -14
  9. data/lib/hamster/tuple.rb +9 -24
  10. data/lib/hamster/vector.rb +29 -7
  11. data/lib/hamster/version.rb +1 -1
  12. data/spec/hamster/core_ext/array_spec.rb +4 -10
  13. data/spec/hamster/core_ext/enumerable_spec.rb +1 -0
  14. data/spec/hamster/experimental/mutable_set/add_qm_spec.rb +14 -22
  15. data/spec/hamster/experimental/mutable_set/add_spec.rb +20 -34
  16. data/spec/hamster/experimental/mutable_set/delete_qm_spec.rb +15 -24
  17. data/spec/hamster/experimental/mutable_set/delete_spec.rb +15 -25
  18. data/spec/hamster/experimental/mutable_stack/pop_spec.rb +21 -27
  19. data/spec/hamster/experimental/mutable_stack/push_spec.rb +11 -31
  20. data/spec/hamster/hash/all_spec.rb +21 -34
  21. data/spec/hamster/hash/any_spec.rb +0 -15
  22. data/spec/hamster/hash/clear_spec.rb +1 -8
  23. data/spec/hamster/hash/construction_spec.rb +3 -11
  24. data/spec/hamster/hash/copying_spec.rb +1 -8
  25. data/spec/hamster/hash/delete_spec.rb +1 -10
  26. data/spec/hamster/hash/each_spec.rb +1 -12
  27. data/spec/hamster/hash/empty_spec.rb +8 -8
  28. data/spec/hamster/hash/eql_spec.rb +30 -22
  29. data/spec/hamster/hash/except_spec.rb +1 -10
  30. data/spec/hamster/hash/fetch_spec.rb +1 -24
  31. data/spec/hamster/hash/filter_spec.rb +1 -16
  32. data/spec/hamster/hash/find_spec.rb +1 -14
  33. data/spec/hamster/hash/has_key_spec.rb +1 -10
  34. data/spec/hamster/hash/hash_spec.rb +1 -16
  35. data/spec/hamster/hash/immutable_spec.rb +0 -3
  36. data/spec/hamster/hash/inspect_spec.rb +1 -9
  37. data/spec/hamster/hash/keys_spec.rb +4 -5
  38. data/spec/hamster/hash/map_spec.rb +1 -16
  39. data/spec/hamster/hash/merge_spec.rb +5 -11
  40. data/spec/hamster/hash/new_spec.rb +21 -0
  41. data/spec/hamster/hash/put_spec.rb +13 -11
  42. data/spec/hamster/hash/reduce_spec.rb +7 -15
  43. data/spec/hamster/hash/remove_spec.rb +1 -16
  44. data/spec/hamster/hash/uniq_spec.rb +1 -8
  45. data/spec/hamster/hash/values_spec.rb +1 -6
  46. data/spec/hamster/immutable/copying_spec.rb +1 -8
  47. data/spec/hamster/immutable/immutable_spec.rb +1 -14
  48. data/spec/hamster/immutable/memoize_spec.rb +0 -1
  49. data/spec/hamster/list/add_spec.rb +1 -6
  50. data/spec/hamster/list/all_spec.rb +1 -28
  51. data/spec/hamster/list/any_spec.rb +1 -20
  52. data/spec/hamster/list/append_spec.rb +1 -11
  53. data/spec/hamster/list/at_spec.rb +1 -13
  54. data/spec/hamster/list/break_spec.rb +1 -13
  55. data/spec/hamster/list/cadr_spec.rb +1 -9
  56. data/spec/hamster/list/chunk_spec.rb +1 -9
  57. data/spec/hamster/list/clear_spec.rb +1 -9
  58. data/spec/hamster/list/combinations_spec.rb +1 -11
  59. data/spec/hamster/list/compact_spec.rb +1 -9
  60. data/spec/hamster/list/cons_spec.rb +1 -10
  61. data/spec/hamster/list/construction_spec.rb +1 -30
  62. data/spec/hamster/list/copying_spec.rb +1 -9
  63. data/spec/hamster/list/count_spec.rb +1 -15
  64. data/spec/hamster/list/cycle_spec.rb +1 -10
  65. data/spec/hamster/list/drop_spec.rb +1 -9
  66. data/spec/hamster/list/drop_while_spec.rb +1 -13
  67. data/spec/hamster/list/each_slice_spec.rb +1 -17
  68. data/spec/hamster/list/each_spec.rb +1 -17
  69. data/spec/hamster/list/each_with_index_spec.rb +1 -10
  70. data/spec/hamster/list/elem_index_spec.rb +1 -13
  71. data/spec/hamster/list/elem_indices_spec.rb +1 -11
  72. data/spec/hamster/list/empty_spec.rb +1 -13
  73. data/spec/hamster/list/eql_spec.rb +52 -62
  74. data/spec/hamster/list/find_index_spec.rb +1 -13
  75. data/spec/hamster/list/find_indices_spec.rb +1 -11
  76. data/spec/hamster/list/find_spec.rb +1 -17
  77. data/spec/hamster/list/flatten_spec.rb +1 -9
  78. data/spec/hamster/list/grep_spec.rb +1 -16
  79. data/spec/hamster/list/group_by_spec.rb +1 -20
  80. data/spec/hamster/list/head_spec.rb +1 -11
  81. data/spec/hamster/list/include_spec.rb +1 -13
  82. data/spec/hamster/list/init_spec.rb +1 -8
  83. data/spec/hamster/list/inits_spec.rb +1 -9
  84. data/spec/hamster/list/inspect_spec.rb +1 -11
  85. data/spec/hamster/list/intersperse_spec.rb +1 -9
  86. data/spec/hamster/list/join_spec.rb +1 -18
  87. data/spec/hamster/list/last_spec.rb +1 -11
  88. data/spec/hamster/list/map_spec.rb +1 -15
  89. data/spec/hamster/list/maximum_spec.rb +1 -20
  90. data/spec/hamster/list/merge_by_spec.rb +1 -19
  91. data/spec/hamster/list/merge_spec.rb +1 -20
  92. data/spec/hamster/list/minimum_spec.rb +1 -20
  93. data/spec/hamster/list/none_spec.rb +1 -18
  94. data/spec/hamster/list/one_spec.rb +1 -16
  95. data/spec/hamster/list/partition_spec.rb +1 -13
  96. data/spec/hamster/list/product_spec.rb +1 -11
  97. data/spec/hamster/list/reduce_spec.rb +0 -1
  98. data/spec/hamster/list/remove_spec.rb +1 -15
  99. data/spec/hamster/list/reverse_spec.rb +1 -11
  100. data/spec/hamster/list/size_spec.rb +1 -13
  101. data/spec/hamster/list/slice_spec.rb +1 -11
  102. data/spec/hamster/list/sorting_spec.rb +1 -14
  103. data/spec/hamster/list/span_spec.rb +1 -12
  104. data/spec/hamster/list/split_at_spec.rb +1 -9
  105. data/spec/hamster/list/sum_spec.rb +1 -11
  106. data/spec/hamster/list/tail_spec.rb +1 -11
  107. data/spec/hamster/list/tails_spec.rb +1 -9
  108. data/spec/hamster/list/take_spec.rb +1 -9
  109. data/spec/hamster/list/take_while_spec.rb +0 -1
  110. data/spec/hamster/list/to_a_spec.rb +1 -13
  111. data/spec/hamster/list/to_ary_spec.rb +0 -1
  112. data/spec/hamster/list/to_list_spec.rb +1 -9
  113. data/spec/hamster/list/to_set_spec.rb +2 -8
  114. data/spec/hamster/list/union_spec.rb +1 -11
  115. data/spec/hamster/list/uniq_spec.rb +1 -11
  116. data/spec/hamster/queue/clear_spec.rb +1 -9
  117. data/spec/hamster/queue/construction_spec.rb +1 -10
  118. data/spec/hamster/queue/dequeue_spec.rb +1 -11
  119. data/spec/hamster/queue/empty_spec.rb +1 -13
  120. data/spec/hamster/queue/enqueue_spec.rb +1 -11
  121. data/spec/hamster/queue/head_spec.rb +1 -11
  122. data/spec/hamster/queue/inspect_spec.rb +1 -9
  123. data/spec/hamster/queue/size_spec.rb +1 -11
  124. data/spec/hamster/queue/to_a_spec.rb +1 -11
  125. data/spec/hamster/queue/to_list_spec.rb +1 -11
  126. data/spec/hamster/set/add_spec.rb +1 -12
  127. data/spec/hamster/set/all_spec.rb +1 -18
  128. data/spec/hamster/set/any_spec.rb +1 -17
  129. data/spec/hamster/set/clear_spec.rb +9 -8
  130. data/spec/hamster/set/compact_spec.rb +1 -9
  131. data/spec/hamster/set/construction_spec.rb +1 -9
  132. data/spec/hamster/set/copying_spec.rb +1 -8
  133. data/spec/hamster/set/count_spec.rb +1 -13
  134. data/spec/hamster/set/delete_spec.rb +1 -10
  135. data/spec/hamster/set/difference_spec.rb +1 -11
  136. data/spec/hamster/set/empty_spec.rb +1 -11
  137. data/spec/hamster/set/exclusion_spec.rb +1 -11
  138. data/spec/hamster/set/filter_spec.rb +10 -17
  139. data/spec/hamster/set/find_spec.rb +1 -14
  140. data/spec/hamster/set/flatten_spec.rb +8 -10
  141. data/spec/hamster/set/group_by_spec.rb +8 -17
  142. data/spec/hamster/set/head_spec.rb +1 -12
  143. data/spec/hamster/set/immutable_spec.rb +1 -4
  144. data/spec/hamster/set/include_spec.rb +1 -9
  145. data/spec/hamster/set/inspect_spec.rb +1 -9
  146. data/spec/hamster/set/intersection_spec.rb +1 -11
  147. data/spec/hamster/set/join_spec.rb +1 -16
  148. data/spec/hamster/set/map_spec.rb +1 -16
  149. data/spec/hamster/set/marshal_spec.rb +1 -6
  150. data/spec/hamster/set/maximum_spec.rb +1 -18
  151. data/spec/hamster/set/minimum_spec.rb +1 -17
  152. data/spec/hamster/set/new_spec.rb +21 -0
  153. data/spec/hamster/set/none_spec.rb +1 -16
  154. data/spec/hamster/set/one_spec.rb +1 -14
  155. data/spec/hamster/set/partition_spec.rb +1 -13
  156. data/spec/hamster/set/product_spec.rb +1 -9
  157. data/spec/hamster/set/reduce_spec.rb +1 -26
  158. data/spec/hamster/set/remove_spec.rb +1 -16
  159. data/spec/hamster/set/size_spec.rb +1 -9
  160. data/spec/hamster/set/sorting_spec.rb +1 -3
  161. data/spec/hamster/set/subset_spec.rb +1 -9
  162. data/spec/hamster/set/sum_spec.rb +1 -9
  163. data/spec/hamster/set/superset_spec.rb +1 -9
  164. data/spec/hamster/set/to_a_spec.rb +1 -11
  165. data/spec/hamster/set/to_list_spec.rb +1 -11
  166. data/spec/hamster/set/to_set_spec.rb +1 -9
  167. data/spec/hamster/set/union_spec.rb +1 -11
  168. data/spec/hamster/set/uniq_spec.rb +1 -7
  169. data/spec/hamster/sorter/immutable_spec.rb +1 -4
  170. data/spec/hamster/stack/clear_spec.rb +1 -9
  171. data/spec/hamster/stack/construction_spec.rb +1 -10
  172. data/spec/hamster/stack/copying_spec.rb +1 -9
  173. data/spec/hamster/stack/empty_spec.rb +1 -9
  174. data/spec/hamster/stack/eql_spec.rb +1 -13
  175. data/spec/hamster/stack/immutable_spec.rb +1 -4
  176. data/spec/hamster/stack/inspect_spec.rb +1 -9
  177. data/spec/hamster/stack/peek_spec.rb +1 -11
  178. data/spec/hamster/stack/pop_spec.rb +1 -11
  179. data/spec/hamster/stack/push_spec.rb +1 -11
  180. data/spec/hamster/stack/size_spec.rb +1 -11
  181. data/spec/hamster/stack/to_a_spec.rb +1 -11
  182. data/spec/hamster/stack/to_list_spec.rb +1 -9
  183. data/spec/hamster/tuple/construction_spec.rb +30 -0
  184. data/spec/hamster/tuple/copying_spec.rb +1 -8
  185. data/spec/hamster/tuple/eql_spec.rb +57 -40
  186. data/spec/hamster/tuple/first_spec.rb +1 -6
  187. data/spec/hamster/tuple/immutable_spec.rb +1 -4
  188. data/spec/hamster/tuple/inspect_spec.rb +1 -6
  189. data/spec/hamster/tuple/last_spec.rb +1 -6
  190. data/spec/hamster/tuple/to_a_spec.rb +1 -9
  191. data/spec/hamster/tuple/to_ary_spec.rb +0 -1
  192. data/spec/hamster/undefined/erase_spec.rb +1 -12
  193. data/spec/hamster/vector/add_spec.rb +8 -0
  194. data/spec/hamster/vector/clear_spec.rb +1 -8
  195. data/spec/hamster/vector/copying_spec.rb +1 -8
  196. data/spec/hamster/vector/each_spec.rb +1 -11
  197. data/spec/hamster/vector/each_with_index_spec.rb +1 -9
  198. data/spec/hamster/vector/empty_spec.rb +7 -9
  199. data/spec/hamster/vector/eql_spec.rb +1 -12
  200. data/spec/hamster/vector/filter_spec.rb +8 -12
  201. data/spec/hamster/vector/first_spec.rb +1 -11
  202. data/spec/hamster/vector/get_spec.rb +1 -23
  203. data/spec/hamster/vector/include_spec.rb +1 -10
  204. data/spec/hamster/vector/map_spec.rb +8 -14
  205. data/spec/hamster/vector/new_spec.rb +48 -0
  206. data/spec/hamster/vector/reduce_spec.rb +1 -26
  207. data/spec/hamster/vector/set_spec.rb +8 -0
  208. data/spec/spec_helper.rb +0 -5
  209. metadata +35 -68
@@ -1,11 +1,8 @@
1
1
  require "spec_helper"
2
-
3
2
  require "hamster/tuple"
4
3
 
5
4
  describe Hamster::Tuple do
6
-
7
5
  describe "#first" do
8
-
9
6
  before do
10
7
  @tuple = Hamster::Tuple.new("A", "B")
11
8
  end
@@ -13,7 +10,5 @@ describe Hamster::Tuple do
13
10
  it "returns the first value" do
14
11
  @tuple.first.should == "A"
15
12
  end
16
-
17
13
  end
18
-
19
- end
14
+ end
@@ -1,12 +1,9 @@
1
1
  require "spec_helper"
2
-
3
2
  require "hamster/immutable"
4
3
  require "hamster/tuple"
5
4
 
6
5
  describe Hamster::Tuple do
7
-
8
6
  it "includes Immutable" do
9
7
  Hamster::Tuple.should include(Hamster::Immutable)
10
8
  end
11
-
12
- end
9
+ end
@@ -1,11 +1,8 @@
1
1
  require "spec_helper"
2
-
3
2
  require "hamster/tuple"
4
3
 
5
4
  describe Hamster::Tuple do
6
-
7
5
  describe "#inspect" do
8
-
9
6
  before do
10
7
  @list = Hamster::Tuple.new("A", "B")
11
8
  end
@@ -13,7 +10,5 @@ describe Hamster::Tuple do
13
10
  it "returns a string with the inspected values" do
14
11
  @list.inspect.should == "(\"A\", \"B\")"
15
12
  end
16
-
17
13
  end
18
-
19
- end
14
+ end
@@ -1,11 +1,8 @@
1
1
  require "spec_helper"
2
-
3
2
  require "hamster/tuple"
4
3
 
5
4
  describe Hamster::Tuple do
6
-
7
5
  describe "#last" do
8
-
9
6
  before do
10
7
  @tuple = Hamster::Tuple.new("A", "B")
11
8
  end
@@ -13,7 +10,5 @@ describe Hamster::Tuple do
13
10
  it "returns the last value" do
14
11
  @tuple.last.should == "B"
15
12
  end
16
-
17
13
  end
18
-
19
- end
14
+ end
@@ -1,11 +1,8 @@
1
1
  require "spec_helper"
2
-
3
2
  require "hamster/tuple"
4
3
 
5
4
  describe Hamster::Tuple do
6
-
7
5
  describe "#to_a" do
8
-
9
6
  [
10
7
  [],
11
8
  ["A"],
@@ -13,7 +10,6 @@ describe Hamster::Tuple do
13
10
  ].each do |values|
14
11
 
15
12
  describe "on #{values.inspect}" do
16
-
17
13
  before do
18
14
  @tuple = Hamster::Tuple.new(*values)
19
15
  @result = @tuple.to_a
@@ -28,11 +24,7 @@ describe Hamster::Tuple do
28
24
  @result << "The End"
29
25
  @result.last.should == "The End"
30
26
  end
31
-
32
27
  end
33
-
34
28
  end
35
-
36
29
  end
37
-
38
- end
30
+ end
@@ -1,5 +1,4 @@
1
1
  require "spec_helper"
2
-
3
2
  require "hamster/tuple"
4
3
 
5
4
  describe Hamster::Tuple do
@@ -1,13 +1,9 @@
1
1
  require "spec_helper"
2
-
3
2
  require "hamster/undefined"
4
3
 
5
4
  describe Hamster::Undefined do
6
-
7
5
  describe "#erase" do
8
-
9
6
  describe "with Undefined" do
10
-
11
7
  before do
12
8
  @result = Hamster::Undefined.erase(Hamster::Undefined)
13
9
  end
@@ -15,11 +11,9 @@ describe Hamster::Undefined do
15
11
  it "returns nil" do
16
12
  @result.should be_nil
17
13
  end
18
-
19
14
  end
20
15
 
21
16
  describe "with nil" do
22
-
23
17
  before do
24
18
  @result = Hamster::Undefined.erase(nil)
25
19
  end
@@ -27,11 +21,9 @@ describe Hamster::Undefined do
27
21
  it "returns nil" do
28
22
  @result.should be_nil
29
23
  end
30
-
31
24
  end
32
25
 
33
26
  describe "otherwise" do
34
-
35
27
  before do
36
28
  @result = Hamster::Undefined.erase("Hello")
37
29
  end
@@ -39,9 +31,6 @@ describe Hamster::Undefined do
39
31
  it "returns the value unchanged" do
40
32
  @result.should == "Hello"
41
33
  end
42
-
43
34
  end
44
-
45
35
  end
46
-
47
- end
36
+ end
@@ -44,5 +44,13 @@ describe Hamster::Vector do
44
44
 
45
45
  include_examples "checking adding values"
46
46
  end
47
+
48
+ context "from a subclass" do
49
+ it "returns an instance of the subclass" do
50
+ @subclass = Class.new(Hamster::Vector)
51
+ @instance = @subclass[1,2,3]
52
+ @instance.add(4).class.should be(@subclass)
53
+ end
54
+ end
47
55
  end
48
56
  end
@@ -2,9 +2,7 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
-
6
5
  describe "#clear" do
7
-
8
6
  [
9
7
  [],
10
8
  ["A"],
@@ -12,7 +10,6 @@ describe Hamster::Vector do
12
10
  ].each do |values|
13
11
 
14
12
  describe "on #{values}" do
15
-
16
13
  before do
17
14
  @original = Hamster.vector(*values)
18
15
  @result = @original.clear
@@ -25,11 +22,7 @@ describe Hamster::Vector do
25
22
  it "returns an empty vector" do
26
23
  @result.should equal(Hamster.vector)
27
24
  end
28
-
29
25
  end
30
-
31
26
  end
32
-
33
27
  end
34
-
35
- end
28
+ end
@@ -2,9 +2,7 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
-
6
5
  [:dup, :clone].each do |method|
7
-
8
6
  [
9
7
  [],
10
8
  ["A"],
@@ -12,7 +10,6 @@ describe Hamster::Vector do
12
10
  ].each do |values|
13
11
 
14
12
  describe "on #{values.inspect}" do
15
-
16
13
  before do
17
14
  @original = Hamster.vector(*values)
18
15
  @result = @original.send(method)
@@ -21,11 +18,7 @@ describe Hamster::Vector do
21
18
  it "returns self" do
22
19
  @result.should equal(@original)
23
20
  end
24
-
25
21
  end
26
-
27
22
  end
28
-
29
23
  end
30
-
31
- end
24
+ end
@@ -2,13 +2,9 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
-
6
5
  [:each, :foreach].each do |method|
7
-
8
6
  describe "##{method}" do
9
-
10
7
  describe "with no block" do
11
-
12
8
  before do
13
9
  @vector = Hamster.vector("A", "B", "C")
14
10
  @result = @vector.send(method)
@@ -17,11 +13,9 @@ describe Hamster::Vector do
17
13
  it "returns self" do
18
14
  @result.should equal(@vector)
19
15
  end
20
-
21
16
  end
22
17
 
23
18
  describe "with a block" do
24
-
25
19
  before do
26
20
  @vector = Hamster.vector(*(1..1025))
27
21
  @items = []
@@ -35,11 +29,7 @@ describe Hamster::Vector do
35
29
  it "iterates over the items in order" do
36
30
  @items.should == (1..1025).to_a
37
31
  end
38
-
39
32
  end
40
-
41
33
  end
42
-
43
34
  end
44
-
45
- end
35
+ end
@@ -2,11 +2,8 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
-
6
5
  describe "#each_with_index" do
7
-
8
6
  describe "with no block" do
9
-
10
7
  before do
11
8
  @vector = Hamster.vector("A", "B", "C")
12
9
  @result = @vector.each_with_index
@@ -15,11 +12,9 @@ describe Hamster::Vector do
15
12
  it "returns self" do
16
13
  @result.should equal(@vector)
17
14
  end
18
-
19
15
  end
20
16
 
21
17
  describe "with a block" do
22
-
23
18
  before do
24
19
  @vector = Hamster.vector(*(1..1025))
25
20
  @pairs = []
@@ -33,9 +28,6 @@ describe Hamster::Vector do
33
28
  it "iterates over the items in order" do
34
29
  @pairs.should == (1..@vector.size).zip(0..@vector.size.pred)
35
30
  end
36
-
37
31
  end
38
-
39
32
  end
40
-
41
- end
33
+ end
@@ -2,11 +2,8 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
-
6
5
  [:empty?, :null?].each do |method|
7
-
8
6
  describe "##{method}" do
9
-
10
7
  [
11
8
  [[], true],
12
9
  [["A"], false],
@@ -14,7 +11,6 @@ describe Hamster::Vector do
14
11
  ].each do |values, expected|
15
12
 
16
13
  describe "on #{values.inspect}" do
17
-
18
14
  before do
19
15
  @vector = Hamster.vector(*values)
20
16
  end
@@ -22,13 +18,15 @@ describe Hamster::Vector do
22
18
  it "returns #{expected.inspect}" do
23
19
  @vector.send(method).should == expected
24
20
  end
25
-
26
21
  end
27
-
28
22
  end
29
-
30
23
  end
31
-
32
24
  end
33
25
 
34
- end
26
+ describe "empty" do
27
+ it "returns the canonical empty vector" do
28
+ Hamster::Vector.empty.size.should be(0)
29
+ Hamster::Vector.empty.object_id.should be(Hamster::Vector.empty.object_id)
30
+ end
31
+ end
32
+ end
@@ -2,13 +2,9 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
-
6
5
  [:eql?, :==].each do |method|
7
-
8
6
  describe "##{method}" do
9
-
10
7
  describe "returns false when comparing with" do
11
-
12
8
  before do
13
9
  @vector = Hamster.vector("A", "B", "C")
14
10
  end
@@ -20,7 +16,6 @@ describe Hamster::Vector do
20
16
  it "an aribtrary object" do
21
17
  @vector.send(method, Object.new).should == false
22
18
  end
23
-
24
19
  end
25
20
 
26
21
  it "returns false when comparing an empty vector with an empty array" do
@@ -39,7 +34,6 @@ describe Hamster::Vector do
39
34
  ].each do |a, b, expected|
40
35
 
41
36
  describe "returns #{expected.inspect}" do
42
-
43
37
  before do
44
38
  @a = Hamster.vector(*a)
45
39
  @b = Hamster.vector(*b)
@@ -52,13 +46,8 @@ describe Hamster::Vector do
52
46
  it "for vectors #{b.inspect} and #{a.inspect}" do
53
47
  @b.send(method, @a).should == expected
54
48
  end
55
-
56
49
  end
57
-
58
50
  end
59
-
60
51
  end
61
-
62
52
  end
63
-
64
- end
53
+ end
@@ -2,17 +2,13 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
-
6
5
  [:filter, :select, :find_all].each do |method|
7
-
8
6
  describe "##{method}" do
9
-
10
7
  before do
11
8
  @original = Hamster.vector("A", "B", "C")
12
9
  end
13
10
 
14
11
  describe "with a block" do
15
-
16
12
  before do
17
13
  @result = @original.send(method) { |item| item == "A" }
18
14
  end
@@ -24,11 +20,9 @@ describe Hamster::Vector do
24
20
  it "returns a vector with the matching values" do
25
21
  @result.should == Hamster.vector("A")
26
22
  end
27
-
28
23
  end
29
24
 
30
25
  describe "with no block" do
31
-
32
26
  before do
33
27
  @result = @original.send(method)
34
28
  end
@@ -36,11 +30,9 @@ describe Hamster::Vector do
36
30
  it "returns self" do
37
31
  @result.should equal(@original)
38
32
  end
39
-
40
33
  end
41
34
 
42
35
  describe "when nothing matches" do
43
-
44
36
  before do
45
37
  @result = @original.send(method) { |item| false }
46
38
  end
@@ -52,11 +44,15 @@ describe Hamster::Vector do
52
44
  it "returns an empty vector" do
53
45
  @result.should equal(Hamster.vector)
54
46
  end
55
-
56
47
  end
57
48
 
49
+ context "from a subclass" do
50
+ it "returns an instance of the subclass" do
51
+ @subclass = Class.new(Hamster::Vector)
52
+ @instance = @subclass[1,2,3]
53
+ @instance.filter { |x| x > 1 }.class.should be(@subclass)
54
+ end
55
+ end
58
56
  end
59
-
60
57
  end
61
-
62
- end
58
+ end