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