hamster 0.1.16 → 0.1.17

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