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
@@ -0,0 +1,51 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/list'
4
+
5
+ describe Hamster do
6
+
7
+ describe "#cycle" 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.cycle
21
+ end
22
+
23
+ end
24
+
25
+ describe "with an empty list" do
26
+
27
+ before do
28
+ @list = Hamster.list.cycle
29
+ end
30
+
31
+ it "returns the empty list" do
32
+ @list.should equal(Hamster.list)
33
+ end
34
+
35
+ end
36
+
37
+ describe "with a non-empty list" do
38
+
39
+ before do
40
+ @list = Hamster.list("A", "B", "C").cycle
41
+ end
42
+
43
+ it "infinitely cycles through all values" do
44
+ @list.take(7).should == Hamster.list("A", "B", "C", "A", "B", "C", "A")
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ 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
@@ -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
@@ -47,7 +43,7 @@ describe Hamster::List do
47
43
  end
48
44
 
49
45
  it "returns nil" do
50
- @list.each { "flibble" }.should be_nil
46
+ @list.each {}.should be_nil
51
47
  end
52
48
 
53
49
  end
@@ -4,22 +4,26 @@ require 'hamster/list'
4
4
 
5
5
  describe Hamster::List 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, expected|
9
+ describe "##{method}" do
14
10
 
15
- describe "on #{values.inspect}" do
11
+ [
12
+ [[], true],
13
+ [["A"], false],
14
+ [["A", "B", "C"], false],
15
+ ].each do |values, expected|
16
16
 
17
- before do
18
- @list = Hamster.list(*values)
19
- end
17
+ describe "on #{values.inspect}" do
18
+
19
+ before do
20
+ @list = Hamster.list(*values)
21
+ end
22
+
23
+ it "returns #{expected.inspect}" do
24
+ @list.send(method).should == expected
25
+ end
20
26
 
21
- it "returns #{expected.inspect}" do
22
- @list.empty?.should == expected
23
27
  end
24
28
 
25
29
  end
@@ -10,19 +10,14 @@ 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_a = Hamster.interval(0, 10000)
15
- @interval_b = Hamster.interval(0, 10000)
16
- end
17
-
18
13
  it "stream" do
19
- @a = @interval_a
20
- @b = @interval_b
14
+ @a = Hamster.interval(0, 10000)
15
+ @b = Hamster.interval(0, 10000)
21
16
  end
22
17
 
23
18
  it "list" do
24
- @a = @interval_a.reduce(Hamster.list) { |list, i| list.cons(i) }
25
- @b = @interval_b.reduce(Hamster.list) { |list, i| list.cons(i) }
19
+ @a = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
20
+ @b = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
26
21
  end
27
22
 
28
23
  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
@@ -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,83 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/list'
4
+
5
+ describe Hamster::List do
6
+
7
+ describe "#grep" 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.grep(Object)
21
+ end
22
+
23
+ end
24
+
25
+ describe "without a block" do
26
+
27
+ [
28
+ [[], []],
29
+ [["A"], ["A"]],
30
+ [[1], []],
31
+ [["A", 2, "C"], ["A", "C"]],
32
+ ].each do |values, expected|
33
+
34
+ describe "on #{values.inspect}" do
35
+
36
+ before do
37
+ @list = Hamster.list(*values)
38
+ end
39
+
40
+ it "returns #{expected.inspect}" do
41
+ @list.grep(String).should == Hamster.list(*expected)
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+
48
+ end
49
+
50
+ describe "with a block" do
51
+
52
+ [
53
+ [[], []],
54
+ [["A"], ["a"]],
55
+ [[1], []],
56
+ [["A", 2, "C"], ["a", "c"]],
57
+ ].each do |values, expected|
58
+
59
+ describe "on #{values.inspect}" do
60
+
61
+ before do
62
+ @list = Hamster.list(*values)
63
+ end
64
+
65
+ it "returns #{expected.inspect}" do
66
+ @list.grep(String) { |item| item.downcase }.should == Hamster.list(*expected)
67
+ end
68
+
69
+ it "is lazy" do
70
+ count = 0
71
+ @list.grep(Object) { |item| count += 1; item }
72
+ count.should <= 1
73
+ end
74
+
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+
81
+ end
82
+
83
+ 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
@@ -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
@@ -10,20 +10,16 @@ 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
26
- @interval.send(method)
22
+ @list.send(method)
27
23
  end
28
24
 
29
25
  end
@@ -10,20 +10,16 @@ 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
26
- @interval.send(method)
22
+ @list.send(method)
27
23
  end
28
24
 
29
25
  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,20 +8,16 @@ 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
24
- @interval.one? { false }
20
+ @list.one? { false }
25
21
  end
26
22
 
27
23
  end