hamster 0.1.13 → 0.1.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/History.rdoc +14 -0
  2. data/README.rdoc +2 -2
  3. data/lib/hamster/hash.rb +10 -9
  4. data/lib/hamster/list.rb +96 -64
  5. data/lib/hamster/set.rb +12 -5
  6. data/lib/hamster/version.rb +1 -1
  7. data/spec/hamster/hash/all_spec.rb +1 -1
  8. data/spec/hamster/hash/eql_spec.rb +42 -13
  9. data/spec/hamster/hash/filter_spec.rb +1 -1
  10. data/spec/hamster/hash/reduce_spec.rb +1 -1
  11. data/spec/hamster/hash/reject_spec.rb +31 -27
  12. data/spec/hamster/list/all_spec.rb +73 -0
  13. data/spec/hamster/list/any_spec.rb +77 -0
  14. data/spec/hamster/list/cadr_spec.rb +4 -2
  15. data/spec/hamster/list/cons_spec.rb +6 -4
  16. data/spec/hamster/list/copying_spec.rb +4 -2
  17. data/spec/hamster/list/drop_spec.rb +16 -2
  18. data/spec/hamster/list/drop_while_spec.rb +17 -3
  19. data/spec/hamster/list/each_spec.rb +18 -4
  20. data/spec/hamster/list/empty_spec.rb +4 -2
  21. data/spec/hamster/list/eql_spec.rb +41 -7
  22. data/spec/hamster/list/filter_spec.rb +20 -6
  23. data/spec/hamster/list/find_spec.rb +63 -0
  24. data/spec/hamster/list/head_spec.rb +4 -2
  25. data/spec/hamster/list/include_spec.rb +16 -2
  26. data/spec/hamster/list/inspect_spec.rb +16 -2
  27. data/spec/hamster/list/map_spec.rb +18 -4
  28. data/spec/hamster/list/none_spec.rb +73 -0
  29. data/spec/hamster/list/reduce_spec.rb +66 -12
  30. data/spec/hamster/list/reject_spec.rb +39 -21
  31. data/spec/hamster/list/size_spec.rb +16 -2
  32. data/spec/hamster/list/tail_spec.rb +4 -2
  33. data/spec/hamster/list/take_spec.rb +16 -2
  34. data/spec/hamster/list/take_while_spec.rb +18 -4
  35. data/spec/hamster/list/to_a_spec.rb +16 -2
  36. data/spec/hamster/list/to_ary_spec.rb +42 -0
  37. data/spec/hamster/set/eql_spec.rb +35 -5
  38. data/spec/hamster/set/filter_spec.rb +1 -1
  39. data/spec/hamster/set/reduce_spec.rb +1 -1
  40. data/spec/hamster/set/reject_spec.rb +31 -27
  41. data/spec/hamster/set/to_a_spec.rb +29 -0
  42. data/spec/hamster/stack/copying_spec.rb +4 -2
  43. data/spec/hamster/stack/empty_spec.rb +4 -2
  44. data/spec/hamster/stack/eql_spec.rb +27 -7
  45. data/spec/hamster/stack/inspect_spec.rb +4 -2
  46. data/spec/hamster/stack/pop_spec.rb +12 -8
  47. data/spec/hamster/stack/push_spec.rb +6 -4
  48. data/spec/hamster/stack/size_spec.rb +4 -2
  49. data/spec/hamster/stack/top_spec.rb +6 -4
  50. metadata +8 -2
@@ -2,7 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
3
  describe Hamster::Hash do
4
4
 
5
- [:filter, :select].each do |method|
5
+ [:filter, :select, :find_all].each do |method|
6
6
 
7
7
  describe "##{method}" do
8
8
 
@@ -2,7 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
3
  describe Hamster::Hash do
4
4
 
5
- [:reduce, :inject].each do |method|
5
+ [:reduce, :inject, :fold].each do |method|
6
6
 
7
7
  describe "##{method}" do
8
8
 
@@ -2,50 +2,54 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
3
  describe Hamster::Hash do
4
4
 
5
- describe "#reject" do
5
+ [:reject, :delete_if].each do |method|
6
6
 
7
- before do
8
- @original = Hamster.hash("A" => "aye", "B" => "bee", "C" => "see")
9
- end
10
-
11
- describe "when nothing matches" do
7
+ describe "##{method}" do
12
8
 
13
9
  before do
14
- @result = @original.reject { |key, value| false }
10
+ @original = Hamster.hash("A" => "aye", "B" => "bee", "C" => "see")
15
11
  end
16
12
 
17
- it "returns self" do
18
- @result.should equal(@original)
13
+ describe "when nothing matches" do
14
+
15
+ before do
16
+ @result = @original.send(method) { |key, value| false }
17
+ end
18
+
19
+ it "returns self" do
20
+ @result.should equal(@original)
21
+ end
22
+
19
23
  end
20
24
 
21
- end
25
+ describe "when only some things match" do
22
26
 
23
- describe "when only some things match" do
27
+ describe "with a block" do
24
28
 
25
- describe "with a block" do
29
+ before do
30
+ @result = @original.send(method) { |key, value| key == "A" && value == "aye" }
31
+ end
26
32
 
27
- before do
28
- @result = @original.reject { |key, value| key == "A" && value == "aye" }
29
- end
33
+ it "preserves the original" do
34
+ @original.should == Hamster.hash("A" => "aye", "B" => "bee", "C" => "see")
35
+ end
30
36
 
31
- it "preserves the original" do
32
- @original.should == Hamster.hash("A" => "aye", "B" => "bee", "C" => "see")
33
- end
37
+ it "returns a set with the matching values" do
38
+ @result.should == Hamster.hash("B" => "bee", "C" => "see")
39
+ end
34
40
 
35
- it "returns a set with the matching values" do
36
- @result.should == Hamster.hash("B" => "bee", "C" => "see")
37
41
  end
38
42
 
39
- end
43
+ describe "with no block" do
40
44
 
41
- describe "with no block" do
45
+ before do
46
+ @result = @original.send(method)
47
+ end
42
48
 
43
- before do
44
- @result = @original.reject
45
- end
49
+ it "returns self" do
50
+ @result.should equal(@original)
51
+ end
46
52
 
47
- it "returns self" do
48
- @result.should equal(@original)
49
53
  end
50
54
 
51
55
  end
@@ -0,0 +1,73 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe Hamster::List do
4
+
5
+ describe "#all?" do
6
+
7
+ describe "on a really big list" do
8
+
9
+ before do
10
+ @list = Hamster.interval(0, 10000)
11
+ end
12
+
13
+ it "doesn't run out of stack space" do
14
+ @list.all? { true }
15
+ end
16
+
17
+ end
18
+
19
+ describe "when empty" do
20
+
21
+ before do
22
+ @list = Hamster.list
23
+ end
24
+
25
+ it "with a block returns true" do
26
+ @list.all? {}.should be_true
27
+ end
28
+
29
+ it "with no block returns true" do
30
+ @list.all?.should be_true
31
+ end
32
+
33
+ end
34
+
35
+ describe "when not empty" do
36
+
37
+ describe "with a block" do
38
+
39
+ before do
40
+ @list = Hamster.list("A", "B", "C")
41
+ end
42
+
43
+ it "returns true if the block always returns true" do
44
+ @list.all? { |item| true }.should be_true
45
+ end
46
+
47
+ it "returns false if the block ever returns false" do
48
+ @list.all? { |item| item == "D" }.should be_false
49
+ end
50
+
51
+ end
52
+
53
+ describe "with no block" do
54
+
55
+ it "returns true if all values are truthy" do
56
+ Hamster.list(true, "A").all?.should be_true
57
+ end
58
+
59
+ [nil, false].each do |value|
60
+
61
+ it "returns false if any value is #{value.inspect}" do
62
+ Hamster.list(value, true, "A").all?.should be_false
63
+ end
64
+
65
+ end
66
+
67
+ end
68
+
69
+ end
70
+
71
+ end
72
+
73
+ end
@@ -0,0 +1,77 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe Hamster::List do
4
+
5
+ [:any?, :exist?, :exists?].each do |method|
6
+
7
+ describe "##{method}" 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.any? { false }
17
+ end
18
+
19
+ end
20
+
21
+ describe "when empty" do
22
+
23
+ before do
24
+ @list = Hamster.list
25
+ end
26
+
27
+ it "with a block returns false" do
28
+ @list.send(method) {}.should be_false
29
+ end
30
+
31
+ it "with no block returns false" do
32
+ @list.send(method).should be_false
33
+ end
34
+
35
+ end
36
+
37
+ describe "when not empty" do
38
+
39
+ describe "with a block" do
40
+
41
+ before do
42
+ @list = Hamster.list("A", "B", "C", nil)
43
+ end
44
+
45
+ ["A", "B", "C", nil].each do |value|
46
+
47
+ it "returns true if the block ever returns true (#{value.inspect})" do
48
+ @list.send(method) { |item| item == value }.should be_true
49
+ end
50
+
51
+ end
52
+
53
+ it "returns false if the block always returns false" do
54
+ @list.send(method) { |item| item == "D" }.should be_false
55
+ end
56
+
57
+ end
58
+
59
+ describe "with no block" do
60
+
61
+ it "returns true if any value is truthy" do
62
+ Hamster.list(nil, false, true, "A").send(method).should be_true
63
+ end
64
+
65
+ it "returns false if all values are falsey" do
66
+ Hamster.list(nil, false).send(method).should be_false
67
+ end
68
+
69
+ end
70
+
71
+ end
72
+
73
+ end
74
+
75
+ end
76
+
77
+ end
@@ -22,10 +22,12 @@ describe Hamster::List do
22
22
 
23
23
  describe "on #{values.inspect}" do
24
24
 
25
- list = Hamster.list(*values)
25
+ before do
26
+ @list = Hamster.list(*values)
27
+ end
26
28
 
27
29
  it "returns #{expected}" do
28
- list.send(method).should == expected
30
+ @list.send(method).should == expected
29
31
  end
30
32
 
31
33
  end
@@ -15,15 +15,17 @@ describe Hamster::List do
15
15
 
16
16
  describe "on #{values.inspect} with #{new_value.inspect}" do
17
17
 
18
- original = Hamster.list(*values)
19
- result = original.send(method, new_value)
18
+ before do
19
+ @original = Hamster.list(*values)
20
+ @result = @original.send(method, new_value)
21
+ end
20
22
 
21
23
  it "preserves the original" do
22
- original.should == Hamster.list(*values)
24
+ @original.should == Hamster.list(*values)
23
25
  end
24
26
 
25
27
  it "returns #{expected.inspect}" do
26
- result.should == Hamster.list(*expected)
28
+ @result.should == Hamster.list(*expected)
27
29
  end
28
30
 
29
31
  end
@@ -12,10 +12,12 @@ describe Hamster::List do
12
12
 
13
13
  describe "on #{values.inspect}" do
14
14
 
15
- list = Hamster.list(*values)
15
+ before do
16
+ @list = Hamster.list(*values)
17
+ end
16
18
 
17
19
  it "returns self" do
18
- list.send(method).should equal(list)
20
+ @list.send(method).should equal(@list)
19
21
  end
20
22
 
21
23
  end
@@ -4,6 +4,18 @@ describe Hamster::List do
4
4
 
5
5
  describe "#drop" do
6
6
 
7
+ describe "on a really big list" do
8
+
9
+ before do
10
+ @list = Hamster.interval(0, 10000)
11
+ end
12
+
13
+ it "doesn't run out of stack space" do
14
+ @list.drop(10000)
15
+ end
16
+
17
+ end
18
+
7
19
  [
8
20
  [[], 10, []],
9
21
  [["A"], 10, []],
@@ -14,10 +26,12 @@ describe Hamster::List do
14
26
 
15
27
  describe "#{number} from #{values.inspect}" do
16
28
 
17
- list = Hamster.list(*values)
29
+ before do
30
+ @list = Hamster.list(*values)
31
+ end
18
32
 
19
33
  it "returns #{expected}" do
20
- list.drop(number).should == Hamster.list(*expected)
34
+ @list.drop(number).should == Hamster.list(*expected)
21
35
  end
22
36
 
23
37
  end
@@ -4,6 +4,18 @@ describe Hamster::List do
4
4
 
5
5
  describe "#drop_while" do
6
6
 
7
+ describe "on a really big list" do
8
+
9
+ before do
10
+ @list = Hamster.interval(0, 10000)
11
+ end
12
+
13
+ it "doesn't run out of stack space" do
14
+ @list.drop_while { true }
15
+ end
16
+
17
+ end
18
+
7
19
  [
8
20
  [[], []],
9
21
  [["A"], []],
@@ -12,12 +24,14 @@ describe Hamster::List do
12
24
 
13
25
  describe "on #{values.inspect}" do
14
26
 
15
- list = Hamster.list(*values)
27
+ before do
28
+ @list = Hamster.list(*values)
29
+ end
16
30
 
17
31
  describe "with a block" do
18
32
 
19
33
  it "returns #{expected}" do
20
- list.drop_while { |item| item < "C" }.should == Hamster.list(*expected)
34
+ @list.drop_while { |item| item < "C" }.should == Hamster.list(*expected)
21
35
  end
22
36
 
23
37
  end
@@ -25,7 +39,7 @@ describe Hamster::List do
25
39
  describe "without a block" do
26
40
 
27
41
  it "returns self" do
28
- list.drop_while.should == list
42
+ @list.drop_while.should equal(@list)
29
43
  end
30
44
 
31
45
  end
@@ -4,6 +4,18 @@ describe Hamster::List do
4
4
 
5
5
  describe "#each" do
6
6
 
7
+ describe "on a really big list" do
8
+
9
+ before do
10
+ @list = Hamster.interval(0, 10000)
11
+ end
12
+
13
+ it "doesn't run out of stack space" do
14
+ @list.each {}
15
+ end
16
+
17
+ end
18
+
7
19
  [
8
20
  [],
9
21
  ["A"],
@@ -12,18 +24,20 @@ describe Hamster::List do
12
24
 
13
25
  describe "on #{values.inspect}" do
14
26
 
15
- list = Hamster.list(*values)
27
+ before do
28
+ @list = Hamster.list(*values)
29
+ end
16
30
 
17
31
  describe "with a block" do
18
32
 
19
33
  it "iterates over the items in order" do
20
34
  items = []
21
- list.each { |value| items << value }
35
+ @list.each { |value| items << value }
22
36
  items.should == values
23
37
  end
24
38
 
25
39
  it "returns nil" do
26
- list.each {}.should be_nil
40
+ @list.each {}.should be_nil
27
41
  end
28
42
 
29
43
  end
@@ -31,7 +45,7 @@ describe Hamster::List do
31
45
  describe "without a block" do
32
46
 
33
47
  it "returns self" do
34
- list.each.should == list
48
+ @list.each.should equal(@list)
35
49
  end
36
50
 
37
51
  end
@@ -12,10 +12,12 @@ describe Hamster::List do
12
12
 
13
13
  describe "on #{values.inspect}" do
14
14
 
15
- list = Hamster.list(*values)
15
+ before do
16
+ @list = Hamster.list(*values)
17
+ end
16
18
 
17
19
  it "returns #{expected}" do
18
- list.empty?.should == expected
20
+ @list.empty?.should == expected
19
21
  end
20
22
 
21
23
  end