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

82 lines
3.0 KiB
Python

import unittest
import easygraph as eg
class TestGreedyModularityCommunities(unittest.TestCase):
def setUp(self):
# A simple connected graph
self.graph_simple = eg.Graph()
self.graph_simple.add_edges_from([(0, 1), (1, 2), (3, 4)])
# A weighted graph
self.graph_weighted = eg.Graph()
self.graph_weighted.add_edges_from(
[(0, 1, {"weight": 3}), (1, 2, {"weight": 2}), (3, 4, {"weight": 1})]
)
# A fully connected graph (clique)
self.graph_clique = eg.Graph()
self.graph_clique.add_edges_from([(0, 1), (0, 2), (1, 2)])
# A disconnected graph
self.graph_disconnected = eg.Graph()
self.graph_disconnected.add_edges_from([(0, 1), (2, 3), (4, 5)])
# A graph with a single node
self.graph_single_node = eg.Graph()
self.graph_single_node.add_node(42)
# An empty graph
self.graph_empty = eg.Graph()
def test_communities_simple(self):
result = eg.functions.community.greedy_modularity_communities(self.graph_simple)
flat_nodes = {node for group in result for node in group}
self.assertSetEqual(flat_nodes, set(self.graph_simple.nodes))
def test_communities_weighted(self):
result = eg.functions.community.greedy_modularity_communities(
self.graph_weighted
)
flat_nodes = {node for group in result for node in group}
self.assertSetEqual(flat_nodes, set(self.graph_weighted.nodes))
def test_communities_clique(self):
result = eg.functions.community.greedy_modularity_communities(self.graph_clique)
self.assertEqual(len(result), 1)
self.assertSetEqual(result[0], set(self.graph_clique.nodes))
def test_communities_disconnected(self):
result = eg.functions.community.greedy_modularity_communities(
self.graph_disconnected
)
flat_nodes = {node for group in result for node in group}
self.assertSetEqual(flat_nodes, set(self.graph_disconnected.nodes))
def test_communities_single_node(self):
with self.assertRaises(SystemExit):
eg.functions.community.greedy_modularity_communities(self.graph_single_node)
def test_communities_empty_graph(self):
with self.assertRaises(SystemExit):
eg.functions.community.greedy_modularity_communities(self.graph_empty)
def test_correct_partition_disjoint(self):
result = eg.functions.community.greedy_modularity_communities(
self.graph_disconnected
)
all_nodes = [node for group in result for node in group]
self.assertEqual(len(all_nodes), len(set(all_nodes)))
def test_communities_sorted_by_size(self):
result = eg.functions.community.greedy_modularity_communities(
self.graph_disconnected
)
sizes = [len(group) for group in result]
self.assertEqual(sizes, sorted(sizes, reverse=True))
if __name__ == "__main__":
unittest.main()