def test_simple_joins(self):
     uf = UnionFind(10)
     uf.join(1, 3)
     self.assertTrue(uf.is_joined(1, 3))
     self.assertFalse(uf.is_joined(1, 2))
     uf.join(6, 7)
     self.assertTrue(uf.is_joined(6, 7))
     self.assertFalse(uf.is_joined(1, 7))
 def test_chained_joins(self):
     uf = UnionFind(10)
     uf.join(1, 2)
     uf.join(2, 3)
     uf.join(3, 4)
     self.assertTrue(uf.is_joined(1, 4))
     self.assertTrue(uf.is_joined(3, 1))
     self.assertFalse(uf.is_joined(0, 1))
     uf.join(8, 3)
     self.assertTrue(uf.is_joined(1, 8))
     self.assertTrue(uf.is_joined(4, 8))
 def test_all_disjoint(self):
     n = 10
     uf = UnionFind(n)
     for i in xrange(n):
         for j in xrange(n):
             # Must only be joined if i == j
             self.assertEqual(uf.is_joined(i, j), i == j)