hamster 0.1.16 → 0.1.17

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 (43) hide show
  1. data/History.rdoc +30 -0
  2. data/README.rdoc +12 -6
  3. data/lib/hamster/hash.rb +1 -0
  4. data/lib/hamster/list.rb +55 -38
  5. data/lib/hamster/set.rb +12 -0
  6. data/lib/hamster/version.rb +1 -1
  7. data/spec/hamster/hash/empty_spec.rb +12 -8
  8. data/spec/hamster/list/all_spec.rb +3 -7
  9. data/spec/hamster/list/any_spec.rb +3 -7
  10. data/spec/hamster/list/append_spec.rb +2 -6
  11. data/spec/hamster/list/construction_spec.rb +42 -6
  12. data/spec/hamster/list/cycle_spec.rb +51 -0
  13. data/spec/hamster/list/drop_spec.rb +2 -6
  14. data/spec/hamster/list/drop_while_spec.rb +2 -6
  15. data/spec/hamster/list/each_spec.rb +3 -7
  16. data/spec/hamster/list/empty_spec.rb +16 -12
  17. data/spec/hamster/list/eql_spec.rb +4 -9
  18. data/spec/hamster/list/filter_spec.rb +2 -6
  19. data/spec/hamster/list/find_spec.rb +2 -6
  20. data/spec/hamster/list/grep_spec.rb +83 -0
  21. data/spec/hamster/list/include_spec.rb +2 -6
  22. data/spec/hamster/list/inspect_spec.rb +2 -6
  23. data/spec/hamster/list/map_spec.rb +2 -6
  24. data/spec/hamster/list/maximum_spec.rb +3 -7
  25. data/spec/hamster/list/minimum_spec.rb +3 -7
  26. data/spec/hamster/list/none_spec.rb +2 -6
  27. data/spec/hamster/list/one_spec.rb +3 -7
  28. data/spec/hamster/list/partition_spec.rb +10 -14
  29. data/spec/hamster/list/reduce_spec.rb +2 -6
  30. data/spec/hamster/list/reject_spec.rb +2 -6
  31. data/spec/hamster/list/reverse_spec.rb +2 -6
  32. data/spec/hamster/list/size_spec.rb +2 -6
  33. data/spec/hamster/list/split_at_spec.rb +64 -0
  34. data/spec/hamster/list/take_spec.rb +2 -6
  35. data/spec/hamster/list/take_while_spec.rb +2 -6
  36. data/spec/hamster/list/to_a_spec.rb +2 -6
  37. data/spec/hamster/list/to_ary_spec.rb +2 -6
  38. data/spec/hamster/list/zip_spec.rb +50 -0
  39. data/spec/hamster/set/empty_spec.rb +20 -8
  40. data/spec/hamster/set/grep_spec.rb +62 -0
  41. data/spec/hamster/set/to_list.rb +46 -0
  42. data/spec/hamster/set/uniq_spec.rb +23 -0
  43. metadata +9 -2
@@ -8,16 +8,12 @@ describe Hamster::List do
8
8
 
9
9
  describe "doesn't run out of stack space on a really big" do
10
10
 
11
- before do
12
- @interval = Hamster.interval(0, 10000)
13
- end
14
-
15
11
  it "stream" do
16
- @list = @interval
12
+ @list = Hamster.interval(0, 10000)
17
13
  end
18
14
 
19
15
  it "list" do
20
- @list = @interval.reduce(Hamster.list) { |list, i| list.cons(i) }
16
+ @list = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
21
17
  end
22
18
 
23
19
  after do
@@ -32,16 +28,16 @@ describe Hamster::List do
32
28
  count = 0
33
29
  counter = Hamster.stream { count += 1 }
34
30
  partitions = counter.partition { |item| item %2 != 0 }
35
- @odds = partitions.car.take(5).to_a
36
- @evens = partitions.cadr.take(5).to_a
31
+ @matches = partitions.car
32
+ @remainder = partitions.cadr
37
33
  end
38
34
 
39
35
  it "correctly identifies the matches" do
40
- @odds.should == [1, 3, 5, 7, 9]
36
+ @matches.take(5).should == Hamster.list(1, 3, 5, 7, 9)
41
37
  end
42
38
 
43
39
  it "correctly identifies the remainder" do
44
- @evens.should == [2, 4, 6, 8, 10]
40
+ @remainder.take(5).should == Hamster.list(2, 4, 6, 8, 10)
45
41
  end
46
42
 
47
43
  end
@@ -56,16 +52,16 @@ describe Hamster::List do
56
52
 
57
53
  before do
58
54
  result = @original.partition { |item| (item % 2) != 0 }
59
- @matching = result.car.to_a
60
- @remainder = result.cadr.to_a
55
+ @matching = result.car
56
+ @remainder = result.cadr
61
57
  end
62
58
 
63
59
  it "correctly identifies the matches" do
64
- @matching.should == [1, 3, 5, 7, 9]
60
+ @matching.should == Hamster.list(1, 3, 5, 7, 9)
65
61
  end
66
62
 
67
63
  it "correctly identifies the remainder" do
68
- @remainder.should == [0, 2, 4, 6, 8, 10]
64
+ @remainder.should == Hamster.list(0, 2, 4, 6, 8, 10)
69
65
  end
70
66
 
71
67
  end
@@ -10,16 +10,12 @@ describe Hamster::List do
10
10
 
11
11
  describe "doesn't run out of stack space on a really big" do
12
12
 
13
- before do
14
- @interval = Hamster.interval(0, 10000)
15
- end
16
-
17
13
  it "stream" do
18
- @list = @interval
14
+ @list = Hamster.interval(0, 10000)
19
15
  end
20
16
 
21
17
  it "list" do
22
- @list = @interval.reduce(Hamster.list) { |list, i| list.cons(i) }
18
+ @list = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
23
19
  end
24
20
 
25
21
  after do
@@ -10,16 +10,12 @@ describe Hamster::List do
10
10
 
11
11
  describe "doesn't run out of stack space on a really big" do
12
12
 
13
- before do
14
- @interval = Hamster.interval(0, 10000)
15
- end
16
-
17
13
  it "stream" do
18
- @list = @interval
14
+ @list = Hamster.interval(0, 10000)
19
15
  end
20
16
 
21
17
  it "list" do
22
- @list = @interval.reduce(Hamster.list) { |list, i| list.cons(i) }
18
+ @list = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
23
19
  end
24
20
 
25
21
  after do
@@ -8,16 +8,12 @@ describe Hamster::List do
8
8
 
9
9
  describe "doesn't run out of stack space on a really big" do
10
10
 
11
- before do
12
- @interval = Hamster.interval(0, 10000)
13
- end
14
-
15
11
  it "stream" do
16
- @list = @interval
12
+ @list = Hamster.interval(0, 10000)
17
13
  end
18
14
 
19
15
  it "list" do
20
- @list = @interval.reduce(Hamster.list) { |list, i| list.cons(i) }
16
+ @list = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
21
17
  end
22
18
 
23
19
  after do
@@ -10,16 +10,12 @@ describe Hamster::List do
10
10
 
11
11
  describe "doesn't run out of stack space on a really big" do
12
12
 
13
- before do
14
- @interval = Hamster.interval(0, 10000)
15
- end
16
-
17
13
  it "stream" do
18
- @list = @interval
14
+ @list = Hamster.interval(0, 10000)
19
15
  end
20
16
 
21
17
  it "list" do
22
- @list = @interval.reduce(Hamster.list) { |list, i| list.cons(i) }
18
+ @list = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
23
19
  end
24
20
 
25
21
  after do
@@ -0,0 +1,64 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/list'
4
+
5
+ describe Hamster::List do
6
+
7
+ describe "#split_at" do
8
+
9
+ describe "doesn't run out of stack space on a really big" do
10
+
11
+ it "stream" do
12
+ @list = Hamster.interval(0, 10000)
13
+ end
14
+
15
+ it "list" do
16
+ @list = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
17
+ end
18
+
19
+ after do
20
+ @list.split_at(5000)
21
+ end
22
+
23
+ end
24
+
25
+ describe "on an empty list" do
26
+
27
+ before do
28
+ splits = Hamster.list.split_at(4)
29
+ @prefix = splits.car
30
+ @remainder = splits.cadr
31
+ end
32
+
33
+ it "returns the empty list for the prefix" do
34
+ @prefix.should equal(Hamster.list)
35
+ end
36
+
37
+ it "returns the empty list for the remainder" do
38
+ @remainder.should equal(Hamster.list)
39
+ end
40
+
41
+ end
42
+
43
+ describe "on a non-empty list" do
44
+
45
+ before do
46
+ interval = Hamster.interval(1, 11)
47
+ splits = interval.split_at(5)
48
+ @prefix = splits.car
49
+ @remainder = splits.cadr
50
+ end
51
+
52
+ it "correctly identifies the prefix" do
53
+ @prefix.should == Hamster.list(1, 2, 3, 4, 5)
54
+ end
55
+
56
+ it "correctly identifies the remainder" do
57
+ @remainder.should == Hamster.list(6, 7, 8, 9, 10, 11)
58
+ end
59
+
60
+ end
61
+
62
+ end
63
+
64
+ end
@@ -8,16 +8,12 @@ describe Hamster::List do
8
8
 
9
9
  describe "doesn't run out of stack space on a really big" do
10
10
 
11
- before do
12
- @interval = Hamster.interval(0, 10000)
13
- end
14
-
15
11
  it "stream" do
16
- @list = @interval
12
+ @list = Hamster.interval(0, 10000)
17
13
  end
18
14
 
19
15
  it "list" do
20
- @list = @interval.reduce(Hamster.list) { |list, i| list.cons(i) }
16
+ @list = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
21
17
  end
22
18
 
23
19
  after do
@@ -8,16 +8,12 @@ describe Hamster::List do
8
8
 
9
9
  describe "doesn't run out of stack space on a really big" do
10
10
 
11
- before do
12
- @interval = Hamster.interval(0, 10000)
13
- end
14
-
15
11
  it "stream" do
16
- @list = @interval
12
+ @list = Hamster.interval(0, 10000)
17
13
  end
18
14
 
19
15
  it "list" do
20
- @list = @interval.reduce(Hamster.list) { |list, i| list.cons(i) }
16
+ @list = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
21
17
  end
22
18
 
23
19
  after do
@@ -10,16 +10,12 @@ describe Hamster::List do
10
10
 
11
11
  describe "doesn't run out of stack space on a really big" do
12
12
 
13
- before do
14
- @interval = Hamster.interval(0, 10000)
15
- end
16
-
17
13
  it "stream" do
18
- @list = @interval
14
+ @list = Hamster.interval(0, 10000)
19
15
  end
20
16
 
21
17
  it "list" do
22
- @list = @interval.reduce(Hamster.list) { |list, i| list.cons(i) }
18
+ @list = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
23
19
  end
24
20
 
25
21
  after do
@@ -8,16 +8,12 @@ describe Hamster::List do
8
8
 
9
9
  describe "doesn't run out of stack space on a really big" do
10
10
 
11
- before do
12
- @interval = Hamster.interval(0, 10000)
13
- end
14
-
15
11
  it "stream" do
16
- @list = @interval
12
+ @list = Hamster.interval(0, 10000)
17
13
  end
18
14
 
19
15
  it "list" do
20
- @list = @interval.reduce(Hamster.list) { |list, i| list.cons(i) }
16
+ @list = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
21
17
  end
22
18
 
23
19
  after do
@@ -0,0 +1,50 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/list'
4
+
5
+ describe Hamster::List do
6
+
7
+ describe "#zip" do
8
+
9
+ describe "doesn't run out of stack space on a really big" do
10
+
11
+ it "stream" do
12
+ @a = @b = Hamster.interval(0, 10000)
13
+ end
14
+
15
+ it "list" do
16
+ @a = @b = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
17
+ end
18
+
19
+ after do
20
+ @a.zip(@b)
21
+ end
22
+
23
+ end
24
+
25
+ [
26
+ [[], [], []],
27
+ [["A"], ["aye"], [Hamster.list("A", "aye")]],
28
+ [["A"], [], [Hamster.list("A", nil)]],
29
+ [[], ["A"], [Hamster.list(nil, "A")]],
30
+ [["A", "B", "C"], ["aye", "bee", "see"], [Hamster.list("A", "aye"), Hamster.list("B", "bee"), Hamster.list("C", "see")]],
31
+ ].each do |a, b, expected|
32
+
33
+ describe "on #{a.inspect} and #{b.inspect}" do
34
+
35
+ before do
36
+ @a = Hamster.list(*a)
37
+ @b = Hamster.list(*b)
38
+ end
39
+
40
+ it "returns #{expected.inspect}" do
41
+ @a.zip(@b).should == Hamster.list(*expected)
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+
48
+ end
49
+
50
+ end
@@ -4,16 +4,28 @@ require 'hamster/set'
4
4
 
5
5
  describe Hamster::Set do
6
6
 
7
- describe "#empty?" do
7
+ [:empty?, :null?].each do |method|
8
8
 
9
- [
10
- [[], true],
11
- [["A"], false],
12
- [["A", "B", "C"], false],
13
- ].each do |values, result|
9
+ describe "##{method}" do
10
+
11
+ [
12
+ [[], true],
13
+ [["A"], false],
14
+ [["A", "B", "C"], false],
15
+ ].each do |values, expected|
16
+
17
+ describe "on #{values.inspect}" do
18
+
19
+ before do
20
+ @set = Hamster.set(*values)
21
+ end
22
+
23
+ it "returns #{expected.inspect}" do
24
+ @set.send(method).should == expected
25
+ end
26
+
27
+ end
14
28
 
15
- it "returns #{result} for #{values.inspect}" do
16
- Hamster.set(*values).empty?.should == result
17
29
  end
18
30
 
19
31
  end
@@ -0,0 +1,62 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/set'
4
+
5
+ describe Hamster::Set do
6
+
7
+ describe "#grep" do
8
+
9
+ describe "without a block" do
10
+
11
+ [
12
+ [[], []],
13
+ [["A"], ["A"]],
14
+ [[1], []],
15
+ [["A", 2, "C"], ["A", "C"]],
16
+ ].each do |values, expected|
17
+
18
+ describe "on #{values.inspect}" do
19
+
20
+ before do
21
+ @list = Hamster.set(*values)
22
+ end
23
+
24
+ it "returns #{expected.inspect}" do
25
+ @list.grep(String).should == Hamster.set(*expected)
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+
34
+ describe "with a block" do
35
+
36
+ [
37
+ [[], []],
38
+ [["A"], ["a"]],
39
+ [[1], []],
40
+ [["A", 2, "C"], ["a", "c"]],
41
+ ].each do |values, expected|
42
+
43
+ describe "on #{values.inspect}" do
44
+
45
+ before do
46
+ @list = Hamster.set(*values)
47
+ end
48
+
49
+ it "returns #{expected.inspect}" do
50
+ @list.grep(String) { |item| item.downcase }.should == Hamster.set(*expected)
51
+ end
52
+
53
+
54
+ end
55
+
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+
62
+ end
@@ -0,0 +1,46 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/set'
4
+
5
+ describe Hamster::Set do
6
+
7
+ describe "#to_list" do
8
+
9
+ [
10
+ [],
11
+ ["A"],
12
+ ["A", "B", "C"],
13
+ ].each do |values|
14
+
15
+ describe "on #{values.inspect}" do
16
+
17
+ before do
18
+ set = Hamster.set(*values)
19
+ @list = set.to_list
20
+ end
21
+
22
+ it "returns a list" do
23
+ @list.is_a?(Hamster::List).should be_true
24
+ end
25
+
26
+ describe "the returned list" do
27
+
28
+ it "has the correct length" do
29
+ @list.size.should == values.size
30
+ end
31
+
32
+ it "contains all values" do
33
+ values.each do |value|
34
+ @list.should include(value)
35
+ end
36
+ end
37
+
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+
46
+ end