hamster 0.1.14 → 0.1.15

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 (85) hide show
  1. data/History.rdoc +6 -0
  2. data/README.rdoc +33 -16
  3. data/lib/hamster.rb +1 -0
  4. data/lib/hamster/core_ext.rb +2 -0
  5. data/lib/hamster/core_ext/enumerable.rb +23 -0
  6. data/lib/hamster/core_ext/io.rb +29 -0
  7. data/lib/hamster/list.rb +23 -0
  8. data/lib/hamster/version.rb +1 -1
  9. data/spec/hamster/core_ext/enumerable_spec.rb +34 -0
  10. data/spec/hamster/core_ext/io_spec.rb +17 -0
  11. data/spec/hamster/core_ext/io_spec.txt +3 -0
  12. data/spec/hamster/hash/all_spec.rb +2 -0
  13. data/spec/hamster/hash/any_spec.rb +2 -0
  14. data/spec/hamster/hash/construction_spec.rb +2 -0
  15. data/spec/hamster/hash/copying_spec.rb +2 -0
  16. data/spec/hamster/hash/each_spec.rb +2 -0
  17. data/spec/hamster/hash/empty_spec.rb +2 -0
  18. data/spec/hamster/hash/eql_spec.rb +2 -0
  19. data/spec/hamster/hash/filter_spec.rb +2 -0
  20. data/spec/hamster/hash/get_spec.rb +2 -0
  21. data/spec/hamster/hash/has_key_spec.rb +2 -0
  22. data/spec/hamster/hash/map_spec.rb +2 -0
  23. data/spec/hamster/hash/none_spec.rb +2 -0
  24. data/spec/hamster/hash/put_spec.rb +2 -0
  25. data/spec/hamster/hash/reduce_spec.rb +2 -0
  26. data/spec/hamster/hash/reject_spec.rb +2 -0
  27. data/spec/hamster/hash/remove_spec.rb +2 -0
  28. data/spec/hamster/hash/size_spec.rb +2 -0
  29. data/spec/hamster/list/all_spec.rb +2 -0
  30. data/spec/hamster/list/any_spec.rb +2 -0
  31. data/spec/hamster/list/append_spec.rb +65 -0
  32. data/spec/hamster/list/cadr_spec.rb +2 -0
  33. data/spec/hamster/list/cons_spec.rb +2 -0
  34. data/spec/hamster/list/construction_spec.rb +2 -0
  35. data/spec/hamster/list/copying_spec.rb +2 -0
  36. data/spec/hamster/list/drop_spec.rb +2 -0
  37. data/spec/hamster/list/drop_while_spec.rb +2 -0
  38. data/spec/hamster/list/each_spec.rb +2 -0
  39. data/spec/hamster/list/empty_spec.rb +2 -0
  40. data/spec/hamster/list/eql_spec.rb +2 -0
  41. data/spec/hamster/list/filter_spec.rb +2 -0
  42. data/spec/hamster/list/find_spec.rb +2 -0
  43. data/spec/hamster/list/head_spec.rb +2 -0
  44. data/spec/hamster/list/include_spec.rb +2 -0
  45. data/spec/hamster/list/inspect_spec.rb +2 -0
  46. data/spec/hamster/list/map_spec.rb +2 -0
  47. data/spec/hamster/list/none_spec.rb +2 -0
  48. data/spec/hamster/list/partition_spec.rb +101 -0
  49. data/spec/hamster/list/reduce_spec.rb +2 -0
  50. data/spec/hamster/list/reject_spec.rb +2 -0
  51. data/spec/hamster/list/reverse_spec.rb +43 -0
  52. data/spec/hamster/list/size_spec.rb +2 -0
  53. data/spec/hamster/list/tail_spec.rb +2 -0
  54. data/spec/hamster/list/take_spec.rb +2 -0
  55. data/spec/hamster/list/take_while_spec.rb +2 -0
  56. data/spec/hamster/list/to_a_spec.rb +2 -0
  57. data/spec/hamster/list/to_ary_spec.rb +2 -0
  58. data/spec/hamster/set/add_spec.rb +2 -0
  59. data/spec/hamster/set/all_spec.rb +2 -0
  60. data/spec/hamster/set/any_spec.rb +2 -0
  61. data/spec/hamster/set/construction_spec.rb +2 -0
  62. data/spec/hamster/set/copying_spec.rb +2 -0
  63. data/spec/hamster/set/each_spec.rb +2 -0
  64. data/spec/hamster/set/empty_spec.rb +2 -0
  65. data/spec/hamster/set/eql_spec.rb +1 -0
  66. data/spec/hamster/set/filter_spec.rb +2 -0
  67. data/spec/hamster/set/include_spec.rb +2 -0
  68. data/spec/hamster/set/map_spec.rb +2 -0
  69. data/spec/hamster/set/none_spec.rb +2 -0
  70. data/spec/hamster/set/reduce_spec.rb +2 -0
  71. data/spec/hamster/set/reject_spec.rb +2 -0
  72. data/spec/hamster/set/remove_spec.rb +2 -0
  73. data/spec/hamster/set/size_spec.rb +2 -0
  74. data/spec/hamster/set/to_a_spec.rb +2 -0
  75. data/spec/hamster/stack/construction_spec.rb +2 -0
  76. data/spec/hamster/stack/copying_spec.rb +2 -0
  77. data/spec/hamster/stack/empty_spec.rb +2 -0
  78. data/spec/hamster/stack/eql_spec.rb +2 -0
  79. data/spec/hamster/stack/inspect_spec.rb +2 -0
  80. data/spec/hamster/stack/pop_spec.rb +2 -0
  81. data/spec/hamster/stack/push_spec.rb +2 -0
  82. data/spec/hamster/stack/size_spec.rb +2 -0
  83. data/spec/hamster/stack/top_spec.rb +2 -0
  84. data/spec/spec_helper.rb +0 -2
  85. metadata +11 -2
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  [:any?, :exist?, :exists?].each do |method|
@@ -0,0 +1,65 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/list'
4
+
5
+ describe Hamster::List do
6
+
7
+ [:append, :concat, :cat, :+].each do |method|
8
+
9
+ describe "##{method}" do
10
+
11
+ describe "on two really big lists" do
12
+
13
+ before do
14
+ @a = Hamster.interval(0, 10000)
15
+ @b = Hamster.interval(0, 10000)
16
+ end
17
+
18
+ it "doesn't run out of stack space" do
19
+ @a.send(method, @b)
20
+ end
21
+
22
+ end
23
+
24
+ [
25
+ [[], [], []],
26
+ [["A"], [], ["A"]],
27
+ [[], ["A"], ["A"]],
28
+ [["A", "B"], ["C", "D"], ["A", "B", "C", "D"]],
29
+ ].each do |left_values, right_values, expected|
30
+
31
+ describe "on #{left_values.inspect} and #{right_values.inspect}" do
32
+
33
+ before do
34
+ @left = Hamster.list(*left_values)
35
+ @right = Hamster.list(*right_values)
36
+ @result = @left.append(@right)
37
+ end
38
+
39
+ it "preserves the left" do
40
+ @left.should == Hamster.list(*left_values)
41
+ end
42
+
43
+ it "preserves the right" do
44
+ @right.should == Hamster.list(*right_values)
45
+ end
46
+
47
+ it "returns #{expected.inspect}" do
48
+ @result.should == Hamster.list(*expected)
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+
55
+ it "is lazy" do
56
+ count = 0
57
+ Hamster.stream { |item| count += 1 }.append(Hamster.list("A"))
58
+ count.should <= 1
59
+ end
60
+
61
+ end
62
+
63
+ end
64
+
65
+ end
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  describe "#cadr" do
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  [:cons, :>>].each do |method|
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster do
4
6
 
5
7
  describe ".list" do
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  [:dup, :clone].each do |method|
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  describe "#drop" do
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  describe "#drop_while" do
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  describe "#each" do
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  describe "#empty?" do
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  [:eql?, :==].each do |method|
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  [:filter, :select, :find_all].each do |method|
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  [:find, :detect].each do |method|
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  describe "#head" do
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  [:include?, :member?].each do |method|
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  describe "#inspect" do
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  [:map, :collect].each do |method|
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  describe "#none?" do
@@ -0,0 +1,101 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/list'
4
+
5
+ describe Hamster::List do
6
+
7
+ describe "#partition" do
8
+
9
+ describe "on a really big list" do
10
+
11
+ before do
12
+ @list = Hamster.interval(0, 10000)
13
+ end
14
+
15
+ it "doesn't run out of stack space" do
16
+ @list.partition {}
17
+ end
18
+
19
+ end
20
+
21
+ describe "on a lazy list" do
22
+
23
+ before do
24
+ @original = Hamster.interval(0, 10)
25
+ end
26
+
27
+ describe "with a block" do
28
+
29
+ before do
30
+ result = @original.partition { |item| (item % 2) != 0 }
31
+ @matching = result.car
32
+ @remainder = result.cadr
33
+ end
34
+
35
+ it "correctly identifies the matches" do
36
+ @matching.should == Hamster.list(1, 3, 5, 7, 9)
37
+ end
38
+
39
+ it "correctly identifies the remainder" do
40
+ @remainder.should == Hamster.list(0, 2, 4, 6, 8, 10)
41
+ end
42
+
43
+ end
44
+
45
+ describe "without a block" do
46
+
47
+ before do
48
+ @result = @original.partition
49
+ end
50
+
51
+ it "returns self" do
52
+ @result.should equal(@original)
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+
59
+ [
60
+ [[], [], []],
61
+ [[1], [1], []],
62
+ [[1, 2], [1], [2]],
63
+ [[1, 2, 3], [1, 3], [2]],
64
+ [[1, 2, 3, 4], [1, 3], [2, 4]],
65
+ [[2, 3, 4], [3], [2, 4]],
66
+ [[3, 4], [3], [4]],
67
+ [[4], [], [4]],
68
+ ].each do |values, expected_matches, expected_remainder|
69
+
70
+ describe "on #{values.inspect}" do
71
+
72
+ before do
73
+ @original = Hamster.list(*values)
74
+ @partitions = @original.partition { |item| (item % 2) != 0 }
75
+ @matches = @partitions.car
76
+ @remainder = @partitions.cadr
77
+ end
78
+
79
+ it "preserves the original" do
80
+ @original.should == Hamster.list(*values)
81
+ end
82
+
83
+ it "returns a list with two items" do
84
+ @partitions.size.should == 2
85
+ end
86
+
87
+ it "correctly identifies the matches" do
88
+ @matches.should == Hamster.list(*expected_matches)
89
+ end
90
+
91
+ it "correctly identifies the remainder" do
92
+ @remainder.should == Hamster.list(*expected_remainder)
93
+ end
94
+
95
+ end
96
+
97
+ end
98
+
99
+ end
100
+
101
+ end
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  [:reduce, :inject, :fold].each do |method|
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  [:reject, :delete_if].each do |method|
@@ -0,0 +1,43 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/list'
4
+
5
+ describe Hamster::List do
6
+
7
+ describe "#reverse" do
8
+
9
+ describe "on a really big list" do
10
+
11
+ before do
12
+ @list = Hamster.interval(0, 10000)
13
+ end
14
+
15
+ it "doesn't run out of stack space" do
16
+ @list.reverse
17
+ end
18
+
19
+ end
20
+
21
+ [
22
+ [[], []],
23
+ [["A"], ["A"]],
24
+ [["A", "B", "C"], ["C", "B", "A"]],
25
+ ].each do |values, expected|
26
+
27
+ describe "on #{values.inspect}" do
28
+
29
+ before do
30
+ @list = Hamster.list(*values)
31
+ end
32
+
33
+ it "returns #{expected}" do
34
+ @list.reverse { |item| item.downcase }.should == Hamster.list(*expected)
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+
43
+ end
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  [:size, :length].each do |method|
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  describe "#tail" do
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  describe "#take" do
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  describe "#take_while" do
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  describe "#to_a" do
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/list'
4
+
3
5
  describe Hamster::List do
4
6
 
5
7
  describe "#to_ary" do
@@ -1,5 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
+ require 'hamster/set'
4
+
3
5
  describe Hamster::Set do
4
6
 
5
7
  [:add, :<<].each do |method|