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
@@ -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
|
@@ -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
|
-
@
|
36
|
-
@
|
31
|
+
@matches = partitions.car
|
32
|
+
@remainder = partitions.cadr
|
37
33
|
end
|
38
34
|
|
39
35
|
it "correctly identifies the matches" do
|
40
|
-
@
|
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
|
-
@
|
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
|
60
|
-
@remainder = result.cadr
|
55
|
+
@matching = result.car
|
56
|
+
@remainder = result.cadr
|
61
57
|
end
|
62
58
|
|
63
59
|
it "correctly identifies the matches" do
|
64
|
-
@matching.should ==
|
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 ==
|
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 =
|
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
|
@@ -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
|
@@ -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 =
|
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
|
@@ -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
|
@@ -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
|
-
|
7
|
+
[:empty?, :null?].each do |method|
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
[
|
12
|
-
|
13
|
-
|
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
|