hamster 0.1.14 → 0.1.15

Sign up to get free protection for your applications and to get access to all the features.
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|