Skip to content

Commit 4b00a1c

Browse files
committed
Add unit tests and fix algorithm.
1 parent cf9f6e6 commit 4b00a1c

File tree

2 files changed

+35
-14
lines changed

2 files changed

+35
-14
lines changed

union-find/quick-union/quick_union.rb

+2-11
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,7 @@ def union(p, q)
2424
pr = root(p)
2525
qr = root(q)
2626
unless(pr == qr)
27-
@values[pr] = qr
27+
@values[qr] = @values[pr]
2828
end
2929
end
30-
end
31-
32-
qf = QuickUnion.new(10)
33-
p qf.values
34-
qf.union(4, 3)
35-
p qf.values
36-
qf.union(9, 8)
37-
p qf.values
38-
qf.union(4, 8)
39-
p qf.values
30+
end
+33-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,39 @@
11
require_relative './quick_union'
22

33
RSpec.describe QuickUnion do
4+
let(:quick_union) { QuickUnion.new(10) }
5+
46
it "Create array with values assigned to its index" do
5-
qf = QuickUnion.new(10)
6-
expect(qf.size).to eq(10)
7-
expect(qf.values.size).to eq(10)
7+
expect(quick_union.size).to eq(10)
8+
expect(quick_union.values.size).to eq(10)
9+
end
10+
11+
it "Check if two elements are connected" do
12+
expect(quick_union.connected(0, 1)).to eq(false)
13+
end
14+
15+
it "Test the algorithm" do
16+
quick_union.union(4, 3)
17+
expect(quick_union.values).to eq([0, 1, 2, 4, 4, 5, 6, 7, 8, 9])
18+
quick_union.union(9, 8)
19+
expect(quick_union.values).to eq([0, 1, 2, 4, 4, 5, 6, 7, 9, 9])
20+
quick_union.union(9, 7)
21+
expect(quick_union.values).to eq([0, 1, 2, 4, 4, 5, 6, 9, 9, 9])
22+
quick_union.union(0, 1)
23+
expect(quick_union.values).to eq([0, 0, 2, 4, 4, 5, 6, 9, 9, 9])
24+
quick_union.union(6, 7)
25+
expect(quick_union.values).to eq([0, 0, 2, 4, 4, 5, 6, 9, 9, 6])
26+
end
27+
28+
it "Get the root element of an element" do
29+
quick_union.union(6, 7)
30+
expect(quick_union.root(7)).to eq(6)
31+
end
32+
33+
it "Check if two elements are connected" do
34+
quick_union.union(0, 1)
35+
quick_union.union(1, 2)
36+
quick_union.union(2, 3)
37+
expect(quick_union.connected(0, 3)).to eq(true)
838
end
939
end

0 commit comments

Comments
 (0)