grosser-algorithms 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 (49) hide show
  1. data/History.txt +176 -0
  2. data/Manifest +47 -0
  3. data/README.markdown +102 -0
  4. data/Rakefile +26 -0
  5. data/algorithms.gemspec +32 -0
  6. data/benchmarks/deque.rb +18 -0
  7. data/benchmarks/sorts.rb +34 -0
  8. data/benchmarks/treemaps.rb +52 -0
  9. data/ext/algorithms/string/extconf.rb +4 -0
  10. data/ext/algorithms/string/string.c +70 -0
  11. data/ext/containers/deque/deque.c +249 -0
  12. data/ext/containers/deque/extconf.rb +4 -0
  13. data/ext/containers/rbtree_map/extconf.rb +4 -0
  14. data/ext/containers/rbtree_map/rbtree.c +500 -0
  15. data/ext/containers/splaytree_map/extconf.rb +4 -0
  16. data/ext/containers/splaytree_map/splaytree.c +421 -0
  17. data/grosser-algorithms.gemspec +31 -0
  18. data/lib/algorithms.rb +71 -0
  19. data/lib/algorithms/search.rb +86 -0
  20. data/lib/algorithms/sort.rb +243 -0
  21. data/lib/algorithms/string.rb +8 -0
  22. data/lib/containers/deque.rb +176 -0
  23. data/lib/containers/heap.rb +507 -0
  24. data/lib/containers/kd_tree.rb +113 -0
  25. data/lib/containers/priority_queue.rb +117 -0
  26. data/lib/containers/queue.rb +72 -0
  27. data/lib/containers/rb_tree_map.rb +402 -0
  28. data/lib/containers/splay_tree_map.rb +273 -0
  29. data/lib/containers/stack.rb +71 -0
  30. data/lib/containers/suffix_array.rb +72 -0
  31. data/lib/containers/trie.rb +188 -0
  32. data/spec/deque_gc_mark_spec.rb +18 -0
  33. data/spec/deque_spec.rb +108 -0
  34. data/spec/heap_spec.rb +126 -0
  35. data/spec/kd_expected_out.txt +10000 -0
  36. data/spec/kd_test_in.txt +10000 -0
  37. data/spec/kd_tree_spec.rb +34 -0
  38. data/spec/map_gc_mark_spec.rb +29 -0
  39. data/spec/priority_queue_spec.rb +75 -0
  40. data/spec/queue_spec.rb +61 -0
  41. data/spec/rb_tree_map_spec.rb +122 -0
  42. data/spec/search_spec.rb +28 -0
  43. data/spec/sort_spec.rb +27 -0
  44. data/spec/splay_tree_map_spec.rb +106 -0
  45. data/spec/stack_spec.rb +60 -0
  46. data/spec/string_spec.rb +13 -0
  47. data/spec/suffix_array_spec.rb +40 -0
  48. data/spec/trie_spec.rb +59 -0
  49. metadata +141 -0
@@ -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 = Algorithms::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 = Algorithms::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,13 @@
1
+ $: << File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib')
2
+ require 'algorithms'
3
+
4
+ describe "string algorithms" do
5
+ it "should do levenshtein distance" do
6
+ Algorithms::Algorithms::String.levenshtein_dist("Hello", "Hel").should eql(2)
7
+ Algorithms::Algorithms::String.levenshtein_dist("Hello", "").should eql(5)
8
+ Algorithms::Algorithms::String.levenshtein_dist("", "Hello").should eql(5)
9
+ Algorithms::Algorithms::String.levenshtein_dist("Hello", "Hello").should eql(0)
10
+ Algorithms::Algorithms::String.levenshtein_dist("Hello", "ello").should eql(1)
11
+ Algorithms::Algorithms::String.levenshtein_dist("Hello", "Mello").should eql(1)
12
+ end
13
+ 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 { Algorithms::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 = Algorithms::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 = Algorithms::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
@@ -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 = Algorithms::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 = Algorithms::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,141 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: grosser-algorithms
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 4
8
+ - 0
9
+ version: 0.4.0
10
+ platform: ruby
11
+ authors:
12
+ - Kanwei Li
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-08-10 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: A library of algorithms and containers.
22
+ email: kanwei@gmail.com
23
+ executables: []
24
+
25
+ extensions:
26
+ - ext/algorithms/string/extconf.rb
27
+ - ext/containers/deque/extconf.rb
28
+ - ext/containers/rbtree_map/extconf.rb
29
+ - ext/containers/splaytree_map/extconf.rb
30
+ extra_rdoc_files:
31
+ - README.markdown
32
+ - ext/algorithms/string/extconf.rb
33
+ - ext/algorithms/string/string.c
34
+ - ext/containers/deque/deque.c
35
+ - ext/containers/deque/extconf.rb
36
+ - ext/containers/rbtree_map/extconf.rb
37
+ - ext/containers/rbtree_map/rbtree.c
38
+ - ext/containers/splaytree_map/extconf.rb
39
+ - ext/containers/splaytree_map/splaytree.c
40
+ - lib/algorithms.rb
41
+ - lib/algorithms/search.rb
42
+ - lib/algorithms/sort.rb
43
+ - lib/algorithms/string.rb
44
+ - lib/containers/deque.rb
45
+ - lib/containers/heap.rb
46
+ - lib/containers/kd_tree.rb
47
+ - lib/containers/priority_queue.rb
48
+ - lib/containers/queue.rb
49
+ - lib/containers/rb_tree_map.rb
50
+ - lib/containers/splay_tree_map.rb
51
+ - lib/containers/stack.rb
52
+ - lib/containers/suffix_array.rb
53
+ - lib/containers/trie.rb
54
+ files:
55
+ - History.txt
56
+ - Manifest
57
+ - README.markdown
58
+ - Rakefile
59
+ - algorithms.gemspec
60
+ - benchmarks/deque.rb
61
+ - benchmarks/sorts.rb
62
+ - benchmarks/treemaps.rb
63
+ - ext/algorithms/string/extconf.rb
64
+ - ext/algorithms/string/string.c
65
+ - ext/containers/deque/deque.c
66
+ - ext/containers/deque/extconf.rb
67
+ - ext/containers/rbtree_map/extconf.rb
68
+ - ext/containers/rbtree_map/rbtree.c
69
+ - ext/containers/splaytree_map/extconf.rb
70
+ - ext/containers/splaytree_map/splaytree.c
71
+ - lib/algorithms.rb
72
+ - lib/algorithms/search.rb
73
+ - lib/algorithms/sort.rb
74
+ - lib/algorithms/string.rb
75
+ - lib/containers/deque.rb
76
+ - lib/containers/heap.rb
77
+ - lib/containers/kd_tree.rb
78
+ - lib/containers/priority_queue.rb
79
+ - lib/containers/queue.rb
80
+ - lib/containers/rb_tree_map.rb
81
+ - lib/containers/splay_tree_map.rb
82
+ - lib/containers/stack.rb
83
+ - lib/containers/suffix_array.rb
84
+ - lib/containers/trie.rb
85
+ - spec/deque_gc_mark_spec.rb
86
+ - spec/deque_spec.rb
87
+ - spec/heap_spec.rb
88
+ - spec/kd_expected_out.txt
89
+ - spec/kd_test_in.txt
90
+ - spec/kd_tree_spec.rb
91
+ - spec/map_gc_mark_spec.rb
92
+ - spec/priority_queue_spec.rb
93
+ - spec/queue_spec.rb
94
+ - spec/rb_tree_map_spec.rb
95
+ - spec/search_spec.rb
96
+ - spec/sort_spec.rb
97
+ - spec/splay_tree_map_spec.rb
98
+ - spec/stack_spec.rb
99
+ - spec/string_spec.rb
100
+ - spec/suffix_array_spec.rb
101
+ - spec/trie_spec.rb
102
+ - grosser-algorithms.gemspec
103
+ has_rdoc: true
104
+ homepage: http://rubyforge.org/projects/algorithms/
105
+ licenses: []
106
+
107
+ post_install_message:
108
+ rdoc_options:
109
+ - --line-numbers
110
+ - --inline-source
111
+ - --title
112
+ - Grosser-algorithms
113
+ - --main
114
+ - README.markdown
115
+ require_paths:
116
+ - lib
117
+ - ext
118
+ required_ruby_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ segments:
123
+ - 0
124
+ version: "0"
125
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ segments:
130
+ - 1
131
+ - 2
132
+ version: "1.2"
133
+ requirements: []
134
+
135
+ rubyforge_project: grosser-algorithms
136
+ rubygems_version: 1.3.6
137
+ signing_key:
138
+ specification_version: 3
139
+ summary: A library of algorithms and containers.
140
+ test_files: []
141
+