hamster 0.3.10 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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