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
@@ -6,7 +6,7 @@ describe IO do
|
|
6
6
|
|
7
7
|
describe "#to_list" do
|
8
8
|
|
9
|
-
|
9
|
+
describe "with a File" do
|
10
10
|
|
11
11
|
it "returns an equivalent list" do
|
12
12
|
File.open(File.dirname(__FILE__) + "/io_spec.txt") do |io|
|
@@ -16,7 +16,7 @@ describe IO do
|
|
16
16
|
|
17
17
|
end
|
18
18
|
|
19
|
-
|
19
|
+
describe "with a StringIO" do
|
20
20
|
|
21
21
|
it "returns an equivalent list" do
|
22
22
|
StringIO.new("A\nB\nC\n").to_list.should == Hamster.list("A\n", "B\n", "C\n")
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/experimental/mutable_set'
|
4
|
+
|
5
|
+
describe Hamster::MutableSet do
|
6
|
+
|
7
|
+
describe "#add?" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@set = Hamster.mutable_set("A", "B", "C")
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "with a unique value" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
@result = @set.add?("D")
|
17
|
+
end
|
18
|
+
|
19
|
+
it "returns true" do
|
20
|
+
@result.should == true
|
21
|
+
end
|
22
|
+
|
23
|
+
it "modifies the set to include the new value" do
|
24
|
+
@set.should == Hamster.mutable_set("A", "B", "C", "D")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "with a duplicate value" do
|
30
|
+
|
31
|
+
before do
|
32
|
+
@result = @set.add?("C")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "preserves the original values" do
|
36
|
+
@set.should == Hamster.mutable_set("A", "B", "C")
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns false" do
|
40
|
+
@result.should == false
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/experimental/mutable_set'
|
4
|
+
|
5
|
+
describe Hamster::MutableSet do
|
6
|
+
|
7
|
+
[:add, :<<].each do |method|
|
8
|
+
|
9
|
+
describe "##{method}" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
@set = Hamster.mutable_set("A", "B", "C")
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "with a unique value" do
|
16
|
+
|
17
|
+
before do
|
18
|
+
@result = @set.send(method, "D")
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns self" do
|
22
|
+
@result.should equal(@set)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "modifies the set to include the new value" do
|
26
|
+
@set.should == Hamster.mutable_set("A", "B", "C", "D")
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "with a duplicate value" do
|
32
|
+
|
33
|
+
before do
|
34
|
+
@result = @set.send(method, "C")
|
35
|
+
end
|
36
|
+
|
37
|
+
it "preserves the original values" do
|
38
|
+
@set.should == Hamster.mutable_set("A", "B", "C")
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns self" do
|
42
|
+
@result.should equal(@set)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/experimental/mutable_set'
|
4
|
+
|
5
|
+
describe Hamster::Set do
|
6
|
+
|
7
|
+
describe "#delete?" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@set = Hamster.mutable_set("A", "B", "C")
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "with an existing value" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
@result = @set.delete?("B")
|
17
|
+
end
|
18
|
+
|
19
|
+
it "returns true" do
|
20
|
+
@result.should == true
|
21
|
+
end
|
22
|
+
|
23
|
+
it "modifies the set to remove the value" do
|
24
|
+
@set.should == Hamster.mutable_set("A", "C")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "with a non-existing value" do
|
30
|
+
|
31
|
+
before do
|
32
|
+
@result = @set.delete?("D")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "preserves the original values" do
|
36
|
+
@set.should == Hamster.mutable_set("A", "B", "C")
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns false" do
|
40
|
+
@result.should == false
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/experimental/mutable_set'
|
4
|
+
|
5
|
+
describe Hamster::Set do
|
6
|
+
|
7
|
+
describe "#delete" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@set = Hamster.mutable_set("A", "B", "C")
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "with an existing value" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
@result = @set.delete("B")
|
17
|
+
end
|
18
|
+
|
19
|
+
it "returns self" do
|
20
|
+
@result.should equal(@set)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "modifies the set to remove the value" do
|
24
|
+
@set.should == Hamster.mutable_set("A", "C")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "with a non-existing value" do
|
30
|
+
|
31
|
+
before do
|
32
|
+
@result = @set.delete("D")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "preserves the original values" do
|
36
|
+
@set.should == Hamster.mutable_set("A", "B", "C")
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns self" do
|
40
|
+
@result.should equal(@set)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/experimental/mutable_stack'
|
4
|
+
|
5
|
+
describe Hamster::MutableStack do
|
6
|
+
|
7
|
+
[:pop, :dequeue].each do |method|
|
8
|
+
|
9
|
+
describe "##{method}" do
|
10
|
+
|
11
|
+
[
|
12
|
+
[[], nil, []],
|
13
|
+
[["A"], "A", []],
|
14
|
+
[["A", "B"], "B", ["A"]],
|
15
|
+
[["A", "B", "C"], "C", ["A", "B"]],
|
16
|
+
].each do |initial_state, return_value, resulting_state|
|
17
|
+
|
18
|
+
describe "on #{initial_state.inspect}" do
|
19
|
+
|
20
|
+
before do
|
21
|
+
@stack = Hamster.mutable_stack(*initial_state)
|
22
|
+
@result = @stack.send(method)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns #{return_value.inspect}" do
|
26
|
+
@result.should == return_value
|
27
|
+
end
|
28
|
+
|
29
|
+
it "modifies the stack to #{resulting_state.inspect}" do
|
30
|
+
@stack.should == Hamster.mutable_stack(*resulting_state)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/experimental/mutable_stack'
|
4
|
+
|
5
|
+
describe Hamster::MutableStack do
|
6
|
+
|
7
|
+
[:push, :<<, :enqueue].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 |initial_state, new_value, resulting_state|
|
17
|
+
|
18
|
+
describe "on #{initial_state.inspect} with #{new_value.inspect}" do
|
19
|
+
|
20
|
+
before do
|
21
|
+
@stack = Hamster.mutable_stack(*initial_state)
|
22
|
+
@result = @stack.send(method, new_value)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns self" do
|
26
|
+
@result.should equal(@stack)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "modifies the stack to #{resulting_state.inspect}" do
|
30
|
+
@stack.should == Hamster.mutable_stack(*resulting_state)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'hamster/list'
|
4
|
+
|
5
|
+
describe Hamster::List do
|
6
|
+
|
7
|
+
describe "#each_with_index" do
|
8
|
+
|
9
|
+
describe "with no block" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
@list = Hamster.list("A", "B", "C")
|
13
|
+
@result = @list.each_with_index
|
14
|
+
end
|
15
|
+
|
16
|
+
it "returns self" do
|
17
|
+
@result.should equal(@list)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "with a block" do
|
23
|
+
|
24
|
+
before do
|
25
|
+
@list = Hamster.interval(1, 1025)
|
26
|
+
@pairs = []
|
27
|
+
@result = @list.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..@list.size).zip(0..@list.size.pred)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -6,18 +6,6 @@ describe Hamster::List do
|
|
6
6
|
|
7
7
|
[:head, :first].each do |method|
|
8
8
|
|
9
|
-
describe "on a really big list" do
|
10
|
-
|
11
|
-
before do
|
12
|
-
@list = Hamster.interval(0, STACK_OVERFLOW_DEPTH)
|
13
|
-
end
|
14
|
-
|
15
|
-
it "doesn't run out of stack" do
|
16
|
-
lambda { @list.filter(&:nil?).head }.should_not raise_error
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
9
|
describe "##{method}" do
|
22
10
|
|
23
11
|
[
|
@@ -6,12 +6,24 @@ describe Hamster::Set do
|
|
6
6
|
|
7
7
|
describe ".set" do
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
describe "with no values" do
|
10
|
+
|
11
|
+
it "returns the empty set" do
|
12
|
+
Hamster.set.should equal(Hamster::EmptySet)
|
13
|
+
end
|
14
|
+
|
11
15
|
end
|
12
16
|
|
13
|
-
|
14
|
-
|
17
|
+
describe "with a list of values" do
|
18
|
+
|
19
|
+
before do
|
20
|
+
@set = Hamster.set("A", "B", "C")
|
21
|
+
end
|
22
|
+
|
23
|
+
it "is equivalent to repeatedly using #add" do
|
24
|
+
@set.should == Hamster.set.add("A").add("B").add("C")
|
25
|
+
end
|
26
|
+
|
15
27
|
end
|
16
28
|
|
17
29
|
end
|
@@ -56,6 +56,22 @@ describe Hamster::Set do
|
|
56
56
|
|
57
57
|
end
|
58
58
|
|
59
|
+
describe "when nothing matches" do
|
60
|
+
|
61
|
+
before do
|
62
|
+
@result = @original.send(method) { |item| false }
|
63
|
+
end
|
64
|
+
|
65
|
+
it "preserves the original" do
|
66
|
+
@original.should == Hamster.set("A", "B", "C")
|
67
|
+
end
|
68
|
+
|
69
|
+
it "returns an empty set" do
|
70
|
+
@result.should equal(Hamster.set)
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
59
75
|
end
|
60
76
|
|
61
77
|
end
|
@@ -7,7 +7,6 @@ describe Hamster do
|
|
7
7
|
describe "#flatten" do
|
8
8
|
|
9
9
|
[
|
10
|
-
[[], []],
|
11
10
|
[["A"], ["A"]],
|
12
11
|
[["A", "B", "C"], ["A", "B", "C"]],
|
13
12
|
[["A", Hamster.set("B"), "C"], ["A", "B", "C"]],
|
@@ -25,7 +24,7 @@ describe Hamster do
|
|
25
24
|
@original.should == Hamster.set(*values)
|
26
25
|
end
|
27
26
|
|
28
|
-
it "returns
|
27
|
+
it "returns the inlined values" do
|
29
28
|
@result.should == Hamster.set(*expected)
|
30
29
|
end
|
31
30
|
|
@@ -33,6 +32,18 @@ describe Hamster do
|
|
33
32
|
|
34
33
|
end
|
35
34
|
|
35
|
+
describe "on an empty set" do
|
36
|
+
|
37
|
+
before do
|
38
|
+
@result = Hamster.set.flatten
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns an empty set" do
|
42
|
+
@result.should equal(Hamster.set)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
36
47
|
end
|
37
48
|
|
38
49
|
end
|