hamster 0.1.13 → 0.1.14
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 +14 -0
- data/README.rdoc +2 -2
- data/lib/hamster/hash.rb +10 -9
- data/lib/hamster/list.rb +96 -64
- data/lib/hamster/set.rb +12 -5
- data/lib/hamster/version.rb +1 -1
- data/spec/hamster/hash/all_spec.rb +1 -1
- data/spec/hamster/hash/eql_spec.rb +42 -13
- data/spec/hamster/hash/filter_spec.rb +1 -1
- data/spec/hamster/hash/reduce_spec.rb +1 -1
- data/spec/hamster/hash/reject_spec.rb +31 -27
- data/spec/hamster/list/all_spec.rb +73 -0
- data/spec/hamster/list/any_spec.rb +77 -0
- data/spec/hamster/list/cadr_spec.rb +4 -2
- data/spec/hamster/list/cons_spec.rb +6 -4
- data/spec/hamster/list/copying_spec.rb +4 -2
- data/spec/hamster/list/drop_spec.rb +16 -2
- data/spec/hamster/list/drop_while_spec.rb +17 -3
- data/spec/hamster/list/each_spec.rb +18 -4
- data/spec/hamster/list/empty_spec.rb +4 -2
- data/spec/hamster/list/eql_spec.rb +41 -7
- data/spec/hamster/list/filter_spec.rb +20 -6
- data/spec/hamster/list/find_spec.rb +63 -0
- data/spec/hamster/list/head_spec.rb +4 -2
- data/spec/hamster/list/include_spec.rb +16 -2
- data/spec/hamster/list/inspect_spec.rb +16 -2
- data/spec/hamster/list/map_spec.rb +18 -4
- data/spec/hamster/list/none_spec.rb +73 -0
- data/spec/hamster/list/reduce_spec.rb +66 -12
- data/spec/hamster/list/reject_spec.rb +39 -21
- data/spec/hamster/list/size_spec.rb +16 -2
- data/spec/hamster/list/tail_spec.rb +4 -2
- data/spec/hamster/list/take_spec.rb +16 -2
- data/spec/hamster/list/take_while_spec.rb +18 -4
- data/spec/hamster/list/to_a_spec.rb +16 -2
- data/spec/hamster/list/to_ary_spec.rb +42 -0
- data/spec/hamster/set/eql_spec.rb +35 -5
- data/spec/hamster/set/filter_spec.rb +1 -1
- data/spec/hamster/set/reduce_spec.rb +1 -1
- data/spec/hamster/set/reject_spec.rb +31 -27
- data/spec/hamster/set/to_a_spec.rb +29 -0
- data/spec/hamster/stack/copying_spec.rb +4 -2
- data/spec/hamster/stack/empty_spec.rb +4 -2
- data/spec/hamster/stack/eql_spec.rb +27 -7
- data/spec/hamster/stack/inspect_spec.rb +4 -2
- data/spec/hamster/stack/pop_spec.rb +12 -8
- data/spec/hamster/stack/push_spec.rb +6 -4
- data/spec/hamster/stack/size_spec.rb +4 -2
- data/spec/hamster/stack/top_spec.rb +6 -4
- metadata +8 -2
@@ -6,25 +6,59 @@ describe Hamster::List do
|
|
6
6
|
|
7
7
|
describe "##{method}" do
|
8
8
|
|
9
|
+
describe "on a really big list" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
@a = Hamster.interval(0, 10000)
|
13
|
+
@b = Hamster.interval(0, 10000)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "doesn't run out of stack space" do
|
17
|
+
@a.send(method, @b)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "returns false when comparing with" do
|
23
|
+
|
24
|
+
before do
|
25
|
+
@list = Hamster.list("A", "B", "C")
|
26
|
+
end
|
27
|
+
|
28
|
+
it "an array" do
|
29
|
+
@list.send(method, ["A", "B", "C"]).should be_false
|
30
|
+
end
|
31
|
+
|
32
|
+
it "an aribtrary object" do
|
33
|
+
@list.send(method, Object.new).should be_false
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
9
38
|
[
|
10
39
|
[[], [], true],
|
40
|
+
[[], [nil], false],
|
11
41
|
[["A"], [], false],
|
12
|
-
[[], ["A"], false],
|
13
42
|
[["A"], ["A"], true],
|
14
43
|
[["A"], ["B"], false],
|
15
44
|
[["A", "B"], ["A"], false],
|
16
|
-
[["A"], ["A", "B"], false],
|
17
45
|
[["A", "B", "C"], ["A", "B", "C"], true],
|
18
46
|
[["C", "A", "B"], ["A", "B", "C"], false],
|
19
47
|
].each do |a, b, expected|
|
20
48
|
|
21
|
-
describe "
|
49
|
+
describe "returns #{expected}" do
|
50
|
+
|
51
|
+
before do
|
52
|
+
@a = Hamster.list(*a)
|
53
|
+
@b = Hamster.list(*b)
|
54
|
+
end
|
22
55
|
|
23
|
-
a
|
24
|
-
|
56
|
+
it "for lists #{a.inspect} and #{b.inspect}" do
|
57
|
+
@a.send(method, @b).should == expected
|
58
|
+
end
|
25
59
|
|
26
|
-
it "
|
27
|
-
|
60
|
+
it "for lists #{b.inspect} and #{a.inspect}" do
|
61
|
+
@b.send(method, @a).should == expected
|
28
62
|
end
|
29
63
|
|
30
64
|
end
|
@@ -2,9 +2,21 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
2
2
|
|
3
3
|
describe Hamster::List do
|
4
4
|
|
5
|
-
[:filter, :select].each do |method|
|
5
|
+
[:filter, :select, :find_all].each do |method|
|
6
6
|
|
7
|
-
describe "
|
7
|
+
describe "##{method}" do
|
8
|
+
|
9
|
+
describe "on a really big list" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
@list = Hamster.interval(0, 10000)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "doesn't run out of stack space" do
|
16
|
+
@list.filter { false }
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
8
20
|
|
9
21
|
[
|
10
22
|
[[], []],
|
@@ -16,17 +28,19 @@ describe Hamster::List do
|
|
16
28
|
|
17
29
|
describe "on #{values.inspect}" do
|
18
30
|
|
19
|
-
|
31
|
+
before do
|
32
|
+
@list = Hamster.list(*values)
|
33
|
+
end
|
20
34
|
|
21
35
|
describe "with a block" do
|
22
36
|
|
23
37
|
it "returns #{expected}" do
|
24
|
-
list.send(method) { |item| item == item.upcase }.should == Hamster.list(*expected)
|
38
|
+
@list.send(method) { |item| item == item.upcase }.should == Hamster.list(*expected)
|
25
39
|
end
|
26
40
|
|
27
41
|
it "is lazy" do
|
28
42
|
count = 0
|
29
|
-
list.send(method) { |item| count += 1; true }
|
43
|
+
@list.send(method) { |item| count += 1; true }
|
30
44
|
count.should <= 1
|
31
45
|
end
|
32
46
|
|
@@ -35,7 +49,7 @@ describe Hamster::List do
|
|
35
49
|
describe "without a block" do
|
36
50
|
|
37
51
|
it "returns self" do
|
38
|
-
list.send(method).should
|
52
|
+
@list.send(method).should equal(@list)
|
39
53
|
end
|
40
54
|
|
41
55
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::List do
|
4
|
+
|
5
|
+
[:find, :detect].each do |method|
|
6
|
+
|
7
|
+
describe "##{method}" do
|
8
|
+
|
9
|
+
describe "on a really big list" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
@list = Hamster.interval(0, 10000)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "doesn't run out of stack space" do
|
16
|
+
@list.send(method) { false }
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
[
|
22
|
+
[[], "A", nil],
|
23
|
+
[[], nil, nil],
|
24
|
+
[["A"], "A", "A"],
|
25
|
+
[["A"], "B", nil],
|
26
|
+
[["A"], nil, nil],
|
27
|
+
[["A", "B", nil], "A", "A"],
|
28
|
+
[["A", "B", nil], "B", "B"],
|
29
|
+
[["A", "B", nil], nil, nil],
|
30
|
+
[["A", "B", nil], "C", nil],
|
31
|
+
].each do |values, item, expected|
|
32
|
+
|
33
|
+
describe "on #{values.inspect}" do
|
34
|
+
|
35
|
+
before do
|
36
|
+
@list = Hamster.list(*values)
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "with a block" do
|
40
|
+
|
41
|
+
it "returns #{expected}" do
|
42
|
+
@list.send(method) { |x| x == item }.should == expected
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "without a block" do
|
48
|
+
|
49
|
+
it "returns nil" do
|
50
|
+
@list.send(method).should be_nil
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
@@ -12,10 +12,12 @@ describe Hamster::List do
|
|
12
12
|
|
13
13
|
describe "on #{values.inspect}" do
|
14
14
|
|
15
|
-
|
15
|
+
before do
|
16
|
+
@list = Hamster.list(*values)
|
17
|
+
end
|
16
18
|
|
17
19
|
it "returns #{expected}" do
|
18
|
-
list.head.should == expected
|
20
|
+
@list.head.should == expected
|
19
21
|
end
|
20
22
|
|
21
23
|
end
|
@@ -6,6 +6,18 @@ describe Hamster::List do
|
|
6
6
|
|
7
7
|
describe "##{method}" do
|
8
8
|
|
9
|
+
describe "on a really big list" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
@list = Hamster.interval(0, 10000)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "doesn't run out of stack space" do
|
16
|
+
@list.send(method, nil)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
9
21
|
[
|
10
22
|
[[], "A", false],
|
11
23
|
[[], nil, false],
|
@@ -20,10 +32,12 @@ describe Hamster::List do
|
|
20
32
|
|
21
33
|
describe "on #{values.inspect}" do
|
22
34
|
|
23
|
-
|
35
|
+
before do
|
36
|
+
@list = Hamster.list(*values)
|
37
|
+
end
|
24
38
|
|
25
39
|
it "returns #{expected}" do
|
26
|
-
list.send(method, item).should == expected
|
40
|
+
@list.send(method, item).should == expected
|
27
41
|
end
|
28
42
|
|
29
43
|
end
|
@@ -4,6 +4,18 @@ describe Hamster::List do
|
|
4
4
|
|
5
5
|
describe "#inspect" do
|
6
6
|
|
7
|
+
describe "on a really big list" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@list = Hamster.interval(0, 10000)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "doesn't run out of stack space" do
|
14
|
+
@list.to_a
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
7
19
|
[
|
8
20
|
[[], "[]"],
|
9
21
|
[["A"], "[\"A\"]"],
|
@@ -12,10 +24,12 @@ describe Hamster::List do
|
|
12
24
|
|
13
25
|
describe "on #{values.inspect}" do
|
14
26
|
|
15
|
-
|
27
|
+
before do
|
28
|
+
@list = Hamster.list(*values)
|
29
|
+
end
|
16
30
|
|
17
31
|
it "returns #{expected}" do
|
18
|
-
list.inspect.should == expected
|
32
|
+
@list.inspect.should == expected
|
19
33
|
end
|
20
34
|
|
21
35
|
end
|
@@ -6,6 +6,18 @@ describe Hamster::List do
|
|
6
6
|
|
7
7
|
describe "##{method}" do
|
8
8
|
|
9
|
+
describe "on a really big list" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
@list = Hamster.interval(0, 10000)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "doesn't run out of stack space" do
|
16
|
+
@list.send(method) { |item| item }
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
9
21
|
[
|
10
22
|
[[], []],
|
11
23
|
[["A"], ["a"]],
|
@@ -14,17 +26,19 @@ describe Hamster::List do
|
|
14
26
|
|
15
27
|
describe "on #{values.inspect}" do
|
16
28
|
|
17
|
-
|
29
|
+
before do
|
30
|
+
@list = Hamster.list(*values)
|
31
|
+
end
|
18
32
|
|
19
33
|
describe "with a block" do
|
20
34
|
|
21
35
|
it "returns #{expected}" do
|
22
|
-
list.send(method) { |item| item.downcase }.should == Hamster.list(*expected)
|
36
|
+
@list.send(method) { |item| item.downcase }.should == Hamster.list(*expected)
|
23
37
|
end
|
24
38
|
|
25
39
|
it "is lazy" do
|
26
40
|
count = 0
|
27
|
-
list.send(method) { |item| count += 1 }
|
41
|
+
@list.send(method) { |item| count += 1 }
|
28
42
|
count.should <= 1
|
29
43
|
end
|
30
44
|
|
@@ -33,7 +47,7 @@ describe Hamster::List do
|
|
33
47
|
describe "without a block" do
|
34
48
|
|
35
49
|
it "returns self" do
|
36
|
-
list.send(method).should
|
50
|
+
@list.send(method).should equal(@list)
|
37
51
|
end
|
38
52
|
|
39
53
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::List do
|
4
|
+
|
5
|
+
describe "#none?" do
|
6
|
+
|
7
|
+
describe "on a really big list" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@list = Hamster.interval(0, 10000)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "doesn't run out of stack space" do
|
14
|
+
@list.none? { false }
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "when empty" do
|
20
|
+
|
21
|
+
before do
|
22
|
+
@list = Hamster.list
|
23
|
+
end
|
24
|
+
|
25
|
+
it "with a block returns true" do
|
26
|
+
@list.none? {}.should be_true
|
27
|
+
end
|
28
|
+
|
29
|
+
it "with no block returns true" do
|
30
|
+
@list.none?.should be_true
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "when not empty" do
|
36
|
+
|
37
|
+
describe "with a block" do
|
38
|
+
|
39
|
+
before do
|
40
|
+
@list = Hamster.list("A", "B", "C", nil)
|
41
|
+
end
|
42
|
+
|
43
|
+
["A", "B", "C", nil].each do |value|
|
44
|
+
|
45
|
+
it "returns false if the block ever returns true (#{value.inspect})" do
|
46
|
+
@list.none? { |item| item == value }.should be_false
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
it "returns true if the block always returns false" do
|
52
|
+
@list.none? { |item| item == "D" }.should be_true
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "with no block" do
|
58
|
+
|
59
|
+
it "returns false if any value is truthy" do
|
60
|
+
Hamster.list(nil, false, true, "A").none?.should be_false
|
61
|
+
end
|
62
|
+
|
63
|
+
it "returns true if all values are falsey" do
|
64
|
+
Hamster.list(nil, false).none?.should be_true
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
@@ -2,32 +2,86 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
2
2
|
|
3
3
|
describe Hamster::List do
|
4
4
|
|
5
|
-
[:reduce, :inject].each do |method|
|
5
|
+
[:reduce, :inject, :fold].each do |method|
|
6
6
|
|
7
7
|
describe "##{method}" do
|
8
8
|
|
9
|
+
describe "on a really big list" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
@list = Hamster.interval(0, 10000)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "doesn't run out of stack space" do
|
16
|
+
@list.reduce(nil) { }
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
9
21
|
[
|
10
|
-
[[],
|
11
|
-
[[
|
12
|
-
[[
|
13
|
-
].each do |values, expected|
|
22
|
+
[[], 10, 10],
|
23
|
+
[[1], 10, 9],
|
24
|
+
[[1, 2, 3], 10, 4],
|
25
|
+
].each do |values, initial, expected|
|
14
26
|
|
15
27
|
describe "on #{values.inspect}" do
|
16
28
|
|
17
|
-
|
29
|
+
before do
|
30
|
+
@list = Hamster.list(*values)
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "with an initial value of #{initial}" do
|
34
|
+
|
35
|
+
describe "and a block" do
|
36
|
+
|
37
|
+
it "returns #{expected.inspect}" do
|
38
|
+
@list.send(method, initial) { |memo, item| memo - item }.should == expected
|
39
|
+
end
|
18
40
|
|
19
|
-
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "and no block" do
|
44
|
+
|
45
|
+
it "returns the memo" do
|
46
|
+
@list.send(method, initial).should == initial
|
47
|
+
end
|
20
48
|
|
21
|
-
it "returns #{expected.inspect}" do
|
22
|
-
list.send(method, "@") { |memo, item| memo << item.downcase }.should == expected
|
23
49
|
end
|
24
50
|
|
25
51
|
end
|
26
52
|
|
27
|
-
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
[
|
58
|
+
[[], nil],
|
59
|
+
[[1], 1],
|
60
|
+
[[1, 2, 3], -4],
|
61
|
+
].each do |values, expected|
|
62
|
+
|
63
|
+
describe "on #{values.inspect}" do
|
64
|
+
|
65
|
+
before do
|
66
|
+
@list = Hamster.list(*values)
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "with no initial value" do
|
70
|
+
|
71
|
+
describe "and a block" do
|
72
|
+
|
73
|
+
it "returns #{expected.inspect}" do
|
74
|
+
@list.send(method) { |memo, item| memo - item }.should == expected
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "and no block" do
|
80
|
+
|
81
|
+
it "returns the first value in the list" do
|
82
|
+
@list.send(method).should == values.first
|
83
|
+
end
|
28
84
|
|
29
|
-
it "returns the memo" do
|
30
|
-
list.send(method, "@").should == "@"
|
31
85
|
end
|
32
86
|
|
33
87
|
end
|