package aima.test.core.unit.util; import java.util.Arrays; import org.junit.Assert; import org.junit.Test; import aima.core.util.DisjointSets; public class DisjointSetsTest { @Test public void testConstructors() { DisjointSets<String> disjSets = new DisjointSets<String>(); Assert.assertEquals(0, disjSets.numberDisjointSets()); disjSets = new DisjointSets<String>("a", "a", "b"); Assert.assertEquals(2, disjSets.numberDisjointSets()); disjSets = new DisjointSets<String>(Arrays.asList("a", "a", "b")); Assert.assertEquals(2, disjSets.numberDisjointSets()); } @Test public void testMakeSet() { DisjointSets<String> disjSets = new DisjointSets<String>(); disjSets.makeSet("a"); Assert.assertEquals(1, disjSets.numberDisjointSets()); disjSets.makeSet("a"); Assert.assertEquals(1, disjSets.numberDisjointSets()); disjSets.makeSet("b"); Assert.assertEquals(2, disjSets.numberDisjointSets()); } @Test public void testUnion() { DisjointSets<String> disjSets = new DisjointSets<String>( "a", "b", "c", "d"); Assert.assertEquals(4, disjSets.numberDisjointSets()); disjSets.union("a", "b"); Assert.assertEquals(3, disjSets.numberDisjointSets()); Assert.assertEquals(disjSets.find("a"), disjSets.find("b")); disjSets.union("c", "d"); Assert.assertEquals(2, disjSets.numberDisjointSets()); Assert.assertEquals(disjSets.find("c"), disjSets.find("d")); disjSets.union("b", "c"); Assert.assertEquals(1, disjSets.numberDisjointSets()); } @Test(expected=IllegalArgumentException.class) public void testUnionIllegalArgumentException1() { DisjointSets<String> disjSets = new DisjointSets<String>( "a"); disjSets.union("b", "a"); } @Test(expected=IllegalArgumentException.class) public void testUnionIllegalArgumentException2() { DisjointSets<String> disjSets = new DisjointSets<String>( "a"); disjSets.union("a", "b"); } /** * Note: This is based on the example given in Figure 21.1 of 'Introduction * to Algorithm 2nd Edition' (by Cormen, Leriserson, Rivest, and Stein) */ @Test public void testWorkedExample() { // Should be the following when finished: // {a, b, c, d}, {e, f, g}, {h, i}, and {j} // 1. initial sets DisjointSets<String> disjSets = new DisjointSets<String>( "a", "b", "c", "d", "e", "f", "g", "h", "i", "j"); Assert.assertEquals(10, disjSets.numberDisjointSets()); Assert.assertEquals(1, disjSets.find("a").size()); Assert.assertEquals(1, disjSets.find("b").size()); Assert.assertEquals(1, disjSets.find("c").size()); Assert.assertEquals(1, disjSets.find("d").size()); Assert.assertEquals(1, disjSets.find("e").size()); Assert.assertEquals(1, disjSets.find("f").size()); Assert.assertEquals(1, disjSets.find("g").size()); Assert.assertEquals(1, disjSets.find("h").size()); Assert.assertEquals(1, disjSets.find("i").size()); Assert.assertEquals(1, disjSets.find("j").size()); // 2. (b, d) disjSets.union("b", "d"); Assert.assertEquals(9, disjSets.numberDisjointSets()); Assert.assertEquals(disjSets.find("b"), disjSets.find("d")); // 3. (e, g) disjSets.union("e", "g"); Assert.assertEquals(8, disjSets.numberDisjointSets()); Assert.assertEquals(disjSets.find("e"), disjSets.find("g")); // 4. (a, c) disjSets.union("a", "c"); Assert.assertEquals(7, disjSets.numberDisjointSets()); Assert.assertEquals(disjSets.find("a"), disjSets.find("c")); // 5. (h, i) disjSets.union("h", "i"); Assert.assertEquals(6, disjSets.numberDisjointSets()); Assert.assertEquals(disjSets.find("h"), disjSets.find("i")); // 6. (a, b) disjSets.union("a", "b"); Assert.assertEquals(5, disjSets.numberDisjointSets()); Assert.assertEquals(disjSets.find("a"), disjSets.find("b")); Assert.assertEquals(disjSets.find("b"), disjSets.find("c")); Assert.assertEquals(disjSets.find("c"), disjSets.find("d")); // 7. (e, f) disjSets.union("e", "f"); Assert.assertEquals(4, disjSets.numberDisjointSets()); Assert.assertEquals(disjSets.find("e"), disjSets.find("f")); Assert.assertEquals(disjSets.find("f"), disjSets.find("g")); // 8. (b, c) disjSets.union("b", "c"); Assert.assertEquals(4, disjSets.numberDisjointSets()); Assert.assertEquals(disjSets.find("a"), disjSets.find("b")); Assert.assertEquals(disjSets.find("b"), disjSets.find("c")); Assert.assertEquals(disjSets.find("c"), disjSets.find("d")); } }