Files
2026-07-13 12:36:30 +08:00

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()