def test_dfs(): graph = Graph() a = graph.add_node("a") b = graph.add_node("b") c = graph.add_node("c") d = graph.add_node("d") e = graph.add_node("e") f = graph.add_node("f") g = graph.add_node("g") h = graph.add_node("h") graph.add_edge(a, b) graph.add_edge(b, c) graph.add_edge(c, g) graph.add_edge(a, d) graph.add_edge(d, e) graph.add_edge(d, h) graph.add_edge(d, f) graph.add_edge(h, f) actual = graph.depth_first(a) expected = ["a", "b", "c", "g", "d", "e", "h", "f"] assert actual == expected
def test_get_neighbors(): graph = Graph() eggs = graph.add_node('eggs') chicken = graph.add_node('chicken') graph.add_edge(eggs, chicken, 10) neighbors = graph.get_neighbors(eggs) assert chicken in neighbors
def test_graph_get_neighbors(): grappy = Graph() vert_1 = grappy.add_vertex('A') vert_2 = grappy.add_vertex('B') grappy.add_edge(vert_1, vert_2) actual = grappy.get_neighbors(vert_1) expected = [(vert_2, 1)] assert actual == expected
def test_one_way_connected(): g = Graph() pandora = g.add_node("Pandora") arendelle = g.add_node("Arendelle") g.add_edge(pandora, arendelle) assert g.connected(pandora, arendelle) is True assert g.connected(arendelle, pandora) is False
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_depth_traversal_two(): graph = Graph() city = graph.add_node('Boston') town = graph.add_node('Seattle') place = graph.add_node('LA') graph.add_edge(city, town, 82) graph.add_edge(town, place, 90) graph.add_edge(city, place, 42) actual = depth_traversal(city, graph) expected = [city, place, town] assert actual == expected
def test_add_edge_with_weight(): graph = Graph() start = graph.add_node("start") end = graph.add_node("end") weight = 10 graph.add_edge(start, end, weight)
def test_get_neighbors(): g = Graph() sv = g.add_node("spam") ev = g.add_node("eggs") g.add_edge(sv, ev, 5) neighbors = g.get_neighbors(sv) assert len(neighbors) == 1 se = neighbors[0] assert se.vertex.value == "eggs" assert se.weight == 5
def test_get_n_solo(): g = Graph() sv = g.add_node("spam") g.add_edge(sv, sv) neighbors = g.get_neighbors(sv) assert len(neighbors) == 1 se = neighbors[0] assert se.vertex.value == "spam" assert se.weight == 0
def test_get_neighbors_returns_edges_with_custom_weight(): graph = Graph() banana = graph.add_node("banana") apple = graph.add_node("apple") graph.add_edge(apple, banana, 44) neighbors = graph.get_neighbors(apple) neighbor_edge = neighbors[0] assert neighbor_edge.weight == 44
def my_graph(): g = Graph() g.add_vertex('10') g.add_vertex('5') g.add_vertex('9') g.add_vertex('44') g.add_edge('10', '5', 3) g.add_edge('10', '10', 6) g.add_edge('5', '44', 2) g.add_edge('44', '9', 4) g.add_edge('44', '10', 1) g.add_edge('5', '10', 7) g.add_edge('9', '10', 8) return g
def test_add_edge_no_weight(): g = Graph() sv = g.add_node("spam") ev = g.add_node("eggs") ret_val = g.add_edge(sv, ev) assert ret_val is None
def test_get_neighbors_returns_edges_with_default_weight(): graph = Graph() banana = graph.add_node("banana") apple = graph.add_node("apple") graph.add_edge(apple, banana) neighbors = graph.get_neighbors(apple) actual = neighbors[0].weight expected = 0 assert actual == expected
def test_add_edge_sunny(): graph = Graph() start = graph.add_node("start") end = graph.add_node("end") graph.add_edge(start, end) # no fail means a pass # can be more explicit if you like try: graph.add_edge(start, end) except KeyError: pytest.fail("KeyError should not be thrown")
def test_get_neighbors_returns_edges(): graph = Graph() banana = graph.add_node("banana") apple = graph.add_node("apple") graph.add_edge(apple, banana) neighbors = graph.get_neighbors(apple) assert len(neighbors) == 1 neighbor = neighbors[0] assert isinstance(neighbor, Edge) assert neighbor.vertex.value == 'banana'
def test_business_two(): graph = Graph('bidirectional') pandora = graph.add_node('Pandora') arendelle = graph.add_node('Arendelle') metroville = graph.add_node('Metroville') monstroplolis = graph.add_node('Monstroplolis') narnia = graph.add_node('Narnia') naboo = graph.add_node('Naboo') graph.add_edge(pandora, arendelle, 150) graph.add_edge(pandora, metroville, 82) graph.add_edge(arendelle, metroville, 99) graph.add_edge(arendelle, monstroplolis, 42) graph.add_edge(metroville, monstroplolis, 105) graph.add_edge(metroville, narnia, 37) graph.add_edge(metroville, naboo, 26) graph.add_edge(naboo, narnia, 250) graph.add_edge(monstroplolis, naboo, 73) cities = [narnia, arendelle, naboo] actual = business_trip(graph, cities) expected = (False, 0) assert actual == expected
def test_get_neighbors_49(): g = Graph() pv = g.add_node("Pandora") av = g.add_node("Arendelle") mv = g.add_node("Metroville") mov = g.add_node("Monstropolis") nv = g.add_node("Naboo") narv = g.add_node("Narnia") g.add_edge(pv, av, 150) g.add_edge(pv, mv, 82) g.add_edge(av, pv, 150) g.add_edge(av, mov, 42) g.add_edge(av, mv, 99) g.add_edge(mv, av, 99) g.add_edge(mv, pv, 82) g.add_edge(mv, mov, 105) g.add_edge(mv, narv, 37) g.add_edge(mv, nv, 26) g.add_edge(mov, av, 42) g.add_edge(mov, mv, 105) g.add_edge(mov, nv, 73) g.add_edge(nv, mov, 73) g.add_edge(nv, narv, 250) g.add_edge(nv, mv, 26) g.add_edge(narv, mv, 37) g.add_edge(narv, nv, 250) actual = business_trip(g, ["Metroville", "Pandora", "Monstropolis", "Naboo"]) expected = False, "0$" assert actual == expected
def test_depth_traversal_one(): graph = Graph() boston = graph.add_node('Boston') seattle = graph.add_node('Seattle') la = graph.add_node('LA') sf = graph.add_node('SF') chi = graph.add_node('CHI') ny = graph.add_node('NY') graph.add_edge(boston, ny, 82) graph.add_edge(boston, chi, 90) graph.add_edge(ny, chi, 42) graph.add_edge(ny, seattle, 200) graph.add_edge(ny, la, 225) graph.add_edge(ny, sf, 230) graph.add_edge(chi, seattle, 175) graph.add_edge(seattle, sf, 85) graph.add_edge(sf, la, 85) actual = depth_traversal(boston, graph) expected = [boston, chi, seattle, sf, la, ny] assert actual == expected
def test_get_neighbors_45(): g = Graph() pv = g.add_node("Pandora") av = g.add_node("Arendelle") mv = g.add_node("Metroville") mov = g.add_node("Monstropolis") nv = g.add_node("Naboo") narv = g.add_node("Narnia") g.add_edge(pv, av, 150) g.add_edge(pv, mv, 82) g.add_edge(av, mov, 42) g.add_edge(av, mv, 99) g.add_edge(mv, mov, 105) g.add_edge(mv, narv, 37) g.add_edge(mv, nv, 26) g.add_edge(nv, mov, 73) g.add_edge(nv, narv, 250) neighbors = g.get_neighbors(pv) assert len(neighbors) == 2 se = neighbors[0] me = neighbors[1] assert se.vertex.value == "Arendelle" assert me.vertex.value == "Metroville" assert se.weight == 150 assert me.weight == 82
def test_breadth_first(): g = Graph() pandora = g.add_node("Pandora") arendelle = g.add_node("Arendelle") metroville = g.add_node("Metroville") monstropolis = g.add_node("Monstropolis") narnia = g.add_node("Narnia") naboo = g.add_node("Naboo") g.add_edge(pandora, arendelle) g.add_edge(arendelle, pandora) g.add_edge(arendelle, metroville) g.add_edge(metroville, arendelle) g.add_edge(arendelle, monstropolis) g.add_edge(monstropolis, arendelle) g.add_edge(metroville, monstropolis) g.add_edge(monstropolis, metroville) g.add_edge(metroville, narnia) g.add_edge(narnia, metroville) g.add_edge(metroville, naboo) g.add_edge(naboo, metroville) g.add_edge(narnia, naboo) g.add_edge(naboo, narnia) # stretch make more flexible vs. always returning list of vertices vertices = g.breadth_first(pandora) # convert vertices into values for easier testing values = [vertex.value for vertex in vertices] assert values == ["Pandora", "Arendelle", "Metroville", "Monstropolis", "Narnia", "Naboo"]
def test_graph_add_edge_pass(): grappy = Graph() vert_1 = grappy.add_vertex('A') vert_2 = grappy.add_vertex('B') grappy.add_edge(vert_1, vert_2) assert True
def flights_fixture(): flights = Graph() pandora = flights.add_node("Pandora") arendelle = flights.add_node("Arendelle") metroville = flights.add_node("Metroville") narnia = flights.add_node("Narnia") naboo = flights.add_node("Naboo") monstropolis = flights.add_node("Monstropolis") flights.add_edge(pandora, arendelle, 150) flights.add_edge(pandora, metroville, 82) flights.add_edge(arendelle, metroville, 99) flights.add_edge(arendelle, monstropolis, 42) flights.add_edge(metroville, narnia, 37) flights.add_edge(metroville, naboo, 26) flights.add_edge(metroville, monstropolis, 105) flights.add_edge(monstropolis, naboo, 73) flights.add_edge(narnia, naboo, 250) flights.add_edge(arendelle, pandora, 150) flights.add_edge(metroville, pandora, 82) flights.add_edge(metroville, arendelle, 99) flights.add_edge(monstropolis, arendelle, 42) flights.add_edge(narnia, metroville, 37) flights.add_edge(naboo, metroville, 26) flights.add_edge(monstropolis, metroville, 105) flights.add_edge(naboo, monstropolis, 73) flights.add_edge(naboo, narnia, 250) return flights
def test_business_one(): graph = Graph('bidirectional') boston = graph.add_node('Boston') seattle = graph.add_node('Seattl') la = graph.add_node('LA') sf = graph.add_node('SF') chi = graph.add_node('CHI') ny = graph.add_node('NY') graph.add_edge(boston, ny, 82) graph.add_edge(boston, chi, 90) graph.add_edge(ny, chi, 42) graph.add_edge(ny, seattle, 200) graph.add_edge(ny, la, 225) graph.add_edge(ny, sf, 230) graph.add_edge(chi, seattle, 175) graph.add_edge(seattle, sf, 85) graph.add_edge(sf, la, 85) cities = [boston, ny,la] actual = business_trip(graph, cities) expected = (True, 307) assert actual == expected