Add tests, remove main in UnionFind (#5678)

This commit is contained in:
Hardik Pawar
2024-10-11 01:37:02 +05:30
committed by GitHub
parent fb11d455dd
commit 401d87365e
3 changed files with 126 additions and 27 deletions

View File

@ -0,0 +1,81 @@
package com.thealgorithms.searches;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class UnionFindTest {
private UnionFind uf;
@BeforeEach
void setUp() {
uf = new UnionFind(10); // Initialize with 10 elements
}
@Test
void testInitialState() {
// Verify that each element is its own parent and rank is 0
assertEquals("p [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] r [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n", uf.toString());
assertEquals(10, uf.count(), "Initial count of disjoint sets should be 10.");
}
@Test
void testUnionOperation() {
uf.union(0, 1);
uf.union(1, 2);
assertEquals(8, uf.count(), "Count should decrease after unions.");
assertEquals(0, uf.find(2), "Element 2 should point to root 0 after unions.");
}
@Test
void testUnionWithRank() {
uf.union(0, 1);
uf.union(1, 2); // Make 0 the root of 2
uf.union(3, 4);
uf.union(4, 5); // Make 3 the root of 5
uf.union(0, 3); // Union two trees
assertEquals(5, uf.count(), "Count should decrease after unions.");
assertEquals(0, uf.find(5), "Element 5 should point to root 0 after unions.");
}
@Test
void testFindOperation() {
uf.union(2, 3);
uf.union(4, 5);
uf.union(3, 5); // Connect 2-3 and 4-5
assertEquals(2, uf.find(3), "Find operation should return the root of the set.");
assertEquals(2, uf.find(5), "Find operation should return the root of the set.");
}
@Test
void testCountAfterMultipleUnions() {
uf.union(0, 1);
uf.union(2, 3);
uf.union(4, 5);
uf.union(1, 3); // Connect 0-1-2-3
uf.union(5, 6);
assertEquals(5, uf.count(), "Count should reflect the number of disjoint sets after multiple unions.");
}
@Test
void testNoUnion() {
assertEquals(10, uf.count(), "Count should remain 10 if no unions are made.");
}
@Test
void testUnionSameSet() {
uf.union(1, 2);
uf.union(1, 2); // Union same elements again
assertEquals(9, uf.count(), "Count should not decrease if union is called on the same set.");
}
@Test
void testFindOnSingleElement() {
assertEquals(7, uf.find(7), "Find on a single element should return itself.");
}
}