def test_valid_with_weights(): name1 = Vertex._make_test_vertex() name2 = Vertex._make_test_vertex() s = StringIO("2\n{0}\n{1}\n{0}|{1}|5\n{1}|{0}|2".format(name1, name2)) g = graph_from_file(s) assert g.size() == 2 assert g.is_connected()
def test_has_cycle_two_vertices_linked(): a = Vertex(Vertex._make_test_vertex()) b = Vertex(Vertex._make_test_vertex()) a.add_edge(Edge(b)) b.add_edge(Edge(a)) g = Graph([a, b]) assert g.has_cycle()
def test_top_sort_cycle(): a = Vertex(Vertex._make_test_vertex()) b = Vertex(Vertex._make_test_vertex()) a.add_edge(Edge(b)) b.add_edge(Edge(a)) g = Graph([a, b]) assert_raises(ValueError, g.top_sort)
def test_extra_pipes(): name1 = Vertex._make_test_vertex() name2 = Vertex._make_test_vertex() s = StringIO("2\n{0}\n{1}\n{0}|{1}|5|2\n{1}|{0}|2|5".format(name1, name2)) g = graph_from_file(s) assert g.size() == 2 assert g.is_connected()
def test_is_connected_two_doubly_connected(): a = Vertex(Vertex._make_test_vertex()) b = Vertex(Vertex._make_test_vertex()) a.add_edge(Edge(b)) b.add_edge(Edge(a)) g = Graph([a, b]) assert g.is_connected()
def test_no_edges(): name1 = Vertex._make_test_vertex() name2 = Vertex._make_test_vertex() s = StringIO("2\n{}\n{}".format(name1, name2)) g = graph_from_file(s) assert g.size() == 2 assert not g.is_connected()
def test_top_sort_chain(): a = Vertex(Vertex._make_test_vertex()) b = Vertex(Vertex._make_test_vertex()) c = Vertex(Vertex._make_test_vertex()) a.add_edge(Edge(b)) b.add_edge(Edge(c)) g = Graph([a, b, c]) assert g.top_sort() == [a, b, c]
def test_find_path_ignores_weights(): a = Vertex(Vertex._make_test_vertex()) b = Vertex(Vertex._make_test_vertex()) a.add_edge(Edge(b, 1)) c = Vertex(Vertex._make_test_vertex()) a.add_edge(Edge(c, 100)) b.add_edge(Edge(c, 1)) assert find_path(a, c) == [a, c]
def test_vertex_valid_edges(): """Test Vertex creation with a list of already-existing Edges.""" b = Vertex(Vertex._make_test_vertex()) c = Vertex(Vertex._make_test_vertex()) d = Edge(b) e = Edge(c) a = Vertex(Vertex._make_test_vertex(), [d, e]) assert a.edges == [d, e]
def test_has_cycle_indirect(): a = Vertex(Vertex._make_test_vertex()) b = Vertex(Vertex._make_test_vertex()) c = Vertex(Vertex._make_test_vertex()) a.add_edge(Edge(b)) b.add_edge(Edge(c)) c.add_edge(Edge(a)) g = Graph([a, b, c]) assert g.has_cycle()
def test_is_connected_three_vert_two_connections(): a = Vertex(Vertex._make_test_vertex()) b = Vertex(Vertex._make_test_vertex()) c = Vertex(Vertex._make_test_vertex()) a.add_edge(Edge(b)) b.add_edge(Edge(c)) c.add_edge(Edge(a)) g = Graph([a, b, c]) assert g.is_connected()
def test_has_cycle_implicit(): """A Vertex is accessible to the Graph but not explicitly part of it.""" a = Vertex(Vertex._make_test_vertex()) b = Vertex(Vertex._make_test_vertex()) c = Vertex(Vertex._make_test_vertex()) a.add_edge(Edge(b)) b.add_edge(Edge(c)) c.add_edge(Edge(a)) g = Graph([a, b]) assert g.has_cycle()
def test_edge_weight(): a = Vertex(Vertex._make_test_vertex()) b = Edge(a, 10) assert b.weight == 10
def test_vertex_repr(): s = Vertex._make_test_vertex() a = Vertex(s) assert a.__repr__() == "Vertex: {}".format(s)
def test_make_test_vertex(): s = Vertex._make_test_vertex() a = Vertex(s) assert a.name == s
def test_graph_duplicate_vertex(): a = Vertex(Vertex._make_test_vertex()) g = Graph([a, a]) assert g.size() == 1
def test_graph_add_new_vertex_new(): a = Vertex(Vertex._make_test_vertex()) g = Graph([a]) g.add_vertex(Vertex(Vertex._make_test_vertex())) assert g.size() == 2
def test_graph_normal_set(): a = Vertex(Vertex._make_test_vertex()) b = Vertex(Vertex._make_test_vertex()) g = Graph([a, b]) assert g.size() == 2
def test_top_sort_two_single_vertices(): a = Vertex(Vertex._make_test_vertex()) b = Vertex(Vertex._make_test_vertex()) g = Graph([a, b]) assert g.top_sort() in [[a, b], [b, a]]
def test_top_sort_single(): a = Vertex(Vertex._make_test_vertex()) g = Graph([a]) assert g.top_sort() == [a]
def test_is_connected_single(): g = Graph([Vertex(Vertex._make_test_vertex())]) assert g.is_connected()
def test_is_connected_two_single(): a = Vertex(Vertex._make_test_vertex()) b = Vertex(Vertex._make_test_vertex()) g = Graph([a, b]) assert not g.is_connected()
def test_has_cycle_single_no_loop(): a = Vertex(Vertex._make_test_vertex()) g = Graph([a]) assert not g.has_cycle()
def test_has_cycle_self_loop(): a = Vertex(Vertex._make_test_vertex()) a.add_edge(Edge(a)) g = Graph([a]) assert g.has_cycle()
def test_edge_invalid_weight(): a = Vertex(Vertex._make_test_vertex()) assert_raises(ValueError, Edge, a, "test")
def test_top_sort_two_linked_vertices(): a = Vertex(Vertex._make_test_vertex()) b = Vertex(Vertex._make_test_vertex()) a.add_edge(Edge(b)) g = Graph([a, b]) assert g.top_sort() == [a, b]
def test_add_edge_self_loop(): a = Vertex(Vertex._make_test_vertex()) a.add_edge(Edge(a)) assert len(a.edges) == 1 assert a in [e.vertex for e in a.edges]
def test_graph_add_invalid_vertex(): g = Graph([Vertex(Vertex._make_test_vertex())]) assert_raises(TypeError, g.add_vertex, "String name")
def test_size(): g = Graph([Vertex(Vertex._make_test_vertex())]) assert g.size() == len(g.vertices)
def test_is_connected_two_vert_one_edge(): a = Vertex(Vertex._make_test_vertex()) b = Vertex(Vertex._make_test_vertex()) a.add_edge(Edge(b)) g = Graph([a, b]) assert not g.is_connected()