Files
easy-graph--easy-graph/easygraph/classes/tests/test_graphV2.py
T
2026-07-13 12:36:30 +08:00

123 lines
3.9 KiB
Python

import unittest
import easygraph as eg
class TestEasyGraph(unittest.TestCase):
def setUp(self):
self.G = eg.Graph()
def test_add_single_node(self):
self.G.add_node(1)
self.assertIn(1, self.G.nodes)
def test_add_multiple_nodes(self):
self.G.add_nodes([2, 3, 4])
for node in [2, 3, 4]:
self.assertIn(node, self.G.nodes)
def test_add_node_with_attributes(self):
self.G.add_node("node", color="red")
self.assertEqual(self.G.nodes["node"]["color"], "red")
def test_add_single_edge(self):
self.G.add_edge(1, 2)
self.assertTrue(self.G.has_edge(1, 2))
self.assertTrue(self.G.has_edge(2, 1))
def test_add_edge_with_weight(self):
self.G.add_edge("a", "b", weight=10)
self.assertEqual(self.G["a"]["b"]["weight"], 10)
def test_add_edges(self):
self.G.add_edges([(1, 2), (2, 3)], edges_attr=[{"weight": 5}, {"weight": 6}])
self.assertEqual(self.G[1][2]["weight"], 5)
self.assertEqual(self.G[2][3]["weight"], 6)
def test_remove_node(self):
self.G.add_node(10)
self.G.remove_node(10)
self.assertNotIn(10, self.G.nodes)
def test_remove_edge(self):
self.G.add_edge(1, 2)
self.G.remove_edge(1, 2)
self.assertFalse(self.G.has_edge(1, 2))
def test_neighbors(self):
self.G.add_edges([(1, 2), (1, 3)])
neighbors = list(self.G.neighbors(1))
self.assertIn(2, neighbors)
self.assertIn(3, neighbors)
def test_subgraph(self):
self.G.add_edges([(1, 2), (2, 3), (3, 4)])
subG = self.G.nodes_subgraph([2, 3])
self.assertIn(2, subG.nodes)
self.assertIn(3, subG.nodes)
self.assertTrue(subG.has_edge(2, 3))
self.assertFalse(subG.has_edge(3, 4))
def test_ego_subgraph(self):
self.G.add_edges([(1, 2), (2, 3), (2, 4)])
ego = self.G.ego_subgraph(2)
self.assertIn(2, ego.nodes)
self.assertIn(1, ego.nodes)
self.assertIn(3, ego.nodes)
self.assertIn(4, ego.nodes)
def test_to_index_node_graph(self):
self.G.add_edges([("a", "b"), ("b", "c")])
G_index, index_of_node, node_of_index = self.G.to_index_node_graph()
self.assertEqual(len(G_index.nodes), 3)
self.assertTrue(all(isinstance(k, int) for k in G_index.nodes))
def test_directed_conversion(self):
self.G.add_edge(1, 2)
H = self.G.to_directed()
self.assertTrue(H.is_directed())
self.assertTrue(H.has_edge(1, 2))
self.assertTrue(H.has_edge(2, 1))
def test_clone_graph(self):
self.G.add_edges([(1, 2), (2, 3)])
G_clone = self.G.copy()
self.assertTrue(G_clone.has_edge(1, 2))
self.assertTrue(G_clone.has_edge(2, 3))
def test_degree(self):
self.G.add_edge(1, 2, weight=5)
deg = self.G.degree()
self.assertEqual(deg[1], 5)
self.assertEqual(deg[2], 5)
def test_size(self):
self.G.add_edges([(1, 2), (2, 3)])
self.assertEqual(self.G.size(), 2)
def test_edge_weight_default(self):
self.G.add_edge(4, 5)
self.assertEqual(self.G[4][5].get("weight", 1), 1)
def test_node_index_mappings(self):
self.G.add_nodes([10, 20, 30])
index2node = self.G.index2node
node_index = self.G.node_index
for i, node in index2node.items():
self.assertEqual(node_index[node], i)
def test_graph_order(self):
self.G.add_nodes([1, 2, 3])
self.assertEqual(self.G.order(), 3)
def test_graph_size_with_weight(self):
self.G.add_edges([(1, 2), (2, 3)], edges_attr=[{"weight": 4}, {"weight": 6}])
self.assertEqual(self.G.size(weight="weight"), 10.0)
def test_clear_cache(self):
self.G.add_edge(1, 2)
_ = self.G.edges
self.assertIn("edge", self.G.cache)
self.G._clear_cache()
self.assertEqual(len(self.G.cache), 0)