hamster 0.3.10 → 0.4.0
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 +10 -0
- data/README.rdoc +13 -10
- data/lib/hamster.rb +2 -1
- data/lib/hamster.rbc +165 -0
- data/lib/hamster/core_ext.rbc +69 -0
- data/lib/hamster/core_ext/enumerable.rbc +636 -0
- data/lib/hamster/core_ext/io.rbc +616 -0
- data/lib/hamster/enumerable.rb +141 -0
- data/lib/hamster/experimental/mutable_hash.rb +34 -0
- data/lib/hamster/experimental/mutable_queue.rb +34 -0
- data/lib/hamster/experimental/mutable_set.rb +46 -0
- data/lib/hamster/experimental/mutable_stack.rb +35 -0
- data/lib/hamster/{read_copy_update.rb → experimental/read_copy_update.rb} +4 -5
- data/lib/hamster/hash.rb +1 -0
- data/lib/hamster/hash.rbc +4429 -0
- data/lib/hamster/immutable.rbc +1609 -0
- data/lib/hamster/list.rb +4 -109
- data/lib/hamster/list.rbc +15710 -0
- data/lib/hamster/queue.rbc +1842 -0
- data/lib/hamster/set.rb +6 -111
- data/lib/hamster/set.rbc +7780 -0
- data/lib/hamster/sorter.rb +2 -2
- data/lib/hamster/sorter.rbc +371 -0
- data/lib/hamster/stack.rbc +1627 -0
- data/lib/hamster/trie.rbc +3527 -0
- data/lib/hamster/tuple.rbc +873 -0
- data/lib/hamster/undefined.rbc +258 -0
- data/lib/hamster/vector.rb +157 -0
- data/lib/hamster/version.rb +1 -1
- data/lib/hamster/version.rbc +136 -0
- data/spec/hamster/core_ext/io_spec.rb +2 -2
- data/spec/hamster/experimental/mutable_set/add?_spec.rb +47 -0
- data/spec/hamster/experimental/mutable_set/add_spec.rb +51 -0
- data/spec/hamster/experimental/mutable_set/delete?_spec.rb +47 -0
- data/spec/hamster/experimental/mutable_set/delete_spec.rb +47 -0
- data/spec/hamster/experimental/mutable_stack/pop_spec.rb +41 -0
- data/spec/hamster/experimental/mutable_stack/push_spec.rb +41 -0
- data/spec/hamster/hash/put_spec.rb +2 -2
- data/spec/hamster/list/each_with_index_spec.rb +42 -0
- data/spec/hamster/list/head_spec.rb +0 -12
- data/spec/hamster/set/construction_spec.rb +16 -4
- data/spec/hamster/set/filter_spec.rb +16 -0
- data/spec/hamster/set/flatten_spec.rb +13 -2
- data/spec/hamster/stack/pop_spec.rb +2 -24
- data/spec/hamster/vector/add_spec.rb +41 -0
- data/spec/hamster/vector/any_spec.rb +67 -0
- data/spec/hamster/vector/clear_spec.rb +36 -0
- data/spec/hamster/vector/copying_spec.rb +32 -0
- data/spec/hamster/vector/each_spec.rb +46 -0
- data/spec/hamster/vector/each_with_index_spec.rb +42 -0
- data/spec/hamster/vector/empty_spec.rb +35 -0
- data/spec/hamster/vector/eql_spec.rb +65 -0
- data/spec/hamster/vector/filter_spec.rb +63 -0
- data/spec/hamster/vector/first_spec.rb +35 -0
- data/spec/hamster/vector/get_spec.rb +81 -0
- data/spec/hamster/vector/include_spec.rb +45 -0
- data/spec/hamster/vector/inspect_spec.rb +31 -0
- data/spec/hamster/vector/last_spec.rb +32 -0
- data/spec/hamster/vector/reduce_spec.rb +87 -0
- data/spec/hamster/vector/set_spec.rb +153 -0
- data/spec/hamster/vector/size_spec.rb +27 -0
- data/spec/hamster/vector/to_a_spec.rb +42 -0
- data/spec/hamster/vector/to_ary_spec.rb +44 -0
- data/spec/spec_helper.rb +2 -2
- data/tasks/bundler.rb +2 -0
- data/tasks/publish.rb +1 -1
- data/tasks/rspec.rb +1 -2
- metadata +56 -14
- data/lib/hamster/read_copy_update_hash.rb +0 -28
- data/lib/hamster/read_copy_update_list.rb +0 -26
- data/lib/hamster/read_copy_update_queue.rb +0 -27
- data/lib/hamster/read_copy_update_set.rb +0 -26
- data/lib/hamster/read_copy_update_stack.rb +0 -27
@@ -9,6 +9,8 @@ describe Hamster::Stack do
|
|
9
9
|
describe "##{method}" do
|
10
10
|
|
11
11
|
[
|
12
|
+
[[], []],
|
13
|
+
[["A"], []],
|
12
14
|
[["A", "B"], ["A"]],
|
13
15
|
[["A", "B", "C"], ["A", "B"]],
|
14
16
|
].each do |values, expected|
|
@@ -32,30 +34,6 @@ describe Hamster::Stack do
|
|
32
34
|
|
33
35
|
end
|
34
36
|
|
35
|
-
[
|
36
|
-
[],
|
37
|
-
["A"],
|
38
|
-
].each do |values|
|
39
|
-
|
40
|
-
describe "on #{values.inspect}" do
|
41
|
-
|
42
|
-
before do
|
43
|
-
@original = Hamster.stack(*values)
|
44
|
-
@result = @original.send(method)
|
45
|
-
end
|
46
|
-
|
47
|
-
it "preserves the original" do
|
48
|
-
@original.should == Hamster.stack(*values)
|
49
|
-
end
|
50
|
-
|
51
|
-
it "returns an empty stack" do
|
52
|
-
@result.should be_empty
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
37
|
end
|
60
38
|
|
61
39
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/vector'
|
4
|
+
|
5
|
+
describe Hamster::Vector do
|
6
|
+
|
7
|
+
[:add, :<<, :cons].each do |method|
|
8
|
+
|
9
|
+
describe "##{method}" do
|
10
|
+
|
11
|
+
[
|
12
|
+
[[], "A", ["A"]],
|
13
|
+
[["A"], "B", ["A", "B"]],
|
14
|
+
[["A"], "A", ["A", "A"]],
|
15
|
+
[["A", "B", "C"], "D", ["A", "B", "C", "D"]],
|
16
|
+
].each do |values, new_value, expected|
|
17
|
+
|
18
|
+
describe "on #{values.inspect} with #{new_value.inspect}" do
|
19
|
+
|
20
|
+
before do
|
21
|
+
@original = Hamster.vector(*values)
|
22
|
+
@result = @original.send(method, new_value)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "preserves the original" do
|
26
|
+
@original.should == Hamster.vector(*values)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "returns #{expected.inspect}" do
|
30
|
+
@result.should == Hamster.vector(*expected)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/vector'
|
4
|
+
|
5
|
+
describe Hamster::Vector do
|
6
|
+
|
7
|
+
[:any?, :exist?, :exists?].each do |method|
|
8
|
+
|
9
|
+
describe "##{method}" do
|
10
|
+
|
11
|
+
describe "when empty" do
|
12
|
+
|
13
|
+
before do
|
14
|
+
@vector = Hamster.vector
|
15
|
+
end
|
16
|
+
|
17
|
+
it "with a block returns false" do
|
18
|
+
@vector.send(method) {}.should == false
|
19
|
+
end
|
20
|
+
|
21
|
+
it "with no block returns false" do
|
22
|
+
@vector.send(method).should == false
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "when not empty" do
|
28
|
+
|
29
|
+
describe "with a block" do
|
30
|
+
|
31
|
+
before do
|
32
|
+
@vector = Hamster.vector("A", "B", "C", nil)
|
33
|
+
end
|
34
|
+
|
35
|
+
["A", "B", "C", nil].each do |value|
|
36
|
+
|
37
|
+
it "returns true if the block ever returns true (#{value.inspect})" do
|
38
|
+
@vector.send(method) { |item| item == value }.should == true
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
it "returns false if the block always returns false" do
|
44
|
+
@vector.send(method) { |item| item == "D" }.should == false
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "with no block" do
|
50
|
+
|
51
|
+
it "returns true if any value is truthy" do
|
52
|
+
Hamster.vector(nil, false, "A", true).send(method).should == true
|
53
|
+
end
|
54
|
+
|
55
|
+
it "returns false if all values are falsey" do
|
56
|
+
Hamster.vector(nil, false).send(method).should == false
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/vector'
|
4
|
+
|
5
|
+
describe Hamster::Vector do
|
6
|
+
|
7
|
+
describe "#clear" do
|
8
|
+
|
9
|
+
[
|
10
|
+
[],
|
11
|
+
["A"],
|
12
|
+
["A", "B", "C"],
|
13
|
+
].each do |values|
|
14
|
+
|
15
|
+
describe "on #{values}" do
|
16
|
+
|
17
|
+
before do
|
18
|
+
@original = Hamster.vector(*values)
|
19
|
+
@result = @original.clear
|
20
|
+
end
|
21
|
+
|
22
|
+
it "preserves the original" do
|
23
|
+
@original.should == Hamster.vector(*values)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns an empty vector" do
|
27
|
+
@result.should equal(Hamster.vector)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/vector'
|
4
|
+
|
5
|
+
describe Hamster::Vector do
|
6
|
+
|
7
|
+
[:dup, :clone].each do |method|
|
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
|
+
@original = Hamster.vector(*values)
|
19
|
+
@result = @original.send(method)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns self" do
|
23
|
+
@result.should equal(@original)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/vector'
|
4
|
+
|
5
|
+
describe Hamster::Vector do
|
6
|
+
|
7
|
+
[:each, :foreach].each do |method|
|
8
|
+
|
9
|
+
describe "##{method}" do
|
10
|
+
|
11
|
+
describe "with no block" do
|
12
|
+
|
13
|
+
before do
|
14
|
+
@vector = Hamster.vector("A", "B", "C")
|
15
|
+
@result = @vector.send(method)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns self" do
|
19
|
+
@result.should equal(@vector)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "with a block" do
|
25
|
+
|
26
|
+
before do
|
27
|
+
@vector = Hamster.vector(*(1..1025))
|
28
|
+
@items = []
|
29
|
+
@result = @vector.send(method) { |item| @items << item }
|
30
|
+
end
|
31
|
+
|
32
|
+
it "returns nil" do
|
33
|
+
@result.should be_nil
|
34
|
+
end
|
35
|
+
|
36
|
+
it "iterates over the items in order" do
|
37
|
+
@items.should == (1..1025).to_a
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/vector'
|
4
|
+
|
5
|
+
describe Hamster::Vector do
|
6
|
+
|
7
|
+
describe "#each_with_index" do
|
8
|
+
|
9
|
+
describe "with no block" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
@vector = Hamster.vector("A", "B", "C")
|
13
|
+
@result = @vector.each_with_index
|
14
|
+
end
|
15
|
+
|
16
|
+
it "returns self" do
|
17
|
+
@result.should equal(@vector)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "with a block" do
|
23
|
+
|
24
|
+
before do
|
25
|
+
@vector = Hamster.vector(*(1..1025))
|
26
|
+
@pairs = []
|
27
|
+
@result = @vector.each_with_index { |item, index| @pairs << [item, index] }
|
28
|
+
end
|
29
|
+
|
30
|
+
it "returns nil" do
|
31
|
+
@result.should be_nil
|
32
|
+
end
|
33
|
+
|
34
|
+
it "iterates over the items in order" do
|
35
|
+
@pairs.should == (1..@vector.size).zip(0..@vector.size.pred)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/vector'
|
4
|
+
|
5
|
+
describe Hamster::Vector do
|
6
|
+
|
7
|
+
[:empty?, :null?].each do |method|
|
8
|
+
|
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
|
+
@vector = Hamster.vector(*values)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "returns #{expected.inspect}" do
|
24
|
+
@vector.send(method).should == expected
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/vector'
|
4
|
+
|
5
|
+
describe Hamster::Vector do
|
6
|
+
|
7
|
+
[:eql?, :==].each do |method|
|
8
|
+
|
9
|
+
describe "##{method}" do
|
10
|
+
|
11
|
+
describe "returns false when comparing with" do
|
12
|
+
|
13
|
+
before do
|
14
|
+
@vector = Hamster.vector("A", "B", "C")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "an array with the same contents" do
|
18
|
+
@vector.send(method, ["A", "B", "C"]).should == false
|
19
|
+
end
|
20
|
+
|
21
|
+
it "an aribtrary object" do
|
22
|
+
@vector.send(method, Object.new).should == false
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
it "returns false when comparing an empty vector with an empty array" do
|
28
|
+
Hamster.vector.send(method, []).should == false
|
29
|
+
end
|
30
|
+
|
31
|
+
[
|
32
|
+
[[], [], true],
|
33
|
+
[[], [nil], false],
|
34
|
+
[["A"], [], false],
|
35
|
+
[["A"], ["A"], true],
|
36
|
+
[["A"], ["B"], false],
|
37
|
+
[["A", "B"], ["A"], false],
|
38
|
+
[["A", "B", "C"], ["A", "B", "C"], true],
|
39
|
+
[["C", "A", "B"], ["A", "B", "C"], false],
|
40
|
+
].each do |a, b, expected|
|
41
|
+
|
42
|
+
describe "returns #{expected.inspect}" do
|
43
|
+
|
44
|
+
before do
|
45
|
+
@a = Hamster.vector(*a)
|
46
|
+
@b = Hamster.vector(*b)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "for vectors #{a.inspect} and #{b.inspect}" do
|
50
|
+
@a.send(method, @b).should == expected
|
51
|
+
end
|
52
|
+
|
53
|
+
it "for vectors #{b.inspect} and #{a.inspect}" do
|
54
|
+
@b.send(method, @a).should == expected
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/vector'
|
4
|
+
|
5
|
+
describe Hamster::Vector do
|
6
|
+
|
7
|
+
[:filter, :select, :find_all].each do |method|
|
8
|
+
|
9
|
+
describe "##{method}" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
@original = Hamster.vector("A", "B", "C")
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "with a block" do
|
16
|
+
|
17
|
+
before do
|
18
|
+
@result = @original.send(method) { |item| item == "A" }
|
19
|
+
end
|
20
|
+
|
21
|
+
it "preserves the original" do
|
22
|
+
@original.should == Hamster.vector("A", "B", "C")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns a vector with the matching values" do
|
26
|
+
@result.should == Hamster.vector("A")
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "with no block" do
|
32
|
+
|
33
|
+
before do
|
34
|
+
@result = @original.send(method)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "returns self" do
|
38
|
+
@result.should equal(@original)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "when nothing matches" do
|
44
|
+
|
45
|
+
before do
|
46
|
+
@result = @original.send(method) { |item| false }
|
47
|
+
end
|
48
|
+
|
49
|
+
it "preserves the original" do
|
50
|
+
@original.should == Hamster.vector("A", "B", "C")
|
51
|
+
end
|
52
|
+
|
53
|
+
it "returns an empty vector" do
|
54
|
+
@result.should equal(Hamster.vector)
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|