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.
- data/History.rdoc +30 -0
- data/README.rdoc +12 -6
- data/lib/hamster/hash.rb +1 -0
- data/lib/hamster/list.rb +55 -38
- data/lib/hamster/set.rb +12 -0
- data/lib/hamster/version.rb +1 -1
- data/spec/hamster/hash/empty_spec.rb +12 -8
- data/spec/hamster/list/all_spec.rb +3 -7
- data/spec/hamster/list/any_spec.rb +3 -7
- data/spec/hamster/list/append_spec.rb +2 -6
- data/spec/hamster/list/construction_spec.rb +42 -6
- data/spec/hamster/list/cycle_spec.rb +51 -0
- data/spec/hamster/list/drop_spec.rb +2 -6
- data/spec/hamster/list/drop_while_spec.rb +2 -6
- data/spec/hamster/list/each_spec.rb +3 -7
- data/spec/hamster/list/empty_spec.rb +16 -12
- data/spec/hamster/list/eql_spec.rb +4 -9
- data/spec/hamster/list/filter_spec.rb +2 -6
- data/spec/hamster/list/find_spec.rb +2 -6
- data/spec/hamster/list/grep_spec.rb +83 -0
- data/spec/hamster/list/include_spec.rb +2 -6
- data/spec/hamster/list/inspect_spec.rb +2 -6
- data/spec/hamster/list/map_spec.rb +2 -6
- data/spec/hamster/list/maximum_spec.rb +3 -7
- data/spec/hamster/list/minimum_spec.rb +3 -7
- data/spec/hamster/list/none_spec.rb +2 -6
- data/spec/hamster/list/one_spec.rb +3 -7
- data/spec/hamster/list/partition_spec.rb +10 -14
- data/spec/hamster/list/reduce_spec.rb +2 -6
- data/spec/hamster/list/reject_spec.rb +2 -6
- data/spec/hamster/list/reverse_spec.rb +2 -6
- data/spec/hamster/list/size_spec.rb +2 -6
- data/spec/hamster/list/split_at_spec.rb +64 -0
- data/spec/hamster/list/take_spec.rb +2 -6
- data/spec/hamster/list/take_while_spec.rb +2 -6
- data/spec/hamster/list/to_a_spec.rb +2 -6
- data/spec/hamster/list/to_ary_spec.rb +2 -6
- data/spec/hamster/list/zip_spec.rb +50 -0
- data/spec/hamster/set/empty_spec.rb +20 -8
- data/spec/hamster/set/grep_spec.rb +62 -0
- data/spec/hamster/set/to_list.rb +46 -0
- data/spec/hamster/set/uniq_spec.rb +23 -0
- 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 =
|
12
|
+
@list = Hamster.interval(0, 10000)
|
17
13
|
end
|
18
14
|
|
19
15
|
it "list" do
|
20
|
-
@list =
|
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 =
|
12
|
+
@list = Hamster.interval(0, 10000)
|
17
13
|
end
|
18
14
|
|
19
15
|
it "list" do
|
20
|
-
@list =
|
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 =
|
12
|
+
@list = Hamster.interval(0, 10000)
|
17
13
|
end
|
18
14
|
|
19
15
|
it "list" do
|
20
|
-
@list =
|
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 {
|
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
|
-
|
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
|
-
|
11
|
+
[
|
12
|
+
[[], true],
|
13
|
+
[["A"], false],
|
14
|
+
[["A", "B", "C"], false],
|
15
|
+
].each do |values, expected|
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
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 =
|
20
|
-
@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 =
|
25
|
-
@b =
|
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 =
|
14
|
+
@list = Hamster.interval(0, 10000)
|
19
15
|
end
|
20
16
|
|
21
17
|
it "list" do
|
22
|
-
@list =
|
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 =
|
14
|
+
@list = Hamster.interval(0, 10000)
|
19
15
|
end
|
20
16
|
|
21
17
|
it "list" do
|
22
|
-
@list =
|
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 =
|
14
|
+
@list = Hamster.interval(0, 10000)
|
19
15
|
end
|
20
16
|
|
21
17
|
it "list" do
|
22
|
-
@list =
|
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 =
|
12
|
+
@list = Hamster.interval(0, 10000)
|
17
13
|
end
|
18
14
|
|
19
15
|
it "list" do
|
20
|
-
@list =
|
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 =
|
14
|
+
@list = Hamster.interval(0, 10000)
|
19
15
|
end
|
20
16
|
|
21
17
|
it "list" do
|
22
|
-
@list =
|
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 =
|
14
|
+
@list = Hamster.interval(0, 10000)
|
19
15
|
end
|
20
16
|
|
21
17
|
it "list" do
|
22
|
-
@list =
|
18
|
+
@list = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
|
23
19
|
end
|
24
20
|
|
25
21
|
after do
|
26
|
-
@
|
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 =
|
14
|
+
@list = Hamster.interval(0, 10000)
|
19
15
|
end
|
20
16
|
|
21
17
|
it "list" do
|
22
|
-
@list =
|
18
|
+
@list = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
|
23
19
|
end
|
24
20
|
|
25
21
|
after do
|
26
|
-
@
|
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 =
|
12
|
+
@list = Hamster.interval(0, 10000)
|
17
13
|
end
|
18
14
|
|
19
15
|
it "list" do
|
20
|
-
@list =
|
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 =
|
12
|
+
@list = Hamster.interval(0, 10000)
|
17
13
|
end
|
18
14
|
|
19
15
|
it "list" do
|
20
|
-
@list =
|
16
|
+
@list = (0..10000).reduce(Hamster.list) { |list, i| list.cons(i) }
|
21
17
|
end
|
22
18
|
|
23
19
|
after do
|
24
|
-
@
|
20
|
+
@list.one? { false }
|
25
21
|
end
|
26
22
|
|
27
23
|
end
|