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
예제 #11
0
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
예제 #17
0
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