def test_add_edge():
    graph = Graph(Edge(1, 2, 1))
    new_graph = graph + Edge(1, 3, 4)
    assert new_graph.size == 2

    with pytest.raises(NotImplementedError):
        graph + 2
def test_edge_equality():
    assert Edge(1, 2, 3) == Edge(1, 2, 3)
    assert Edge(1, 2, 3) == Edge(2, 1, 3)
    assert Edge(1, 2, 3) != Edge(1, 2, 4)
    assert Edge(1, 2, 3) != Edge(1, 3, 3)
    with pytest.raises(NotImplementedError):
        Edge(1, 2, 2) == 2
def test_edge_comparisons():
    assert Edge(1, 2, 3) <= Edge(2, 1, 3)
    assert Edge(1, 2, 2) < Edge(1, 3, 3)
    with pytest.raises(NotImplementedError):
        Edge(1, 2, 2) < 2
    with pytest.raises(NotImplementedError):
        Edge(1, 2, 2) <= 2
def test_prims():
    input_graph = Graph(Edge(1, 2, 1), Edge(1, 3, 4), Edge(1, 4, 3),
                        Edge(2, 4, 2), Edge(3, 4, 5))
    expected_graph = Graph(Edge(1, 2, 1), Edge(1, 3, 4), Edge(2, 4, 2))
    actual_graph = prims(input_graph)
    assert actual_graph == expected_graph
def test_graph_ends():
    graph = Graph(Edge(1, 2, 1), Edge(1, 3, 4), Edge(1, 4, 3), Edge(2, 4, 2),
                  Edge(3, 4, 5))
    assert graph.ends == {2, 3, 4}
def test_graph_starts():
    graph = Graph(Edge(1, 2, 1), Edge(1, 3, 4), Edge(1, 4, 3), Edge(2, 4, 2),
                  Edge(3, 4, 5))
    assert graph.starts == {1, 2, 3}
def test_graph_vertices():
    graph = Graph(Edge(1, 2, 1), Edge(1, 3, 4))
    assert graph.vertices == {1, 2, 3}
def test_graph_cost():
    graph = Graph(Edge(1, 2, 1), Edge(1, 3, 4))
    assert graph.cost == 5
def test_graph_setting():
    graph = Graph(Edge(1, 2, 1), Edge(1, 3, 4))
    new_edge = Edge(1, 3, 5)
    graph[1] = new_edge
    assert graph[1] == new_edge
def test_graph_deletion():
    graph = Graph(Edge(1, 2, 1), Edge(1, 3, 4))
    del graph[0]
    assert graph.size == 1
def test_graph_indexing():
    graph = Graph(Edge(1, 2, 1), Edge(1, 3, 4))
    assert graph[0] == Edge(1, 2, 1)
    assert graph[-1] == Edge(1, 3, 4)
def test_graph_equality():
    assert Graph(Edge(1, 2, 1), Edge(1, 3,
                                     4)) == Graph(Edge(1, 3, 4), Edge(1, 2, 1))
    assert Graph(Edge(1, 2, 1), Edge(1, 3,
                                     4)) == Graph(Edge(1, 3, 4), Edge(2, 1, 1))
    assert Graph(Edge(1, 2, 1), Edge(1, 3, 4)) != Graph(
        Edge(1, 3, 4), Edge(1, 2, 1), Edge(1, 2, 1))
    with pytest.raises(NotImplementedError):
        Graph(Edge(1, 2, 1), Edge(1, 3, 4)) == 2
def test_graph_iterable():
    graph = Graph(Edge(1, 2, 1), Edge(1, 3, 4), Edge(1, 4, 3), Edge(2, 4, 2),
                  Edge(3, 4, 5))
    for edge in graph:
        assert isinstance(edge, Edge)