algorithms 0.3.0-jruby
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.txt +172 -0
- data/Manifest +43 -0
- data/README.markdown +93 -0
- data/Rakefile +31 -0
- data/algorithms.gemspec +33 -0
- data/benchmarks/deque.rb +17 -0
- data/benchmarks/sorts.rb +34 -0
- data/benchmarks/treemaps.rb +51 -0
- data/ext/containers/deque/deque.c +247 -0
- data/ext/containers/deque/extconf.rb +4 -0
- data/ext/containers/rbtree_map/extconf.rb +4 -0
- data/ext/containers/rbtree_map/rbtree.c +498 -0
- data/ext/containers/splaytree_map/extconf.rb +4 -0
- data/ext/containers/splaytree_map/splaytree.c +419 -0
- data/lib/algorithms.rb +68 -0
- data/lib/algorithms/search.rb +84 -0
- data/lib/algorithms/sort.rb +238 -0
- data/lib/containers/deque.rb +171 -0
- data/lib/containers/heap.rb +486 -0
- data/lib/containers/kd_tree.rb +110 -0
- data/lib/containers/priority_queue.rb +113 -0
- data/lib/containers/queue.rb +68 -0
- data/lib/containers/rb_tree_map.rb +398 -0
- data/lib/containers/splay_tree_map.rb +269 -0
- data/lib/containers/stack.rb +67 -0
- data/lib/containers/suffix_array.rb +68 -0
- data/lib/containers/trie.rb +182 -0
- data/spec/deque_gc_mark_spec.rb +18 -0
- data/spec/deque_spec.rb +108 -0
- data/spec/heap_spec.rb +126 -0
- data/spec/kd_expected_out.txt +10000 -0
- data/spec/kd_test_in.txt +10000 -0
- data/spec/kd_tree_spec.rb +34 -0
- data/spec/map_gc_mark_spec.rb +27 -0
- data/spec/priority_queue_spec.rb +75 -0
- data/spec/queue_spec.rb +61 -0
- data/spec/rb_tree_map_spec.rb +123 -0
- data/spec/search_spec.rb +28 -0
- data/spec/sort_spec.rb +28 -0
- data/spec/splay_tree_map_spec.rb +106 -0
- data/spec/stack_spec.rb +60 -0
- data/spec/suffix_array_spec.rb +40 -0
- data/spec/trie_spec.rb +59 -0
- metadata +122 -0
data/spec/stack_spec.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
$: << File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib')
|
2
|
+
require 'algorithms'
|
3
|
+
|
4
|
+
describe "empty stack" do
|
5
|
+
before(:each) do
|
6
|
+
@stack = Containers::Stack.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should return nil when sent #pop" do
|
10
|
+
@stack.pop.should be_nil
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should return a size of 1 when sent #push" do
|
14
|
+
@stack.push(1)
|
15
|
+
@stack.size.should eql(1)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should return nil when sent #next" do
|
19
|
+
@stack.next.should be_nil
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return empty?" do
|
23
|
+
@stack.empty?.should be_true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "non-empty stack" do
|
28
|
+
before(:each) do
|
29
|
+
@stack = Containers::Stack.new
|
30
|
+
@stack.push(10)
|
31
|
+
@stack.push("10")
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should return last pushed object" do
|
35
|
+
@stack.pop.should eql("10")
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should return the size" do
|
39
|
+
@stack.size.should eql(2)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should not return empty?" do
|
43
|
+
@stack.empty?.should be_false
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
it "should iterate in LIFO order" do
|
48
|
+
arr = []
|
49
|
+
@stack.each { |obj| arr << obj }
|
50
|
+
arr.should eql(["10", 10])
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should return nil after all pops" do
|
54
|
+
@stack.pop
|
55
|
+
@stack.pop
|
56
|
+
@stack.pop.should be_nil
|
57
|
+
@stack.next.should be_nil
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
$: << File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib')
|
2
|
+
require 'algorithms'
|
3
|
+
|
4
|
+
describe "empty suffix array" do
|
5
|
+
it "should not initialize with empty string" do
|
6
|
+
lambda { Containers::SuffixArray.new("") }.should raise_error
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "non-empty suffix array" do
|
11
|
+
before(:each) do
|
12
|
+
@s_array = Containers::SuffixArray.new("abracadabra")
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should has_substring? each possible substring" do
|
16
|
+
@s_array.has_substring?("a").should be_true
|
17
|
+
@s_array.has_substring?("abra").should be_true
|
18
|
+
@s_array.has_substring?("abracadabra").should be_true
|
19
|
+
@s_array.has_substring?("acadabra").should be_true
|
20
|
+
@s_array.has_substring?("adabra").should be_true
|
21
|
+
@s_array.has_substring?("bra").should be_true
|
22
|
+
@s_array.has_substring?("bracadabra").should be_true
|
23
|
+
@s_array.has_substring?("cadabra").should be_true
|
24
|
+
@s_array.has_substring?("dabra").should be_true
|
25
|
+
@s_array.has_substring?("ra").should be_true
|
26
|
+
@s_array.has_substring?("racadabra").should be_true
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should not has_substring? substrings it does not have" do
|
30
|
+
@s_array.has_substring?("nope").should be_false
|
31
|
+
@s_array.has_substring?(nil).should be_false
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should work with numbers (calls to_s)" do
|
35
|
+
number = Containers::SuffixArray.new(123456789)
|
36
|
+
number[1].should be_true
|
37
|
+
number.has_substring?(12).should be_true
|
38
|
+
number.has_substring?(13).should be_false
|
39
|
+
end
|
40
|
+
end
|
data/spec/trie_spec.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
$: << File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib')
|
2
|
+
require 'algorithms'
|
3
|
+
|
4
|
+
describe "empty trie" do
|
5
|
+
before(:each) do
|
6
|
+
@trie = Containers::Trie.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should not get or has_key?" do
|
10
|
+
@trie.get("anything").should be_nil
|
11
|
+
@trie.has_key?("anything").should be_false
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should not have longest_prefix or match wildcards" do
|
15
|
+
@trie.wildcard("an*thing").should eql([])
|
16
|
+
@trie.longest_prefix("an*thing").should eql("")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "non-empty trie" do
|
21
|
+
before(:each) do
|
22
|
+
@trie = Containers::Trie.new
|
23
|
+
@trie.push("Hello", "World")
|
24
|
+
@trie.push("Hilly", "World")
|
25
|
+
@trie.push("Hello, brother", "World")
|
26
|
+
@trie.push("Hello, bob", "World")
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should has_key? keys it has" do
|
30
|
+
@trie.has_key?("Hello").should be_true
|
31
|
+
@trie.has_key?("Hello, brother").should be_true
|
32
|
+
@trie.has_key?("Hello, bob").should be_true
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should not has_key? keys it doesn't have" do
|
36
|
+
@trie.has_key?("Nope").should be_false
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should get values" do
|
40
|
+
@trie.get("Hello").should eql("World")
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should overwrite values" do
|
44
|
+
@trie.push("Hello", "John")
|
45
|
+
@trie.get("Hello").should eql("John")
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should return longest prefix" do
|
49
|
+
@trie.longest_prefix("Hello, brandon").should eql("Hello")
|
50
|
+
@trie.longest_prefix("Hel").should eql("")
|
51
|
+
@trie.longest_prefix("Hello").should eql("Hello")
|
52
|
+
@trie.longest_prefix("Hello, bob").should eql("Hello, bob")
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should match wildcards" do
|
56
|
+
@trie.wildcard("H*ll.").should eql(["Hello", "Hilly"])
|
57
|
+
@trie.wildcard("Hel").should eql([])
|
58
|
+
end
|
59
|
+
end
|
metadata
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: algorithms
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
5
|
+
platform: jruby
|
6
|
+
authors:
|
7
|
+
- Kanwei Li
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-11-16 00:00:00 -05:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: A library of algorithms and containers.
|
17
|
+
email: kanwei@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions:
|
21
|
+
- ext/containers/deque/extconf.rb
|
22
|
+
- ext/containers/rbtree_map/extconf.rb
|
23
|
+
- ext/containers/splaytree_map/extconf.rb
|
24
|
+
extra_rdoc_files:
|
25
|
+
- README.markdown
|
26
|
+
- ext/containers/deque/deque.c
|
27
|
+
- ext/containers/deque/extconf.rb
|
28
|
+
- ext/containers/rbtree_map/extconf.rb
|
29
|
+
- ext/containers/rbtree_map/rbtree.c
|
30
|
+
- ext/containers/splaytree_map/extconf.rb
|
31
|
+
- ext/containers/splaytree_map/splaytree.c
|
32
|
+
- lib/algorithms.rb
|
33
|
+
- lib/algorithms/search.rb
|
34
|
+
- lib/algorithms/sort.rb
|
35
|
+
- lib/containers/deque.rb
|
36
|
+
- lib/containers/heap.rb
|
37
|
+
- lib/containers/kd_tree.rb
|
38
|
+
- lib/containers/priority_queue.rb
|
39
|
+
- lib/containers/queue.rb
|
40
|
+
- lib/containers/rb_tree_map.rb
|
41
|
+
- lib/containers/splay_tree_map.rb
|
42
|
+
- lib/containers/stack.rb
|
43
|
+
- lib/containers/suffix_array.rb
|
44
|
+
- lib/containers/trie.rb
|
45
|
+
files:
|
46
|
+
- History.txt
|
47
|
+
- Manifest
|
48
|
+
- README.markdown
|
49
|
+
- Rakefile
|
50
|
+
- algorithms.gemspec
|
51
|
+
- benchmarks/deque.rb
|
52
|
+
- benchmarks/sorts.rb
|
53
|
+
- benchmarks/treemaps.rb
|
54
|
+
- ext/containers/deque/deque.c
|
55
|
+
- ext/containers/deque/extconf.rb
|
56
|
+
- ext/containers/rbtree_map/extconf.rb
|
57
|
+
- ext/containers/rbtree_map/rbtree.c
|
58
|
+
- ext/containers/splaytree_map/extconf.rb
|
59
|
+
- ext/containers/splaytree_map/splaytree.c
|
60
|
+
- lib/algorithms.rb
|
61
|
+
- lib/algorithms/search.rb
|
62
|
+
- lib/algorithms/sort.rb
|
63
|
+
- lib/containers/deque.rb
|
64
|
+
- lib/containers/heap.rb
|
65
|
+
- lib/containers/kd_tree.rb
|
66
|
+
- lib/containers/priority_queue.rb
|
67
|
+
- lib/containers/queue.rb
|
68
|
+
- lib/containers/rb_tree_map.rb
|
69
|
+
- lib/containers/splay_tree_map.rb
|
70
|
+
- lib/containers/stack.rb
|
71
|
+
- lib/containers/suffix_array.rb
|
72
|
+
- lib/containers/trie.rb
|
73
|
+
- spec/deque_gc_mark_spec.rb
|
74
|
+
- spec/deque_spec.rb
|
75
|
+
- spec/heap_spec.rb
|
76
|
+
- spec/kd_expected_out.txt
|
77
|
+
- spec/kd_test_in.txt
|
78
|
+
- spec/kd_tree_spec.rb
|
79
|
+
- spec/map_gc_mark_spec.rb
|
80
|
+
- spec/priority_queue_spec.rb
|
81
|
+
- spec/queue_spec.rb
|
82
|
+
- spec/rb_tree_map_spec.rb
|
83
|
+
- spec/search_spec.rb
|
84
|
+
- spec/sort_spec.rb
|
85
|
+
- spec/splay_tree_map_spec.rb
|
86
|
+
- spec/stack_spec.rb
|
87
|
+
- spec/suffix_array_spec.rb
|
88
|
+
- spec/trie_spec.rb
|
89
|
+
has_rdoc: true
|
90
|
+
homepage: http://rubyforge.org/projects/algorithms/
|
91
|
+
post_install_message:
|
92
|
+
rdoc_options:
|
93
|
+
- --line-numbers
|
94
|
+
- --inline-source
|
95
|
+
- --title
|
96
|
+
- Algorithms
|
97
|
+
- --main
|
98
|
+
- README.markdown
|
99
|
+
require_paths:
|
100
|
+
- lib
|
101
|
+
- ext
|
102
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: "0"
|
107
|
+
version:
|
108
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: "1.2"
|
113
|
+
version:
|
114
|
+
requirements: []
|
115
|
+
|
116
|
+
rubyforge_project: algorithms
|
117
|
+
rubygems_version: 1.3.1
|
118
|
+
signing_key:
|
119
|
+
specification_version: 2
|
120
|
+
summary: A library of algorithms and containers.
|
121
|
+
test_files: []
|
122
|
+
|