def test_graph_depth_first(): graph = Graph() v1 = graph.add_node('a') v2 = graph.add_node('b') v3 = graph.add_node('c') v4 = graph.add_node('d') v5 = graph.add_node('e') v6 = graph.add_node('f') v7 = graph.add_node('g') v8 = graph.add_node('h') graph.add_edge(v1, v2) graph.add_edge(v1, v4) graph.add_edge(v2, v1) graph.add_edge(v2, v3) graph.add_edge(v2, v4) graph.add_edge(v3, v2) graph.add_edge(v3, v7) graph.add_edge(v4, v1) graph.add_edge(v4, v2) graph.add_edge(v4, v5) graph.add_edge(v4, v8) graph.add_edge(v4, v6) graph.add_edge(v6, v4) graph.add_edge(v6, v8) graph.add_edge(v8, v6) graph.add_edge(v8, v4) graph.add_edge(v5, v4) values = graph.depth_first(v1) actual = [vertex.value for vertex in values] assert actual == ['a', 'b', 'a', 'd', 'e', 'h', 'f', 'c', 'g']
def test_add_edge(self): graph = Graph(directed=True, weighted=False) graph.add_node(1) graph.add_edge(1, 2) assert len(graph) == 2 assert len(graph.nodes) == 2 assert len(graph.edges) == 1 assert graph.contains_edge((1, 2)) assert graph.adj == {1: {2}, 2: set()}
def test_add_node(self): graph = Graph(directed=True) graph.add_node(1) graph.add_node(2) assert graph.contains_node(1) assert graph.contains_node(2) assert len(graph) == 2 assert len(graph.nodes) == 2 assert graph.adj == {1: set(), 2: set()}
def test_size(): graph = Graph() graph.add_node('spam') expected = 1 actual = graph.size() assert actual == expected
def test_weighted_add_node(): graph = Graph() nodes = [["a","b",5],["b","c",4],["a","c",3]] graph.make_weighted_from_list(nodes) graph.add_node(["b","b",2]) graph.add_node(["b","d",1]) test_graph = { Node("a"):[Edge("a","b",5),Edge("a","c",3)], Node("b"):[Edge("b","c",4),Edge("b","b",2),Edge("b","d",1)], Node("c"):[], Node("d"):[] } assert compare_graphs(test_graph, graph.graph) == True
def test_unweighted_add_node(): # make the same graph as one of the ones above # add a node and assert its equal graph = Graph() nodes = [["a","b"],["b","c"],["a","c"]] graph.make_unweighted_from_list(nodes) graph.add_node(["b","b"]) test_graph = { Node("a"):[Edge("a","b"),Edge("a","c")], Node("b"):[Edge("b","c"),Edge("b","b")], Node("c"):[] } assert compare_graphs(test_graph, graph.graph) == True
def test_add_edge(): graph = Graph() graph.add_edge(Edge(Node(2), Node(2))) assert len(graph.edges) == 0 graph.add_edge(Edge(Node(5), Node(2))) assert len(graph.edges) == 0 graph.add_node(Node(2)) graph.add_edge(Edge(Node(2), Node(2))) assert len(graph.edges) == 1 graph.add_node(Node(5)) graph.add_edge(Edge(Node(2), Node(5))) assert len(graph.edges) == 2 graph.add_edge(Edge(Node(5), Node(2))) assert len(graph.edges) == 2
def test_get_nodes(): graph = Graph() banana = graph.add_node('banana') apple = graph.add_node('apple') loner = Vertex('loner') expected = 2 actual = len(graph.get_nodes()) assert actual == expected
def test_add_node(): graph = Graph() expected = 'spam' # a vertex's value that comes back actual = graph.add_node('spam').value assert actual == expected
def test_add_edge_interloper_end(): graph = Graph() end = Vertex('end') start = graph.add_node('start') with pytest.raises(KeyError): graph.add_edge(start, end)
def test_get_neighbors(): graph = Graph() banana = graph.add_node('banana') apple = graph.add_node('apple') graph.add_edge(apple, banana, 44) neighbors = graph.get_neighbors(apple) assert len(neighbors) == 1 neighbor_edge = neighbors[0] assert neighbor_edge.vertex.value == 'banana' assert neighbor_edge.weight == 44
def test_add_node(): graph = Graph() graph.add_node(Node(1)) assert len(graph.nodes) == 1 graph.add_node(Node(2)) assert len(graph.nodes) == 2 graph.add_node(Node(2)) assert len(graph.nodes) == 2
def test_business_trip(): graph = Graph() v1 = graph.add_node('Pandora') v2 = graph.add_node('Arendelle') v3 = graph.add_node('Metroville') v4 = graph.add_node('Monstropolis') v5 = graph.add_node('Narnia') v6 = graph.add_node('Naboo') graph.add_edge(v1, v2, 150) graph.add_edge(v1, v3, 82) graph.add_edge(v2, v3, 99) graph.add_edge(v2, v4, 42) graph.add_edge(v3, v4, 105) graph.add_edge(v3, v5, 37) graph.add_edge(v3, v6, 26) graph.add_edge(v4, v6, 73) graph.add_edge(v5, v6, 250) cities = [v1, v2, v3] assert graph.business_trip(cities) == (True, '$249')
def test_breadth_search(): graph = Graph() node1 = graph.add_node('Pandora') node2 = graph.add_node('Aredelle') node3 = graph.add_node('Metroville') node4 = graph.add_node('Monstarpolis') node5 = graph.add_node('Narina') node6 = graph.add_node('Naboo') graph.add_edge(node1, node2) graph.add_edge(node2, node3) graph.add_edge(node2, node4) graph.add_edge(node3, node5) graph.add_edge(node3, node6) graph.add_edge(node4, node6) assert graph.breadth_search(node1) == [ 'Pandora', 'Aredelle', 'Metroville', 'Monstarpolis', 'Narina', 'Naboo' ]
from graphs.graph import Graph from graphs.path import ShortestPath import random graph = Graph() lowers = "abcdefgh" for name in lowers: adj = set(random.sample(lowers, random.randint(0, 7))) ne = {a:[round(random.random()*10, 0), 1] for a in adj - {name}} graph.add_node(name, 0, **ne) # print(graph.nodes) # print(graph.edges) S = ShortestPath(graph) S.shortest_path('a', 'e') print(graph) print(S.edge_to)
from graphs.topological_sort import * from graphs import util from graphs.graph import Graph import unittest graph1 = Graph() for v in [0, 1, 2, 3, 4, 5]: graph1.add_node(v) graph1.add_edge(5, 2) graph1.add_edge(5, 0) graph1.add_edge(4, 0) graph1.add_edge(4, 1) graph1.add_edge(2, 3) graph1.add_edge(3, 1) graph2 = Graph() for v in [5, 7, 3, 11, 8, 2, 9, 10]: graph2.add_node(v) graph2.add_edge(3, 8) graph2.add_edge(3, 10) graph2.add_edge(5, 11) graph2.add_edge(7, 8) graph2.add_edge(7, 11) graph2.add_edge(8, 9) graph2.add_edge(11, 2) graph2.add_edge(11, 9) graph2.add_edge(11, 10) class TestTopsort(unittest.TestCase): def test_dfs_topsort(self):
def test_is_connected_false(): graph = Graph(directed=False) graph.add_node(1) graph.add_multiple_edges([(2, 3), (3, 4)]) assert not is_connected(graph)