82 lines
3.0 KiB
Python
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()
|