def testConnectivity(self): sz = 7 uf = UnionFind(sz) for i in range(sz): self.assertTrue(uf.connected(i, i)) uf.unify(0, 2) self.assertTrue(uf.connected(0, 2)) self.assertTrue(uf.connected(2, 0)) self.assertFalse(uf.connected(0, 1)) self.assertFalse(uf.connected(3, 1)) self.assertFalse(uf.connected(6, 4)) self.assertFalse(uf.connected(5, 0)) for i in range(sz): self.assertTrue(uf.connected(i, i)) uf.unify(3, 1) self.assertTrue(uf.connected(0, 2)) self.assertTrue(uf.connected(2, 0)) self.assertTrue(uf.connected(1, 3)) self.assertTrue(uf.connected(3, 1)) self.assertFalse(uf.connected(0, 1)) self.assertFalse(uf.connected(1, 2)) self.assertFalse(uf.connected(2, 3)) self.assertFalse(uf.connected(1, 0)) self.assertFalse(uf.connected(2, 1)) self.assertFalse(uf.connected(3, 2)) self.assertFalse(uf.connected(1, 4)) self.assertFalse(uf.connected(2, 5)) self.assertFalse(uf.connected(3, 6)) for i in range(sz): self.assertTrue(uf.connected(i, i)) uf.unify(2, 5) self.assertTrue(uf.connected(0, 2)) self.assertTrue(uf.connected(2, 0)) self.assertTrue(uf.connected(1, 3)) self.assertTrue(uf.connected(3, 1)) self.assertTrue(uf.connected(0, 5)) self.assertTrue(uf.connected(5, 0)) self.assertTrue(uf.connected(5, 2)) self.assertTrue(uf.connected(2, 5)) self.assertFalse(uf.connected(0, 1)) self.assertFalse(uf.connected(1, 2)) self.assertFalse(uf.connected(2, 3)) self.assertFalse(uf.connected(1, 0)) self.assertFalse(uf.connected(2, 1)) self.assertFalse(uf.connected(3, 2)) self.assertFalse(uf.connected(4, 6)) self.assertFalse(uf.connected(4, 5)) self.assertFalse(uf.connected(1, 6)) for i in range(sz): self.assertTrue(uf.connected(i, i)) # Connect everything uf.unify(1, 2) uf.unify(3, 4) uf.unify(4, 6) for i in range(sz): for j in range(sz): self.assertTrue(uf.connected(i, j))