Exemplo n.º 1
0
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']
Exemplo n.º 2
0
 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()}
Exemplo n.º 3
0
 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()}
Exemplo n.º 4
0
def test_size():

    graph = Graph()

    graph.add_node('spam')

    expected = 1

    actual = graph.size()

    assert actual == expected
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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
Exemplo n.º 9
0
def test_add_node():

    graph = Graph()

    expected = 'spam'  # a vertex's value that comes back

    actual = graph.add_node('spam').value

    assert actual == expected
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
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
Exemplo n.º 12
0
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
Exemplo n.º 13
0
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')
Exemplo n.º 14
0
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'
    ]
Exemplo n.º 15
0
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)
Exemplo n.º 16
0
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):
Exemplo n.º 17
0
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)