hamster 0.1.13 → 0.1.14

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 (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