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
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ require 'hamster/vector'
4
+
5
+ describe Hamster::Vector do
6
+
7
+ [:size, :length].each do |method|
8
+
9
+ describe "##{method}" do
10
+
11
+ [
12
+ [[], 0],
13
+ [["A"], 1],
14
+ [["A", "B", "C"], 3],
15
+ ].each do |values, result|
16
+
17
+ it "returns #{result} for #{values.inspect}" do
18
+ Hamster.vector(*values).send(method).should == result
19
+ end
20
+
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ require 'hamster/vector'
4
+
5
+ describe Hamster::Vector do
6
+
7
+ [:to_a, :entries].each do |method|
8
+
9
+ describe "##{method}" do
10
+
11
+ [
12
+ [],
13
+ ["A"],
14
+ ["A", "B", "C"],
15
+ ].each do |values|
16
+
17
+ describe "on #{values.inspect}" do
18
+
19
+ before do
20
+ @vector = Hamster.vector(*values)
21
+ @result = @vector.send(method)
22
+ end
23
+
24
+ it "returns #{values.inspect}" do
25
+ @result.should == values
26
+ end
27
+
28
+ it "returns a mutable array" do
29
+ @result.last.should_not == "The End"
30
+ @result << "The End"
31
+ @result.last.should == "The End"
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+
40
+ end
41
+
42
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ require 'hamster/vector'
4
+
5
+ describe Hamster::Vector do
6
+
7
+ describe "#to_ary" do
8
+
9
+ describe "enables implicit conversion to" do
10
+
11
+ before do
12
+ @vector = Hamster.vector("A", "B", "C", "D")
13
+ end
14
+
15
+ it "block parameters" do
16
+ def func(&block)
17
+ yield(@vector)
18
+ end
19
+ func do |a, b, *c|
20
+ a.should == "A"
21
+ b.should == "B"
22
+ c.should == ["C", "D"]
23
+ end
24
+ end
25
+
26
+ it "method arguments" do
27
+ def func(a, b, *c)
28
+ a.should == "A"
29
+ b.should == "B"
30
+ c.should == ["C", "D"]
31
+ end
32
+ func(*@vector)
33
+ end
34
+
35
+ it "works with splat" do
36
+ array = *@vector
37
+ array.should == ["A", "B", "C", "D"]
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -1,6 +1,6 @@
1
1
  # Common spec-related code goes here
2
2
 
3
- STACK_OVERFLOW_DEPTH = if RUBY_VERSION =~ /^ruby /
3
+ STACK_OVERFLOW_DEPTH = if RUBY_VERSION =~ /^(ruby |\d+\.\d+\.\d+$)/
4
4
  def calculate_stack_overflow_depth(n)
5
5
  calculate_stack_overflow_depth(n + 1)
6
6
  rescue SystemStackError
@@ -8,7 +8,7 @@ STACK_OVERFLOW_DEPTH = if RUBY_VERSION =~ /^ruby /
8
8
  end
9
9
  calculate_stack_overflow_depth(2)
10
10
  else
11
- 0
11
+ 16384
12
12
  end
13
13
 
14
14
  class DeterministicHash
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -1,3 +1,4 @@
1
+ desc "Build and publish the latest gem"
1
2
  task :publish do
2
3
  require File.expand_path('../../lib/hamster/version', __FILE__)
3
4
 
@@ -8,5 +9,4 @@ gem build hamster.gemspec &&
8
9
  gem push #{gem_name} &&
9
10
  rm #{gem_name}
10
11
  CMD
11
-
12
12
  end
@@ -1,5 +1,4 @@
1
1
  require 'rspec/core/rake_task'
2
2
 
3
3
  desc "Run specifications"
4
- RSpec::Core::RakeTask.new(:rspec) do |t|
5
- end
4
+ RSpec::Core::RakeTask.new(:rspec)
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 3
8
- - 10
9
- version: 0.3.10
7
+ - 4
8
+ - 0
9
+ version: 0.4.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Simon Harris
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-22 00:00:00 +11:00
17
+ date: 2010-12-13 00:00:00 +11:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -23,13 +23,12 @@ dependencies:
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
25
25
  requirements:
26
- - - ">="
26
+ - - ~>
27
27
  - !ruby/object:Gem::Version
28
28
  segments:
29
29
  - 2
30
30
  - 0
31
- - 0
32
- version: 2.0.0
31
+ version: "2.0"
33
32
  type: :development
34
33
  version_requirements: *id001
35
34
  - !ruby/object:Gem::Dependency
@@ -38,7 +37,7 @@ dependencies:
38
37
  requirement: &id002 !ruby/object:Gem::Requirement
39
38
  none: false
40
39
  requirements:
41
- - - ">="
40
+ - - ~>
42
41
  - !ruby/object:Gem::Version
43
42
  segments:
44
43
  - 1
@@ -59,30 +58,52 @@ extra_rdoc_files:
59
58
  - LICENSE
60
59
  files:
61
60
  - lib/hamster/core_ext/enumerable.rb
61
+ - lib/hamster/core_ext/enumerable.rbc
62
62
  - lib/hamster/core_ext/io.rb
63
+ - lib/hamster/core_ext/io.rbc
63
64
  - lib/hamster/core_ext.rb
65
+ - lib/hamster/core_ext.rbc
66
+ - lib/hamster/enumerable.rb
67
+ - lib/hamster/experimental/mutable_hash.rb
68
+ - lib/hamster/experimental/mutable_queue.rb
69
+ - lib/hamster/experimental/mutable_set.rb
70
+ - lib/hamster/experimental/mutable_stack.rb
71
+ - lib/hamster/experimental/read_copy_update.rb
64
72
  - lib/hamster/hash.rb
73
+ - lib/hamster/hash.rbc
65
74
  - lib/hamster/immutable.rb
75
+ - lib/hamster/immutable.rbc
66
76
  - lib/hamster/list.rb
77
+ - lib/hamster/list.rbc
67
78
  - lib/hamster/queue.rb
68
- - lib/hamster/read_copy_update.rb
69
- - lib/hamster/read_copy_update_hash.rb
70
- - lib/hamster/read_copy_update_list.rb
71
- - lib/hamster/read_copy_update_queue.rb
72
- - lib/hamster/read_copy_update_set.rb
73
- - lib/hamster/read_copy_update_stack.rb
79
+ - lib/hamster/queue.rbc
74
80
  - lib/hamster/set.rb
81
+ - lib/hamster/set.rbc
75
82
  - lib/hamster/sorter.rb
83
+ - lib/hamster/sorter.rbc
76
84
  - lib/hamster/stack.rb
85
+ - lib/hamster/stack.rbc
77
86
  - lib/hamster/trie.rb
87
+ - lib/hamster/trie.rbc
78
88
  - lib/hamster/tuple.rb
89
+ - lib/hamster/tuple.rbc
79
90
  - lib/hamster/undefined.rb
91
+ - lib/hamster/undefined.rbc
92
+ - lib/hamster/vector.rb
80
93
  - lib/hamster/version.rb
94
+ - lib/hamster/version.rbc
81
95
  - lib/hamster.rb
96
+ - lib/hamster.rbc
82
97
  - spec/hamster/core_ext/array_spec.rb
83
98
  - spec/hamster/core_ext/enumerable_spec.rb
84
99
  - spec/hamster/core_ext/io_spec.rb
85
100
  - spec/hamster/core_ext/io_spec.txt
101
+ - spec/hamster/experimental/mutable_set/add?_spec.rb
102
+ - spec/hamster/experimental/mutable_set/add_spec.rb
103
+ - spec/hamster/experimental/mutable_set/delete?_spec.rb
104
+ - spec/hamster/experimental/mutable_set/delete_spec.rb
105
+ - spec/hamster/experimental/mutable_stack/pop_spec.rb
106
+ - spec/hamster/experimental/mutable_stack/push_spec.rb
86
107
  - spec/hamster/hash/all_spec.rb
87
108
  - spec/hamster/hash/any_spec.rb
88
109
  - spec/hamster/hash/clear_spec.rb
@@ -134,6 +155,7 @@ files:
134
155
  - spec/hamster/list/drop_while_spec.rb
135
156
  - spec/hamster/list/each_slice_spec.rb
136
157
  - spec/hamster/list/each_spec.rb
158
+ - spec/hamster/list/each_with_index_spec.rb
137
159
  - spec/hamster/list/elem_index_spec.rb
138
160
  - spec/hamster/list/elem_indices_spec.rb
139
161
  - spec/hamster/list/empty_spec.rb
@@ -262,7 +284,27 @@ files:
262
284
  - spec/hamster/tuple/to_a_spec.rb
263
285
  - spec/hamster/tuple/to_ary_spec.rb
264
286
  - spec/hamster/undefined/erase_spec.rb
287
+ - spec/hamster/vector/add_spec.rb
288
+ - spec/hamster/vector/any_spec.rb
289
+ - spec/hamster/vector/clear_spec.rb
290
+ - spec/hamster/vector/copying_spec.rb
291
+ - spec/hamster/vector/each_spec.rb
292
+ - spec/hamster/vector/each_with_index_spec.rb
293
+ - spec/hamster/vector/empty_spec.rb
294
+ - spec/hamster/vector/eql_spec.rb
295
+ - spec/hamster/vector/filter_spec.rb
296
+ - spec/hamster/vector/first_spec.rb
297
+ - spec/hamster/vector/get_spec.rb
298
+ - spec/hamster/vector/include_spec.rb
299
+ - spec/hamster/vector/inspect_spec.rb
300
+ - spec/hamster/vector/last_spec.rb
301
+ - spec/hamster/vector/reduce_spec.rb
302
+ - spec/hamster/vector/set_spec.rb
303
+ - spec/hamster/vector/size_spec.rb
304
+ - spec/hamster/vector/to_a_spec.rb
305
+ - spec/hamster/vector/to_ary_spec.rb
265
306
  - spec/spec_helper.rb
307
+ - tasks/bundler.rb
266
308
  - tasks/publish.rb
267
309
  - tasks/rspec.rb
268
310
  - Rakefile
@@ -1,28 +0,0 @@
1
- require 'hamster/read_copy_update'
2
- require 'hamster/hash'
3
-
4
- module Hamster
5
-
6
- class ReadCopyUpdateHash
7
-
8
- include ReadCopyUpdate
9
-
10
- def initialize
11
- super(EmptyHash)
12
- end
13
-
14
- def put(key, value = Undefined)
15
- transform {
16
- get(key).tap { @content = @content.put(key, value) }
17
- }
18
- end
19
-
20
- def delete(key)
21
- transform {
22
- get(key).tap { @content = @content.delete(key) }
23
- }
24
- end
25
-
26
- end
27
-
28
- end
@@ -1,26 +0,0 @@
1
- require 'hamster/read_copy_update'
2
- require 'hamster/list'
3
-
4
- module Hamster
5
-
6
- class ReadCopyUpdateStack
7
-
8
- include ReadCopyUpdate
9
-
10
- def initialize
11
- super(EmptyList)
12
- end
13
-
14
- def cons(item)
15
- transform { @content = @content.cons(value) }
16
- self
17
- end
18
-
19
- def tail
20
- transform { @content = @content.tail }
21
- self
22
- end
23
-
24
- end
25
-
26
- end
@@ -1,27 +0,0 @@
1
- require 'hamster/read_copy_update'
2
- require 'hamster/queue'
3
-
4
- module Hamster
5
-
6
- class ReadCopyUpdateQueue
7
-
8
- include ReadCopyUpdate
9
-
10
- def initialize
11
- super(EmptyQueue)
12
- end
13
-
14
- def enqueue(item)
15
- transform { @content = @content.enqueue(item) }
16
- self
17
- end
18
-
19
- def dequeue
20
- transform {
21
- peek.tap { @content = @content.dequeue }
22
- }
23
- end
24
-
25
- end
26
-
27
- end
@@ -1,26 +0,0 @@
1
- require 'hamster/read_copy_update'
2
- require 'hamster/set'
3
-
4
- module Hamster
5
-
6
- class ReadCopyUpdateSet
7
-
8
- include ReadCopyUpdate
9
-
10
- def initialize
11
- super(EmptySet)
12
- end
13
-
14
- def add(item)
15
- transform { @content = @content.add(item) }
16
- self
17
- end
18
-
19
- def delete(item)
20
- transform { @content = @content.delete(item) }
21
- self
22
- end
23
-
24
- end
25
-
26
- end
@@ -1,27 +0,0 @@
1
- require 'hamster/read_copy_update'
2
- require 'hamster/stack'
3
-
4
- module Hamster
5
-
6
- class ReadCopyUpdateStack
7
-
8
- include ReadCopyUpdate
9
-
10
- def initialize
11
- super(EmptyStack)
12
- end
13
-
14
- def push(item)
15
- transform { @content = @content.push(item) }
16
- self
17
- end
18
-
19
- def pop
20
- transform {
21
- peek.tap { @content = @content.pop }
22
- }
23
- end
24
-
25
- end
26
-
27
- end