hamster 0.1.8 → 0.1.11
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/README.rdoc +34 -10
- data/lib/hamster.rb +0 -1
- data/lib/hamster/hash.rb +77 -20
- data/lib/hamster/list.rb +189 -52
- data/lib/hamster/set.rb +78 -23
- data/lib/hamster/stack.rb +13 -14
- data/lib/hamster/trie.rb +13 -4
- data/lib/hamster/version.rb +1 -1
- data/spec/hamster/hash/all_spec.rb +53 -0
- data/spec/hamster/hash/any_spec.rb +62 -0
- data/spec/hamster/hash/construction_spec.rb +21 -5
- data/spec/hamster/hash/copying_spec.rb +6 -10
- data/spec/hamster/hash/each_spec.rb +6 -18
- data/spec/hamster/hash/empty_spec.rb +9 -5
- data/spec/hamster/hash/eql_spec.rb +17 -22
- data/spec/hamster/hash/filter_spec.rb +61 -0
- data/spec/hamster/hash/get_spec.rb +24 -12
- data/spec/hamster/hash/has_key_spec.rb +17 -13
- data/spec/hamster/hash/map_spec.rb +66 -0
- data/spec/hamster/hash/none_spec.rb +62 -0
- data/spec/hamster/hash/put_spec.rb +17 -73
- data/spec/hamster/hash/reduce_spec.rb +58 -0
- data/spec/hamster/hash/reject_spec.rb +57 -0
- data/spec/hamster/hash/remove_spec.rb +13 -85
- data/spec/hamster/hash/size_spec.rb +25 -0
- data/spec/hamster/list/cadr_spec.rb +37 -0
- data/spec/hamster/list/construction_spec.rb +46 -6
- data/spec/hamster/list/copying_spec.rb +13 -11
- data/spec/hamster/list/drop_spec.rb +29 -0
- data/spec/hamster/list/drop_while_spec.rb +39 -0
- data/spec/hamster/list/each_spec.rb +24 -24
- data/spec/hamster/list/empty_spec.rb +15 -6
- data/spec/hamster/list/eql_spec.rb +27 -7
- data/spec/hamster/list/filter_spec.rb +51 -0
- data/spec/hamster/list/head_spec.rb +27 -0
- data/spec/hamster/list/include_spec.rb +37 -0
- data/spec/hamster/list/lazy_spec.rb +21 -0
- data/spec/hamster/list/map_spec.rb +21 -19
- data/spec/hamster/list/reduce_spec.rb +27 -15
- data/spec/hamster/list/reject_spec.rb +47 -0
- data/spec/hamster/list/size_spec.rb +31 -0
- data/spec/hamster/list/tail_spec.rb +27 -0
- data/spec/hamster/list/take_spec.rb +29 -0
- data/spec/hamster/list/take_while_spec.rb +45 -0
- data/spec/hamster/set/add_spec.rb +49 -0
- data/spec/hamster/set/all_spec.rb +61 -0
- data/spec/hamster/set/any_spec.rb +61 -0
- data/spec/hamster/set/construction_spec.rb +3 -3
- data/spec/hamster/set/copying_spec.rb +21 -0
- data/spec/hamster/set/each_spec.rb +36 -0
- data/spec/hamster/set/empty_spec.rb +21 -0
- data/spec/hamster/set/eql_spec.rb +31 -0
- data/spec/hamster/set/filter_spec.rb +61 -0
- data/spec/hamster/set/include_spec.rb +29 -0
- data/spec/hamster/set/map_spec.rb +66 -0
- data/spec/hamster/set/none_spec.rb +61 -0
- data/spec/hamster/set/reduce_spec.rb +58 -0
- data/spec/hamster/set/reject_spec.rb +57 -0
- data/spec/hamster/set/remove_spec.rb +45 -0
- data/spec/hamster/set/size_spec.rb +25 -0
- data/spec/hamster/stack/copying_spec.rb +1 -1
- data/spec/hamster/stack/empty_spec.rb +2 -2
- data/spec/hamster/stack/eql_spec.rb +15 -4
- data/spec/hamster/stack/push_spec.rb +6 -26
- data/spec/hamster/trie/remove_spec.rb +117 -0
- metadata +39 -7
- data/TODO +0 -1
- data/spec/hamster/list/accessor_spec.rb +0 -26
- data/spec/hamster/list/car_spec.rb +0 -17
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::List do
|
4
|
+
|
5
|
+
describe "#tail" do
|
6
|
+
|
7
|
+
[
|
8
|
+
[[], []],
|
9
|
+
[["A"], []],
|
10
|
+
[["A", "B", "C"], ["B", "C"]],
|
11
|
+
].each do |values, result|
|
12
|
+
|
13
|
+
describe "on #{values.inspect}" do
|
14
|
+
|
15
|
+
list = Hamster.list(*values)
|
16
|
+
|
17
|
+
it "returns #{result}" do
|
18
|
+
list.tail.should == Hamster.list(*result)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::List do
|
4
|
+
|
5
|
+
describe "#take" do
|
6
|
+
|
7
|
+
[
|
8
|
+
[[], 10, []],
|
9
|
+
[["A"], 10, ["A"]],
|
10
|
+
[["A"], -1, []],
|
11
|
+
[["A", "B", "C"], 0, []],
|
12
|
+
[["A", "B", "C"], 2, ["A", "B"]],
|
13
|
+
].each do |values, number, result|
|
14
|
+
|
15
|
+
describe "#{number} from #{values.inspect}" do
|
16
|
+
|
17
|
+
list = Hamster.list(*values)
|
18
|
+
|
19
|
+
it "returns #{result}" do
|
20
|
+
list.take(number).should == Hamster.list(*result)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::List do
|
4
|
+
|
5
|
+
describe "#take_while" do
|
6
|
+
|
7
|
+
[
|
8
|
+
[[], []],
|
9
|
+
[["A"], ["A"]],
|
10
|
+
[["A", "B", "C"], ["A", "B"]],
|
11
|
+
].each do |values, result|
|
12
|
+
|
13
|
+
describe "on #{values.inspect}" do
|
14
|
+
|
15
|
+
list = Hamster.list(*values)
|
16
|
+
|
17
|
+
describe "with a block" do
|
18
|
+
|
19
|
+
it "returns #{result}" do
|
20
|
+
list.take_while { |item| item < "C" }.should == Hamster.list(*result)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "is lazy" do
|
24
|
+
count = 0
|
25
|
+
list.take_while { |item| count += 1; true }
|
26
|
+
count.should <= 1
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "without a block" do
|
32
|
+
|
33
|
+
it "returns self" do
|
34
|
+
list.take_while.should == list
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::Set do
|
4
|
+
|
5
|
+
[:add, :<<].each do |method|
|
6
|
+
|
7
|
+
describe "##{method}" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@original = Hamster.set("A", "B", "C")
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "with a unique value" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
@result = @original.send(method, "D")
|
17
|
+
end
|
18
|
+
|
19
|
+
it "preserves the original" do
|
20
|
+
@original.should == Hamster.set("A", "B", "C")
|
21
|
+
end
|
22
|
+
|
23
|
+
it "returns a copy with the superset of values" do
|
24
|
+
@result.should == Hamster.set("A", "B", "C", "D")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "with a duplicate value" do
|
30
|
+
|
31
|
+
before do
|
32
|
+
@result = @original.send(method, "C")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "preserves the original values" do
|
36
|
+
@original.should == Hamster.set("A", "B", "C")
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns self" do
|
40
|
+
@result.should equal(@original)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::Set do
|
4
|
+
|
5
|
+
describe "#all?" do
|
6
|
+
|
7
|
+
describe "when empty" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@set = Hamster.set
|
11
|
+
end
|
12
|
+
|
13
|
+
it "with a block returns true" do
|
14
|
+
@set.all? {}.should be_true
|
15
|
+
end
|
16
|
+
|
17
|
+
it "with no block returns true" do
|
18
|
+
@set.all?.should be_true
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "when not empty" do
|
24
|
+
|
25
|
+
describe "with a block" do
|
26
|
+
|
27
|
+
before do
|
28
|
+
@set = Hamster.set("A", "B", "C")
|
29
|
+
end
|
30
|
+
|
31
|
+
it "returns true if the block always returns true" do
|
32
|
+
@set.all? { |item| true }.should be_true
|
33
|
+
end
|
34
|
+
|
35
|
+
it "returns false if the block ever returns false" do
|
36
|
+
@set.all? { |item| item == "D" }.should be_false
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "with no block" do
|
42
|
+
|
43
|
+
it "returns true if all values are truthy" do
|
44
|
+
Hamster.set(true, "A").all?.should be_true
|
45
|
+
end
|
46
|
+
|
47
|
+
[nil, false].each do |value|
|
48
|
+
|
49
|
+
it "returns false if any value is #{value.inspect}" do
|
50
|
+
Hamster.set(value, true, "A").all?.should be_false
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::Set do
|
4
|
+
|
5
|
+
describe "#any?" do
|
6
|
+
|
7
|
+
describe "when empty" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@set = Hamster.set
|
11
|
+
end
|
12
|
+
|
13
|
+
it "with a block returns false" do
|
14
|
+
@set.any? {}.should be_false
|
15
|
+
end
|
16
|
+
|
17
|
+
it "with no block returns false" do
|
18
|
+
@set.any?.should be_false
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "when not empty" do
|
24
|
+
|
25
|
+
describe "with a block" do
|
26
|
+
|
27
|
+
before do
|
28
|
+
@set = Hamster.set("A", "B", "C", nil)
|
29
|
+
end
|
30
|
+
|
31
|
+
["A", "B", "C", nil].each do |value|
|
32
|
+
|
33
|
+
it "returns true if the block ever returns true (#{value.inspect})" do
|
34
|
+
@set.any? { |item| item == value }.should be_true
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns false if the block always returns false" do
|
40
|
+
@set.any? { |item| item == "D" }.should be_false
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "with no block" do
|
46
|
+
|
47
|
+
it "returns true if any value is truthy" do
|
48
|
+
Hamster.set(nil, false, true, "A").any?.should be_true
|
49
|
+
end
|
50
|
+
|
51
|
+
it "returns false if all values are falsey" do
|
52
|
+
Hamster.set(nil, false).any?.should be_false
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -2,14 +2,14 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
2
2
|
|
3
3
|
describe Hamster::Set do
|
4
4
|
|
5
|
-
describe ".
|
5
|
+
describe ".set" do
|
6
6
|
|
7
7
|
before do
|
8
|
-
@set = Hamster
|
8
|
+
@set = Hamster.set("A", "B", "C")
|
9
9
|
end
|
10
10
|
|
11
11
|
it "is equivalent to repeatedly using #add" do
|
12
|
-
@set.should
|
12
|
+
@set.should == Hamster.set.add("A").add("B").add("C")
|
13
13
|
end
|
14
14
|
|
15
15
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::Set do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@set = Hamster.set("A", "B", "C")
|
7
|
+
end
|
8
|
+
|
9
|
+
[:dup, :clone].each do |method|
|
10
|
+
|
11
|
+
describe "##{method}" do
|
12
|
+
|
13
|
+
it "returns self" do
|
14
|
+
@set.send(method).should equal(@set)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
describe Hamster::Set do
|
5
|
+
|
6
|
+
describe "#each" do
|
7
|
+
|
8
|
+
before do
|
9
|
+
@set = Hamster.set("A", "B", "C")
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "with a block (internal iteration)" do
|
13
|
+
|
14
|
+
it "returns self" do
|
15
|
+
@set.each {}.should equal(@set)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "yields all values" do
|
19
|
+
actual_values = Set[]
|
20
|
+
@set.each { |value| actual_values << value }
|
21
|
+
actual_values.should == Set["A", "B", "C"]
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "with no block (external iteration)" do
|
27
|
+
|
28
|
+
it "returns an enumerator over all key value pairs" do
|
29
|
+
Set[*@set.each.to_a.flatten].should == Set["A", "B", "C"]
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::Set do
|
4
|
+
|
5
|
+
describe "#empty?" do
|
6
|
+
|
7
|
+
[
|
8
|
+
[[], true],
|
9
|
+
[["A"], false],
|
10
|
+
[["A", "B", "C"], false],
|
11
|
+
].each do |values, result|
|
12
|
+
|
13
|
+
it "returns #{result} for #{values.inspect}" do
|
14
|
+
Hamster.set(*values).empty?.should == result
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::Set do
|
4
|
+
|
5
|
+
[:eql?, :==].each do |method|
|
6
|
+
|
7
|
+
describe "##{method}" do
|
8
|
+
|
9
|
+
[
|
10
|
+
[[], [], true],
|
11
|
+
[["A"], [], false],
|
12
|
+
[[], ["A"], false],
|
13
|
+
[["A"], ["A"], true],
|
14
|
+
[["A"], ["B"], false],
|
15
|
+
[["A", "B"], ["A"], false],
|
16
|
+
[["A"], ["A", "B"], false],
|
17
|
+
[["A", "B", "C"], ["A", "B", "C"], true],
|
18
|
+
[["C", "A", "B"], ["A", "B", "C"], true],
|
19
|
+
].each do |a, b, result|
|
20
|
+
|
21
|
+
it "returns #{result} for #{a.inspect} and #{b.inspect}" do
|
22
|
+
Hamster.set(*a).send(method, Hamster.set(*b)).should == result
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::Set do
|
4
|
+
|
5
|
+
[:filter, :select].each do |method|
|
6
|
+
|
7
|
+
describe "##{method}" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@original = Hamster.set("A", "B", "C")
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "when everything matches" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
@result = @original.send(method) { |item| true }
|
17
|
+
end
|
18
|
+
|
19
|
+
it "returns self" do
|
20
|
+
@result.should equal(@original)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "when only some things match" do
|
26
|
+
|
27
|
+
describe "with a block" do
|
28
|
+
|
29
|
+
before do
|
30
|
+
@result = @original.send(method) { |item| item == "A" }
|
31
|
+
end
|
32
|
+
|
33
|
+
it "preserves the original" do
|
34
|
+
@original.should == Hamster.set("A", "B", "C")
|
35
|
+
end
|
36
|
+
|
37
|
+
it "returns a set with the matching values" do
|
38
|
+
@result.should == Hamster.set("A")
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "with no block" do
|
44
|
+
|
45
|
+
before do
|
46
|
+
@enumerator = @original.send(method)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "returns an enumerator over the values" do
|
50
|
+
Hamster.set(*@enumerator.to_a).should == Hamster.set("A", "B", "C")
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|