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.
Files changed (73) hide show
  1. data/History.rdoc +10 -0
  2. data/README.rdoc +13 -10
  3. data/lib/hamster.rb +2 -1
  4. data/lib/hamster.rbc +165 -0
  5. data/lib/hamster/core_ext.rbc +69 -0
  6. data/lib/hamster/core_ext/enumerable.rbc +636 -0
  7. data/lib/hamster/core_ext/io.rbc +616 -0
  8. data/lib/hamster/enumerable.rb +141 -0
  9. data/lib/hamster/experimental/mutable_hash.rb +34 -0
  10. data/lib/hamster/experimental/mutable_queue.rb +34 -0
  11. data/lib/hamster/experimental/mutable_set.rb +46 -0
  12. data/lib/hamster/experimental/mutable_stack.rb +35 -0
  13. data/lib/hamster/{read_copy_update.rb → experimental/read_copy_update.rb} +4 -5
  14. data/lib/hamster/hash.rb +1 -0
  15. data/lib/hamster/hash.rbc +4429 -0
  16. data/lib/hamster/immutable.rbc +1609 -0
  17. data/lib/hamster/list.rb +4 -109
  18. data/lib/hamster/list.rbc +15710 -0
  19. data/lib/hamster/queue.rbc +1842 -0
  20. data/lib/hamster/set.rb +6 -111
  21. data/lib/hamster/set.rbc +7780 -0
  22. data/lib/hamster/sorter.rb +2 -2
  23. data/lib/hamster/sorter.rbc +371 -0
  24. data/lib/hamster/stack.rbc +1627 -0
  25. data/lib/hamster/trie.rbc +3527 -0
  26. data/lib/hamster/tuple.rbc +873 -0
  27. data/lib/hamster/undefined.rbc +258 -0
  28. data/lib/hamster/vector.rb +157 -0
  29. data/lib/hamster/version.rb +1 -1
  30. data/lib/hamster/version.rbc +136 -0
  31. data/spec/hamster/core_ext/io_spec.rb +2 -2
  32. data/spec/hamster/experimental/mutable_set/add?_spec.rb +47 -0
  33. data/spec/hamster/experimental/mutable_set/add_spec.rb +51 -0
  34. data/spec/hamster/experimental/mutable_set/delete?_spec.rb +47 -0
  35. data/spec/hamster/experimental/mutable_set/delete_spec.rb +47 -0
  36. data/spec/hamster/experimental/mutable_stack/pop_spec.rb +41 -0
  37. data/spec/hamster/experimental/mutable_stack/push_spec.rb +41 -0
  38. data/spec/hamster/hash/put_spec.rb +2 -2
  39. data/spec/hamster/list/each_with_index_spec.rb +42 -0
  40. data/spec/hamster/list/head_spec.rb +0 -12
  41. data/spec/hamster/set/construction_spec.rb +16 -4
  42. data/spec/hamster/set/filter_spec.rb +16 -0
  43. data/spec/hamster/set/flatten_spec.rb +13 -2
  44. data/spec/hamster/stack/pop_spec.rb +2 -24
  45. data/spec/hamster/vector/add_spec.rb +41 -0
  46. data/spec/hamster/vector/any_spec.rb +67 -0
  47. data/spec/hamster/vector/clear_spec.rb +36 -0
  48. data/spec/hamster/vector/copying_spec.rb +32 -0
  49. data/spec/hamster/vector/each_spec.rb +46 -0
  50. data/spec/hamster/vector/each_with_index_spec.rb +42 -0
  51. data/spec/hamster/vector/empty_spec.rb +35 -0
  52. data/spec/hamster/vector/eql_spec.rb +65 -0
  53. data/spec/hamster/vector/filter_spec.rb +63 -0
  54. data/spec/hamster/vector/first_spec.rb +35 -0
  55. data/spec/hamster/vector/get_spec.rb +81 -0
  56. data/spec/hamster/vector/include_spec.rb +45 -0
  57. data/spec/hamster/vector/inspect_spec.rb +31 -0
  58. data/spec/hamster/vector/last_spec.rb +32 -0
  59. data/spec/hamster/vector/reduce_spec.rb +87 -0
  60. data/spec/hamster/vector/set_spec.rb +153 -0
  61. data/spec/hamster/vector/size_spec.rb +27 -0
  62. data/spec/hamster/vector/to_a_spec.rb +42 -0
  63. data/spec/hamster/vector/to_ary_spec.rb +44 -0
  64. data/spec/spec_helper.rb +2 -2
  65. data/tasks/bundler.rb +2 -0
  66. data/tasks/publish.rb +1 -1
  67. data/tasks/rspec.rb +1 -2
  68. metadata +56 -14
  69. data/lib/hamster/read_copy_update_hash.rb +0 -28
  70. data/lib/hamster/read_copy_update_list.rb +0 -26
  71. data/lib/hamster/read_copy_update_queue.rb +0 -27
  72. data/lib/hamster/read_copy_update_set.rb +0 -26
  73. 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