def test_inherit_node(self): self.g = Graph(ref="name", type=VECTOR) obj = [] for pes in persons: obj.append(Person(**pes)) self.g.add_nodes_from_iterable(obj) self.assertEqual(obj, self.g.get_nodes)
def setUp(self): self.n = [Node(1), Node(2), Node(3), Node(4)] self.g = Graph() for node in self.n : self.g.add_node(node) self.g.add_edge(1, 3) self.g.add_edge(2, 4)
def test_iscyclic(self): self.g = Graph(type=VECTOR) for i in range(5): self.g.add_node(Node(i)) self.edge_list = [(0,1),(0,2),(1,4),(1,3),(2,1),(2,3),(3,0),(4,3)] for x, y in self.edge_list: self.g.add_edge(x, y) self.assertTrue(self.g.is_cyclic())
def test_topological_sort(self): self.g = Graph(type=VECTOR) for i in range(6): self.g.add_node(Node(i)) self.edge_list = [(5,2),(5,0),(4,0),(4,1),(2,3),(3,1)] for x, y in self.edge_list: self.g.add_edge(x, y) sort = [node.value for node in self.g.topological_sort()] self.assertEqual(sort , [4,5,2,0,3,1])
def test_DFS(self): self.g = Graph() self.g.add_nodes_from_iterable(range(4)) self.g.add_edge(0, 1) self.g.add_edge(0, 2) self.g.add_edge(1, 2) self.g.add_edge(2, 0) self.g.add_edge(2, 3) self.g.add_edge(3, 3) self.assertEqual(self.g.DFS(2), [self.g[2], self.g[0], self.g[1], self.g[3]])
def test_multiple_random_nodes(self, n, e): with Graph() as r: nodes = [random.randint(1, 50) for _ in range(n)] edges = [(random.choice(nodes), random.choice(nodes), random.randint(0, 50)) for _ in range(e)] r.add_nodes_from_iterable(nodes) r.add_edges_from_iterable(edges) for e in edges: r.connections[e[0]][e[1]].color = "red" r.display(layout="random", weighted=True, ax=ax[1, 1])
def test_custom_object(self): with Graph(ref="name", type=VECTOR) as h: obj = [] for pes in persons: obj.append(Person(**pes)) h.add_nodes_from_iterable(obj) h.add_edge("sam", "sarah") h.add_edge("sam", "jane") h.add_edge("frank", "jane") print(h["jane"].adjacent_nodes) h["sam"].color = "#ee2341" h["frank"].color = "green" h.display(layout="polygon", attr="sex")
def test_mst_vis(self): with Graph() as mst: mst.add_nodes_from_iterable(range(1, 9)) edge_list = [(1, 2, 4), (1, 5, 2), (1, 4, 10), (2, 4, 8), (2, 3, 18), (3, 4, 11), ( 3, 8, 19), (4, 5, 5), (4, 7, 11), (4, 8, 9), (5, 6, 51), (6, 7, 1), (6, 8, 2), (7, 8, 23)] mst.add_edges_from_iterable(edge_list) mst[1].color = 'green' mst[5].color = '#32a8a4' mst[2].color = "#e299ff" mst.display(weighted=True, layout="polygon", ax=ax[0, 1]) print(mst.graph_matrix) sub = minimum_spanning_tree(mst) sub.display(weighted=True, layout="polygon", ax=ax[1, 0]) # plt.show() print(sub.graph_matrix)
def test_dijkstra_vis(self): with Graph(type='vector') as g: for i in range(6): g.add_node(Node(i)) edges = [(0, 1, 2), (0, 2, 10), (1, 3, 10), (1, 4, 8), (2, 5, 2), (3, 2, 7), (4, 5, 5)] for e in edges: g.add_edge(*e) # print(g.graph_matrix) print(g.DFS(0)) cost = dijkstra(g, 0, 5, path=True) # print(cost) for i, c in enumerate(cost): if i < len(cost)-1: edge = g.connections[g.get_node_id( cost[i])][g.get_node_id(cost[i+1])] edge.color = "red" edge.fontsize = 0.5 c.color = "green" c.radius = -0.5 g.display(weighted=True, polygon_radius=1, ax=ax[0, 0])
class Test(unittest.TestCase): def setUp(self): self.n = [Node(1), Node(2), Node(3), Node(4)] self.g = Graph() for node in self.n : self.g.add_node(node) self.g.add_edge(1, 3) self.g.add_edge(2, 4) def test_adjecent_matrix(self): shape = len(self.n) test_res = np.zeros((shape, shape)) test_res[0, 2] = 1 test_res[1, 3] = 1 test_res[2, 0] = 1 test_res[3, 1] = 1 res = self.g.graph_matrix == test_res self.assertTrue(np.all(res)) def test_BFS(self): self.assertEqual(self.g.BFS(1), [self.g[1], self.g[3]]) def test_iscyclic(self): self.g = Graph(type=VECTOR) for i in range(5): self.g.add_node(Node(i)) self.edge_list = [(0,1),(0,2),(1,4),(1,3),(2,1),(2,3),(3,0),(4,3)] for x, y in self.edge_list: self.g.add_edge(x, y) self.assertTrue(self.g.is_cyclic()) def test_topological_sort(self): self.g = Graph(type=VECTOR) for i in range(6): self.g.add_node(Node(i)) self.edge_list = [(5,2),(5,0),(4,0),(4,1),(2,3),(3,1)] for x, y in self.edge_list: self.g.add_edge(x, y) sort = [node.value for node in self.g.topological_sort()] self.assertEqual(sort , [4,5,2,0,3,1]) def test_inherit_node(self): self.g = Graph(ref="name", type=VECTOR) obj = [] for pes in persons: obj.append(Person(**pes)) self.g.add_nodes_from_iterable(obj) self.assertEqual(obj, self.g.get_nodes) def test_DFS(self): self.g = Graph() self.g.add_nodes_from_iterable(range(4)) self.g.add_edge(0, 1) self.g.add_edge(0, 2) self.g.add_edge(1, 2) self.g.add_edge(2, 0) self.g.add_edge(2, 3) self.g.add_edge(3, 3) self.assertEqual(self.g.DFS(2), [self.g[2], self.g[0], self.g[1], self.g[3]])