ds 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +13 -0
- data/doc/Array.html +264 -0
- data/doc/DS.html +292 -0
- data/doc/DS/Array2D.html +345 -0
- data/doc/DS/BinaryHeap.html +493 -0
- data/doc/DS/BinarySearchTree.html +313 -0
- data/doc/DS/BinaryTree.html +433 -0
- data/doc/DS/CompleteBinaryTree.html +550 -0
- data/doc/DS/CyclicList.html +234 -0
- data/doc/DS/Digraph.html +299 -0
- data/doc/DS/Edge.html +283 -0
- data/doc/DS/ExpandableArray.html +316 -0
- data/doc/DS/Graph.html +739 -0
- data/doc/DS/GraphAsList.html +361 -0
- data/doc/DS/GraphAsMatrix.html +633 -0
- data/doc/DS/GraphAsTriMatrix.html +274 -0
- data/doc/DS/List.html +1263 -0
- data/doc/DS/ListElement.html +344 -0
- data/doc/DS/Queue.html +517 -0
- data/doc/DS/Ring.html +323 -0
- data/doc/DS/Stack.html +407 -0
- data/doc/DS/Tree.html +770 -0
- data/doc/DS/TreeWalker.html +561 -0
- data/doc/DS/TriMatrix.html +338 -0
- data/doc/created.rid +25 -0
- data/doc/ds/graphs/digraph_rb.html +52 -0
- data/doc/ds/graphs/edge_rb.html +52 -0
- data/doc/ds/graphs/graph_as_list_rb.html +52 -0
- data/doc/ds/graphs/graph_as_matrix_rb.html +52 -0
- data/doc/ds/graphs/graph_as_tri_matrix_rb.html +52 -0
- data/doc/ds/graphs/graph_rb.html +52 -0
- data/doc/ds/lists/cyclic_list_rb.html +52 -0
- data/doc/ds/lists/list_element_rb.html +52 -0
- data/doc/ds/lists/list_rb.html +52 -0
- data/doc/ds/lists/ring_rb.html +52 -0
- data/doc/ds/matrixes/array_2d_rb.html +52 -0
- data/doc/ds/matrixes/expandable_array_rb.html +52 -0
- data/doc/ds/matrixes/tri_matrix_rb.html +52 -0
- data/doc/ds/queues/queue_rb.html +52 -0
- data/doc/ds/stacks/stack_rb.html +52 -0
- data/doc/ds/trees/binary_heap_rb.html +52 -0
- data/doc/ds/trees/binary_search_tree_rb.html +52 -0
- data/doc/ds/trees/binary_tree_rb.html +52 -0
- data/doc/ds/trees/complete_binary_tree_rb.html +52 -0
- data/doc/ds/trees/tree_rb.html +52 -0
- data/doc/ds/trees/tree_walker_rb.html +52 -0
- data/doc/ds/version_rb.html +52 -0
- data/doc/ds_rb.html +98 -0
- data/doc/ext/ext_rb.html +52 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +375 -0
- data/doc/js/darkfish.js +116 -0
- data/doc/js/jquery.js +32 -0
- data/doc/js/quicksearch.js +114 -0
- data/doc/js/thickbox-compressed.js +10 -0
- data/doc/rdoc.css +763 -0
- data/ds.gemspec +20 -0
- data/lib/ds.rb +38 -0
- data/lib/ds/graphs/digraph.rb +20 -0
- data/lib/ds/graphs/edge.rb +15 -0
- data/lib/ds/graphs/graph.rb +107 -0
- data/lib/ds/graphs/graph_as_list.rb +48 -0
- data/lib/ds/graphs/graph_as_matrix.rb +114 -0
- data/lib/ds/graphs/graph_as_tri_matrix.rb +25 -0
- data/lib/ds/lists/cyclic_list.rb +21 -0
- data/lib/ds/lists/list.rb +303 -0
- data/lib/ds/lists/list_element.rb +26 -0
- data/lib/ds/lists/ring.rb +42 -0
- data/lib/ds/matrixes/array_2d.rb +35 -0
- data/lib/ds/matrixes/expandable_array.rb +37 -0
- data/lib/ds/matrixes/tri_matrix.rb +30 -0
- data/lib/ds/queues/queue.rb +53 -0
- data/lib/ds/stacks/stack.rb +39 -0
- data/lib/ds/trees/binary_heap.rb +71 -0
- data/lib/ds/trees/binary_search_tree.rb +32 -0
- data/lib/ds/trees/binary_tree.rb +65 -0
- data/lib/ds/trees/complete_binary_tree.rb +52 -0
- data/lib/ds/trees/tree.rb +117 -0
- data/lib/ds/trees/tree_walker.rb +179 -0
- data/lib/ds/version.rb +3 -0
- data/lib/ext/ext.rb +15 -0
- data/test/help.rb +8 -0
- data/test/test_array2d.rb +51 -0
- data/test/test_binary_heap.rb +35 -0
- data/test/test_binary_search_tree.rb +32 -0
- data/test/test_binary_tree.rb +51 -0
- data/test/test_complete_binary_tree.rb +30 -0
- data/test/test_digraph.rb +134 -0
- data/test/test_expandable_array.rb +26 -0
- data/test/test_graph.rb +71 -0
- data/test/test_list.rb +138 -0
- data/test/test_list_element.rb +56 -0
- data/test/test_queue.rb +110 -0
- data/test/test_ring.rb +28 -0
- data/test/test_stack.rb +87 -0
- data/test/test_tree.rb +48 -0
- data/test/test_tree_walker.rb +69 -0
- data/test/test_tri_matrix.rb +22 -0
- metadata +184 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'help'
|
2
|
+
|
3
|
+
describe BinaryTree do
|
4
|
+
|
5
|
+
before do
|
6
|
+
|
7
|
+
@bin_tree = BinaryTree.new
|
8
|
+
[2,5,8,9,11,12,14].each{|x| @bin_tree.insert(x)}
|
9
|
+
|
10
|
+
@izo_tree = BinaryTree.new
|
11
|
+
[2,7,8,3,11,12,14].each{|x| @izo_tree.insert(x)}
|
12
|
+
|
13
|
+
@bin_walker = TreeWalker.new(@bin_tree)
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
it "#to_a should return tree converted to array." do
|
18
|
+
@bin_tree.to_a.must_equal [2,5,8,9,11,12,14]
|
19
|
+
end
|
20
|
+
|
21
|
+
it "#height should return tree height." do
|
22
|
+
@bin_tree.height.must_equal 3
|
23
|
+
end
|
24
|
+
|
25
|
+
it "#width should return tree width." do
|
26
|
+
@bin_tree.width.must_equal 4
|
27
|
+
end
|
28
|
+
|
29
|
+
it "#leaf_count should return number of tree leaves." do
|
30
|
+
@bin_tree.leaf_count.must_equal 4
|
31
|
+
end
|
32
|
+
|
33
|
+
it "#get_leaves should return list of tree leaves." do
|
34
|
+
@bin_tree.get_leaves.to_a.collect{ |e| e.data }.must_equal [9,11,12,14]
|
35
|
+
end
|
36
|
+
|
37
|
+
it "#lowest_height should return node which lies closest to the root." do
|
38
|
+
assert @bin_tree.lowest_height.must_equal 9
|
39
|
+
end
|
40
|
+
|
41
|
+
it "#mirror should mirror tree." do
|
42
|
+
@bin_tree.mirror!
|
43
|
+
@bin_tree.to_a.must_equal [2,8,5,14,12,11,9]
|
44
|
+
end
|
45
|
+
|
46
|
+
it "#isometric should check if tree is isometric to antother." do
|
47
|
+
assert @bin_tree.izometric?(@izo_tree)
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'help'
|
2
|
+
|
3
|
+
describe CompleteBinaryTree do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@tree = CompleteBinaryTree.new(1,2,3,4,5,6,7)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "#root should return root of the tree." do
|
10
|
+
@tree.root.must_equal 1
|
11
|
+
end
|
12
|
+
|
13
|
+
it "#left should return left child" do
|
14
|
+
@tree.left(1).must_equal 2
|
15
|
+
@tree.left(2).must_equal 4
|
16
|
+
end
|
17
|
+
|
18
|
+
it "#right should return right child" do
|
19
|
+
@tree.right(1).must_equal 3
|
20
|
+
@tree.right(2).must_equal 5
|
21
|
+
end
|
22
|
+
|
23
|
+
it "#parent should return parent." do
|
24
|
+
@tree.parent(4).must_equal 2
|
25
|
+
@tree.parent(5).must_equal 2
|
26
|
+
@tree.parent(2).must_equal 1
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'help'
|
2
|
+
|
3
|
+
describe Digraph do
|
4
|
+
|
5
|
+
describe "without weighted edges" do
|
6
|
+
|
7
|
+
before do
|
8
|
+
|
9
|
+
edges = []
|
10
|
+
edges << Edge.new('Lukas','Marc')
|
11
|
+
edges << Edge.new('Lukas','Tom')
|
12
|
+
edges << Edge.new('Marc','Jack')
|
13
|
+
edges << Edge.new('Jack','Marc')
|
14
|
+
edges << Edge.new('Tom','Marc')
|
15
|
+
|
16
|
+
@digraph = Digraph.create(edges)
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
it "#degree should return vertex degree." do
|
21
|
+
@digraph.degree("Marc").must_equal 4
|
22
|
+
@digraph.degree("Tom").must_equal 2
|
23
|
+
@digraph.degree("Lukas").must_equal 2
|
24
|
+
end
|
25
|
+
|
26
|
+
it "#in_degree should return number of incoming edges to the vertex." do
|
27
|
+
@digraph.in_degree("Marc").must_equal 3
|
28
|
+
@digraph.in_degree("Tom").must_equal 1
|
29
|
+
@digraph.in_degree("Lukas").must_equal 0
|
30
|
+
end
|
31
|
+
|
32
|
+
it "#out_degree should return number of outgoing edges from vertex." do
|
33
|
+
@digraph.out_degree("Marc").must_equal 1
|
34
|
+
@digraph.out_degree("Tom").must_equal 1
|
35
|
+
@digraph.out_degree("Lukas").must_equal 2
|
36
|
+
end
|
37
|
+
|
38
|
+
it "#get_edge should return graph edge." do
|
39
|
+
lukas_tom = @digraph.get_edge("Lukas","Tom")
|
40
|
+
lukas_tom.from.must_equal "Lukas"
|
41
|
+
lukas_tom.to.must_equal "Tom"
|
42
|
+
lukas_tom.weight.must_equal 1
|
43
|
+
lukas_tom.must_be_instance_of Edge
|
44
|
+
end
|
45
|
+
|
46
|
+
it "#edge? should check if two vertex are connected." do
|
47
|
+
refute @digraph.edge?("Marc","Tom")
|
48
|
+
refute @digraph.edge?("Jack","Tom")
|
49
|
+
refute @digraph.edge?("Tom","Lukas")
|
50
|
+
|
51
|
+
assert @digraph.edge?("Tom","Marc")
|
52
|
+
assert @digraph.edge?("Lukas","Marc")
|
53
|
+
end
|
54
|
+
|
55
|
+
it "#neighbors should return array containing all neighbors for given vertex." do
|
56
|
+
n = @digraph.neighbors('Tom')
|
57
|
+
n.must_be_instance_of Array
|
58
|
+
n.size.must_equal 1
|
59
|
+
assert n.include?("Marc")
|
60
|
+
refute n.include?("Lukas")
|
61
|
+
refute n.include?("Jack")
|
62
|
+
end
|
63
|
+
|
64
|
+
it "#add_edge should add new edge." do
|
65
|
+
@digraph.add_edges([Edge.new("Marc","Kate")])
|
66
|
+
@digraph.vertex_size.must_equal 6
|
67
|
+
assert @digraph.edge?("Marc","Kate")
|
68
|
+
refute @digraph.edge?("Kate","Marc")
|
69
|
+
refute @digraph.edge?("Tom","Kate")
|
70
|
+
end
|
71
|
+
|
72
|
+
it "#remove_edge should remove edge." do
|
73
|
+
@digraph.remove("Marc","Jack")
|
74
|
+
@digraph.vertex_size.must_equal 4
|
75
|
+
refute @digraph.edge?("Marc","Jack")
|
76
|
+
assert @digraph.edge?("Jack","Marc")
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "with weighted edges" do
|
82
|
+
|
83
|
+
before do
|
84
|
+
edges = []
|
85
|
+
|
86
|
+
edges << Edge.new(:A,:C,5)
|
87
|
+
edges << Edge.new(:A,:D,3)
|
88
|
+
edges << Edge.new(:A,:G,14)
|
89
|
+
edges << Edge.new(:C,:E,3)
|
90
|
+
edges << Edge.new(:C,:F,2)
|
91
|
+
edges << Edge.new(:D,:C,11)
|
92
|
+
edges << Edge.new(:D,:E,7)
|
93
|
+
edges << Edge.new(:D,:G,6)
|
94
|
+
edges << Edge.new(:G,:E,7)
|
95
|
+
edges << Edge.new(:E,:B,5)
|
96
|
+
edges << Edge.new(:G,:B,6)
|
97
|
+
edges << Edge.new(:F,:B,7)
|
98
|
+
|
99
|
+
@wdigraph = Digraph.create(edges)
|
100
|
+
end
|
101
|
+
|
102
|
+
it "edge should be assigned a weight." do
|
103
|
+
d_c = @wdigraph.get_edge(:D,:C)
|
104
|
+
d_c.weight.must_equal 11
|
105
|
+
d_c.from.must_equal :D
|
106
|
+
d_c.to.must_equal :C
|
107
|
+
d_c.must_be_instance_of Edge
|
108
|
+
end
|
109
|
+
|
110
|
+
it "#degree should return vertex degree." do
|
111
|
+
@wdigraph.degree(:E).must_equal 4
|
112
|
+
@wdigraph.degree(:C).must_equal 4
|
113
|
+
@wdigraph.degree(:A).must_equal 3
|
114
|
+
end
|
115
|
+
|
116
|
+
it "#in_degree should return number of incoming edges to the vertex." do
|
117
|
+
@wdigraph.in_degree(:E).must_equal 3
|
118
|
+
@wdigraph.in_degree(:C).must_equal 2
|
119
|
+
@wdigraph.in_degree(:A).must_equal 0
|
120
|
+
end
|
121
|
+
|
122
|
+
it "#out_degree should return number of outgoing edges from vertex." do
|
123
|
+
@wdigraph.out_degree(:E).must_equal 1
|
124
|
+
@wdigraph.out_degree(:B).must_equal 0
|
125
|
+
@wdigraph.out_degree(:A).must_equal 3
|
126
|
+
end
|
127
|
+
|
128
|
+
it "#bfs should iterate over graph in bfs order." do
|
129
|
+
@wdigraph.bfs(:A).must_equal [:A, :C, :D, :G, :E, :F, :B]
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'help'
|
2
|
+
|
3
|
+
describe ExpandableArray do
|
4
|
+
|
5
|
+
describe "Zero Array" do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@zero_arr = ExpandableArray.new(0,0)
|
9
|
+
@zero_arr[0] = 1
|
10
|
+
end
|
11
|
+
|
12
|
+
it "access to element x should set all elements from array size to x to zero." do
|
13
|
+
@zero_arr.size.must_equal 1
|
14
|
+
@zero_arr[3].must_equal 0
|
15
|
+
@zero_arr.size.must_equal 4
|
16
|
+
@zero_arr.must_equal [1,0,0,0]
|
17
|
+
end
|
18
|
+
|
19
|
+
it "setting value on index x should set all elements from array size to x to zero." do
|
20
|
+
@zero_arr[5] = 2
|
21
|
+
@zero_arr.must_equal [1,0,0,0,0,2]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
data/test/test_graph.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'help'
|
2
|
+
|
3
|
+
describe Graph do
|
4
|
+
|
5
|
+
before do
|
6
|
+
edges = []
|
7
|
+
edges << Edge.new('Lukas','Marc')
|
8
|
+
edges << Edge.new('Lukas','Tom')
|
9
|
+
edges << Edge.new('Marc','Jack')
|
10
|
+
edges << Edge.new('Tom','Marc')
|
11
|
+
@graph = Graph.create(edges)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "#vertex_size should return number of vertexes" do
|
15
|
+
@graph.vertex_size.must_equal 4
|
16
|
+
end
|
17
|
+
|
18
|
+
it "#degree should return degree for given vertex." do
|
19
|
+
@graph.degree("Marc").must_equal 3
|
20
|
+
@graph.degree("Jack").must_equal 1
|
21
|
+
@graph.degree("Lukas").must_equal 2
|
22
|
+
@graph.degree("Tom").must_equal 2
|
23
|
+
end
|
24
|
+
|
25
|
+
it "#edge? should check if given vertexes are connected." do
|
26
|
+
assert @graph.edge?("Marc","Tom")
|
27
|
+
assert @graph.edge?("Tom","Marc")
|
28
|
+
refute @graph.edge?("Tom","Jack")
|
29
|
+
refute @graph.edge?("Jack","Tom")
|
30
|
+
end
|
31
|
+
|
32
|
+
it "#add_edges should add new edges." do
|
33
|
+
@graph.add_edges([Edge.new("Marc","Kate")])
|
34
|
+
@graph.vertex_size.must_equal 5
|
35
|
+
assert @graph.edge?("Marc","Kate")
|
36
|
+
assert @graph.edge?("Kate","Marc")
|
37
|
+
refute @graph.edge?("Tom","Kate")
|
38
|
+
end
|
39
|
+
|
40
|
+
it "#remove_edge should remove edge." do
|
41
|
+
@graph.remove("Marc","Jack")
|
42
|
+
@graph.vertex_size.must_equal 3
|
43
|
+
refute @graph.edge?("Marc","Jack")
|
44
|
+
refute @graph.edge?("Jack","Marc")
|
45
|
+
end
|
46
|
+
|
47
|
+
it "#neighbors should return all neighbors for given vertex." do
|
48
|
+
n = @graph.neighbors('Tom')
|
49
|
+
n.must_be_instance_of Array
|
50
|
+
n.size.must_equal 2
|
51
|
+
assert n.include?("Marc")
|
52
|
+
assert n.include?("Lukas")
|
53
|
+
refute n.include?("Jack")
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should iterate edges." do
|
57
|
+
r = []
|
58
|
+
@graph.each_edge{|e| r.push e}
|
59
|
+
r.size.must_equal 4
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should iterate vertexes." do
|
63
|
+
r = []
|
64
|
+
@graph.each_vertex { |v| r.push v }
|
65
|
+
r.size.must_equal 4
|
66
|
+
r.sort.must_equal ['Jack','Lukas', 'Marc', 'Tom' ]
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
|
data/test/test_list.rb
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
require 'help'
|
2
|
+
|
3
|
+
describe List do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@list = List.from_array([1,2,3,4])
|
7
|
+
@list2 = List.from_array([4,5,7])
|
8
|
+
end
|
9
|
+
|
10
|
+
it "#from_array should transform array to list." do
|
11
|
+
@list.must_be_kind_of List
|
12
|
+
@list.length.must_equal 4
|
13
|
+
end
|
14
|
+
|
15
|
+
it "#length should return list size." do
|
16
|
+
@list.length.must_equal 4
|
17
|
+
@list2.length.must_equal 3
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
it "#append should add element to the end of the list." do
|
22
|
+
x = 5
|
23
|
+
@list.append(x)
|
24
|
+
@list.length.must_equal 5
|
25
|
+
@list.last.must_be_same_as x
|
26
|
+
end
|
27
|
+
|
28
|
+
it "#prepend should add element at the beginning of the list." do
|
29
|
+
x = 0
|
30
|
+
@list.prepend(x)
|
31
|
+
@list.length.must_equal 5
|
32
|
+
@list.first.must_be_same_as x
|
33
|
+
end
|
34
|
+
|
35
|
+
it "#remove should remove element from list." do
|
36
|
+
second = @list.head.next
|
37
|
+
@list.remove(second)
|
38
|
+
@list.to_a.must_equal [1,3,4]
|
39
|
+
end
|
40
|
+
|
41
|
+
it "#insert_before should insert new element before another." do
|
42
|
+
second = @list.head.next
|
43
|
+
@list.insert_before(9,second)
|
44
|
+
@list.to_a.must_equal [1,9,2,3,4]
|
45
|
+
|
46
|
+
@list.insert_before(8,@list.head)
|
47
|
+
@list.to_a.must_equal [8,1,9,2,3,4]
|
48
|
+
|
49
|
+
@list.insert_before(7,@list.tail)
|
50
|
+
@list.to_a.must_equal [8,1,9,2,3,7,4]
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
it "#insert_after should insert new element after another." do
|
55
|
+
second = @list.head.next
|
56
|
+
@list.insert_after(9,second)
|
57
|
+
@list.to_a.must_equal [1,2,9,3,4]
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
it "#head should point to first element of the list." do
|
62
|
+
@list.head.must_be_kind_of ListElement
|
63
|
+
@list2.head.must_be_kind_of ListElement
|
64
|
+
@list.head.data.must_equal 1
|
65
|
+
@list2.head.data.must_equal 4
|
66
|
+
end
|
67
|
+
|
68
|
+
it "#tail sould point to last element of the list" do
|
69
|
+
@list.tail.must_be_kind_of ListElement
|
70
|
+
@list2.tail.must_be_kind_of ListElement
|
71
|
+
@list.tail.next.must_be_nil
|
72
|
+
@list2.tail.next.must_be_nil
|
73
|
+
|
74
|
+
@list.tail.data.must_equal 4
|
75
|
+
@list2.tail.data.must_equal 7
|
76
|
+
end
|
77
|
+
|
78
|
+
it "#first should return value of the first list element." do
|
79
|
+
@list.first.must_equal 1
|
80
|
+
@list2.first.must_equal 4
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
it "#last should return value of the last list element." do
|
85
|
+
@list.last.must_equal 4
|
86
|
+
@list2.last.must_equal 7
|
87
|
+
end
|
88
|
+
|
89
|
+
it "#zip? should check if two list are joined." do
|
90
|
+
refute @list.zip?(@list2)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "#reverse! should reverse list" do
|
94
|
+
@list.reverse!.to_a.must_equal [4,3,2,1]
|
95
|
+
@list.reverse!.to_a.must_equal [1,2,3,4]
|
96
|
+
@list.reverse!.length.must_equal 4
|
97
|
+
end
|
98
|
+
|
99
|
+
it "#merge should merge two list into one." do
|
100
|
+
@list2.merge(@list).to_a.must_equal [1,2,3,4,4,5,7]
|
101
|
+
end
|
102
|
+
|
103
|
+
it "#orderize should order elements by evaluating block." do
|
104
|
+
not_sorted_list = List.from_array([3,-1,0,-8,2,0,1])
|
105
|
+
not_sorted_list.orderize{|elem| elem <=> 0}.to_a.must_equal [-1,-8,0,0,3,2,1]
|
106
|
+
end
|
107
|
+
|
108
|
+
it "#remove! should remove all elements that occur on the other list." do
|
109
|
+
@list.remove!(@list2).to_a.must_equal [1,2,3]
|
110
|
+
end
|
111
|
+
|
112
|
+
it "#looped? should check if list has cycle." do
|
113
|
+
refute @list2.looped?
|
114
|
+
refute @list.looped?
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should include Enumerable methods." do
|
118
|
+
@list.map{ |e| e }.must_equal [1,2,3,4]
|
119
|
+
@list.inject(0){ |mem, var| mem = mem + var }.must_equal 10
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
describe "Zipped list" do
|
124
|
+
|
125
|
+
before do
|
126
|
+
last = @list.tail
|
127
|
+
@zipped = List.from_array([1,2])
|
128
|
+
@zipped.tail = last
|
129
|
+
end
|
130
|
+
|
131
|
+
it "#zip? should return true" do
|
132
|
+
assert @list.zip?(@zipped)
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|