115 lines
3.6 KiB
Python
115 lines
3.6 KiB
Python
import unittest
|
|
|
|
import easygraph as eg
|
|
import pytest
|
|
|
|
|
|
class Test(unittest.TestCase):
|
|
def setUp(self):
|
|
edges = [(1, 2), (2, 3), ("String", "Bool"), (2, 1), ((1, 2), (3, 4))]
|
|
self.g = eg.MultiDiGraph(edges)
|
|
|
|
def test_add_edge(self):
|
|
self.g.add_edge("from_Beijing", "to_California", key=3, attr=None)
|
|
print(self.g.edges)
|
|
|
|
def test_remove_edge(self):
|
|
self.g.add_edge("from_Beijing", "to_California", key=3, attr=None)
|
|
self.g.remove_edge("from_Beijing", "to_California")
|
|
print(self.g.edges)
|
|
|
|
def test_degree(self):
|
|
print(self.g.degree)
|
|
print(self.g.in_degree)
|
|
print(self.g.out_degree)
|
|
|
|
def test_reverse(self):
|
|
# error with _succ
|
|
print(self.g.reverse(copy=True).edges)
|
|
# print(self.g.reverse(copy=False).edges)
|
|
|
|
def test_attributes(self):
|
|
print(self.g.edges)
|
|
print(self.g.in_edges)
|
|
|
|
|
|
class TestMultiDiGraph(unittest.TestCase):
|
|
def setUp(self):
|
|
self.G = eg.MultiDiGraph()
|
|
|
|
def test_add_edge_without_key(self):
|
|
key1 = self.G.add_edge("A", "B", weight=1)
|
|
key2 = self.G.add_edge("A", "B", weight=2)
|
|
self.assertNotEqual(key1, key2)
|
|
self.assertEqual(len(self.G._adj["A"]["B"]), 2)
|
|
|
|
def test_add_edge_with_key(self):
|
|
key = self.G.add_edge("A", "B", key="mykey", weight=3)
|
|
self.assertEqual(key, "mykey")
|
|
self.assertEqual(self.G._adj["A"]["B"]["mykey"]["weight"], 3)
|
|
|
|
def test_edge_attributes_update(self):
|
|
self.G.add_edge("X", "Y", key=1, color="red")
|
|
self.G.add_edge("X", "Y", key=1, shape="circle")
|
|
self.assertEqual(self.G._adj["X"]["Y"][1]["color"], "red")
|
|
self.assertEqual(self.G._adj["X"]["Y"][1]["shape"], "circle")
|
|
|
|
def test_remove_edge_by_key(self):
|
|
self.G.add_edge("A", "B", key="k1")
|
|
self.G.add_edge("A", "B", key="k2")
|
|
self.G.remove_edge("A", "B", key="k1")
|
|
self.assertIn("k2", self.G._adj["A"]["B"])
|
|
self.assertNotIn("k1", self.G._adj["A"]["B"])
|
|
|
|
def test_remove_edge_without_key(self):
|
|
self.G.add_edge("A", "B", key="auto1")
|
|
self.G.add_edge("A", "B", key="auto2")
|
|
self.G.remove_edge("A", "B")
|
|
# Only one of the keys should remain
|
|
self.assertEqual(len(self.G._adj["A"]["B"]), 1)
|
|
|
|
def test_remove_nonexistent_edge_raises(self):
|
|
with self.assertRaises(eg.EasyGraphError):
|
|
self.G.remove_edge("X", "Y", key="doesnotexist")
|
|
|
|
def test_edges_property(self):
|
|
self.G.add_edge("U", "V", key="k", weight=5)
|
|
edges = self.G.edges
|
|
self.assertIn(("U", "V", "k", {"weight": 5}), edges)
|
|
|
|
def test_in_out_degree(self):
|
|
self.G.add_edge("A", "B", weight=3)
|
|
self.G.add_edge("C", "B", weight=2)
|
|
|
|
in_deg = {}
|
|
for n in self.G._node:
|
|
preds = self.G._pred[n]
|
|
in_deg[n] = sum(
|
|
d.get("weight", 1)
|
|
for key_dict in preds.values()
|
|
for d in key_dict.values()
|
|
)
|
|
|
|
self.assertEqual(in_deg["B"], 5)
|
|
|
|
def test_to_undirected(self):
|
|
self.G.add_edge("A", "B", key="k", weight=10)
|
|
UG = self.G.to_undirected()
|
|
self.assertTrue(UG.has_edge("A", "B"))
|
|
self.assertEqual(UG["A"]["B"]["k"]["weight"], 10)
|
|
|
|
def test_reverse_graph(self):
|
|
self.G.add_edge("A", "B", key="k", data=99)
|
|
RG = self.G.reverse()
|
|
self.assertTrue(RG.has_edge("B", "A"))
|
|
self.assertEqual(RG["B"]["A"]["k"]["data"], 99)
|
|
|
|
def test_is_multigraph_and_directed(self):
|
|
self.assertTrue(self.G.is_multigraph())
|
|
self.assertTrue(self.G.is_directed())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|
|
# test()
|