Skip to content

Commit c972499

Browse files
committed
testing: improve DisjointSetUnionTest
1 parent ec7b654 commit c972499

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed

src/test/java/com/thealgorithms/datastructures/disjointsetunion/DisjointSetUnionTest.java

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,4 +122,110 @@ public void testPathCompression() {
122122
assertEquals(root, node1);
123123
assertEquals(node1, node3.parent);
124124
}
125+
126+
@Test
127+
public void testUnionByRankSmallerToLarger() {
128+
DisjointSetUnion<Integer> dsu = new DisjointSetUnion<>();
129+
Node<Integer> node1 = dsu.makeSet(1);
130+
Node<Integer> node2 = dsu.makeSet(2);
131+
Node<Integer> node3 = dsu.makeSet(3);
132+
Node<Integer> node4 = dsu.makeSet(4);
133+
134+
// Create tree with node1 as root and rank 1
135+
dsu.unionSets(node1, node2);
136+
assertEquals(1, node1.rank);
137+
assertEquals(0, node2.rank);
138+
139+
// Union single node (rank 0) with tree (rank 1)
140+
// Smaller rank tree should attach to larger rank tree
141+
dsu.unionSets(node3, node1);
142+
assertEquals(node1, dsu.findSet(node3));
143+
assertEquals(1, node1.rank); // Rank should not increase
144+
}
145+
146+
@Test
147+
public void testUnionByRankEqualRanks() {
148+
DisjointSetUnion<Integer> dsu = new DisjointSetUnion<>();
149+
Node<Integer> node1 = dsu.makeSet(1);
150+
Node<Integer> node2 = dsu.makeSet(2);
151+
Node<Integer> node3 = dsu.makeSet(3);
152+
Node<Integer> node4 = dsu.makeSet(4);
153+
154+
// Create two trees of equal rank (1)
155+
dsu.unionSets(node1, node2);
156+
dsu.unionSets(node3, node4);
157+
assertEquals(1, node1.rank);
158+
assertEquals(1, node3.rank);
159+
160+
// Union two trees of equal rank
161+
dsu.unionSets(node1, node3);
162+
Node<Integer> root = dsu.findSet(node1);
163+
assertEquals(2, root.rank); // Rank should increase by 1
164+
}
165+
166+
@Test
167+
public void testLargeChainPathCompression() {
168+
DisjointSetUnion<Integer> dsu = new DisjointSetUnion<>();
169+
Node<Integer> node1 = dsu.makeSet(1);
170+
Node<Integer> node2 = dsu.makeSet(2);
171+
Node<Integer> node3 = dsu.makeSet(3);
172+
Node<Integer> node4 = dsu.makeSet(4);
173+
Node<Integer> node5 = dsu.makeSet(5);
174+
175+
// Create a long chain: 1 -> 2 -> 3 -> 4 -> 5
176+
dsu.unionSets(node1, node2);
177+
dsu.unionSets(node2, node3);
178+
dsu.unionSets(node3, node4);
179+
dsu.unionSets(node4, node5);
180+
181+
// Find from the deepest node
182+
Node<Integer> root = dsu.findSet(node5);
183+
184+
// Path compression should make all nodes point directly to root
185+
assertEquals(root, node5.parent);
186+
assertEquals(root, node4.parent);
187+
assertEquals(root, node3.parent);
188+
assertEquals(root, node2.parent);
189+
assertEquals(root, node1.parent);
190+
}
191+
192+
@Test
193+
public void testMultipleDisjointSets() {
194+
DisjointSetUnion<Integer> dsu = new DisjointSetUnion<>();
195+
Node<Integer> node1 = dsu.makeSet(1);
196+
Node<Integer> node2 = dsu.makeSet(2);
197+
Node<Integer> node3 = dsu.makeSet(3);
198+
Node<Integer> node4 = dsu.makeSet(4);
199+
Node<Integer> node5 = dsu.makeSet(5);
200+
Node<Integer> node6 = dsu.makeSet(6);
201+
202+
// Create two separate components
203+
dsu.unionSets(node1, node2);
204+
dsu.unionSets(node2, node3);
205+
206+
dsu.unionSets(node4, node5);
207+
dsu.unionSets(node5, node6);
208+
209+
// Verify they are separate
210+
assertEquals(dsu.findSet(node1), dsu.findSet(node2));
211+
assertEquals(dsu.findSet(node2), dsu.findSet(node3));
212+
assertEquals(dsu.findSet(node4), dsu.findSet(node5));
213+
assertEquals(dsu.findSet(node5), dsu.findSet(node6));
214+
215+
assertNotEquals(dsu.findSet(node1), dsu.findSet(node4));
216+
assertNotEquals(dsu.findSet(node3), dsu.findSet(node6));
217+
}
218+
219+
@Test
220+
public void testEmptyValues() {
221+
DisjointSetUnion<String> dsu = new DisjointSetUnion<>();
222+
Node<String> emptyNode = dsu.makeSet("");
223+
Node<String> nullNode = dsu.makeSet(null);
224+
225+
assertEquals(emptyNode, dsu.findSet(emptyNode));
226+
assertEquals(nullNode, dsu.findSet(nullNode));
227+
228+
dsu.unionSets(emptyNode, nullNode);
229+
assertEquals(dsu.findSet(emptyNode), dsu.findSet(nullNode));
230+
}
125231
}

0 commit comments

Comments
 (0)