83 lines
2.9 KiB
Python
83 lines
2.9 KiB
Python
import unittest
|
|
|
|
import easygraph as eg
|
|
|
|
from easygraph import is_weakly_connected
|
|
from easygraph import number_weakly_connected_components
|
|
from easygraph import weakly_connected_components
|
|
from easygraph.utils.exception import EasyGraphNotImplemented
|
|
from easygraph.utils.exception import EasyGraphPointlessConcept
|
|
|
|
|
|
class Test_weakly_connected(unittest.TestCase):
|
|
def test_empty_graph(self):
|
|
G = eg.DiGraph()
|
|
with self.assertRaises(EasyGraphPointlessConcept):
|
|
is_weakly_connected(G)
|
|
self.assertEqual(number_weakly_connected_components(G), 0)
|
|
self.assertEqual(list(weakly_connected_components(G)), [])
|
|
|
|
def test_single_node(self):
|
|
G = eg.DiGraph()
|
|
G.add_node(1)
|
|
self.assertTrue(is_weakly_connected(G))
|
|
self.assertEqual(number_weakly_connected_components(G), 1)
|
|
self.assertEqual(list(weakly_connected_components(G)), [{1}])
|
|
|
|
def test_connected_graph(self):
|
|
G = eg.DiGraph([(1, 2), (2, 3), (3, 4)])
|
|
self.assertTrue(is_weakly_connected(G))
|
|
self.assertEqual(number_weakly_connected_components(G), 1)
|
|
self.assertEqual(list(weakly_connected_components(G)), [{1, 2, 3, 4}])
|
|
|
|
def test_disconnected_graph(self):
|
|
G = eg.DiGraph([(1, 2), (3, 4)])
|
|
self.assertFalse(is_weakly_connected(G))
|
|
wcc = list(weakly_connected_components(G))
|
|
self.assertEqual(len(wcc), 2)
|
|
self.assertIn({1, 2}, wcc)
|
|
self.assertIn({3, 4}, wcc)
|
|
|
|
def test_self_loops(self):
|
|
G = eg.DiGraph([(1, 1), (2, 2)])
|
|
wcc = list(weakly_connected_components(G))
|
|
self.assertEqual(len(wcc), 2)
|
|
self.assertIn({1}, wcc)
|
|
self.assertIn({2}, wcc)
|
|
self.assertFalse(is_weakly_connected(G))
|
|
|
|
def test_multiple_components(self):
|
|
G = eg.DiGraph([(1, 2), (3, 4), (5, 6), (6, 5)])
|
|
wcc = list(weakly_connected_components(G))
|
|
self.assertEqual(number_weakly_connected_components(G), 3)
|
|
self.assertIn({1, 2}, wcc)
|
|
self.assertIn({3, 4}, wcc)
|
|
self.assertIn({5, 6}, wcc)
|
|
|
|
def test_unconnected_nodes(self):
|
|
G = eg.DiGraph([(1, 2), (3, 4)])
|
|
G.add_node(99) # isolated node
|
|
wcc = list(weakly_connected_components(G))
|
|
self.assertEqual(len(wcc), 3)
|
|
self.assertIn({99}, wcc)
|
|
|
|
def test_is_weakly_connected_after_adding_edge(self):
|
|
G = eg.DiGraph([(0, 1), (2, 1)])
|
|
G.add_node(3)
|
|
self.assertFalse(is_weakly_connected(G))
|
|
G.add_edge(2, 3)
|
|
self.assertTrue(is_weakly_connected(G))
|
|
|
|
def test_undirected_raises(self):
|
|
G = eg.Graph([(1, 2), (2, 3)])
|
|
with self.assertRaises(EasyGraphNotImplemented):
|
|
is_weakly_connected(G)
|
|
with self.assertRaises(EasyGraphNotImplemented):
|
|
number_weakly_connected_components(G)
|
|
with self.assertRaises(EasyGraphNotImplemented):
|
|
list(weakly_connected_components(G))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|