def fully_connected_graph(nodes):
    g = SimpleGraph()
    for node in nodes:
        g.add_node(node)
        for other_node in nodes:
            if other_node is not node:
                g.add_edge(node, other_node)
    return g
def test_has_node():
    """edge added, new node added"""
    g = SimpleGraph()
    g.add_node('a')
    g.add_node('b')
    g.add_node('c')
    g.add_edge('a', 'c')
    g.add_edge('a', 'b')
    assert g.has_node('b')
def test_del_error():
    """error raised when non-existant value deleted"""
    g = SimpleGraph()
    g.add_node('a')
    g.add_node('b')
    g.add_node('c')
    g.add_edge('a', 'c')
    g.add_edge('a', 'b')
    with pytest.raises(KeyError):
        g.del_node('p')
def test_del_edge():
    """other edges preserved when one deleted"""
    g = SimpleGraph()
    g.add_node('a')
    g.add_node('b')
    g.add_node('c')
    g.add_edge('a', 'c')
    g.add_edge('a', 'b')
    g.del_edge('a', 'c')
    assert g.neighbors('a') == {'b': 0}
def test_edges():
    """edges prints correct edges as tuples"""
    g = SimpleGraph()
    g.add_node('a')
    g.add_node('b')
    g.add_node('c')
    g.add_edge('a', 'c')
    g.add_edge('a', 'b')
    assert ('a', 'c') in g.edges()
    assert ('a', 'b') in g.edges()
def test_adjacent_error():
    """error raised when nodes non-existant"""
    g = SimpleGraph()
    g.add_node('a')
    g.add_node('b')
    g.add_node('c')
    g.add_edge('a', 'c')
    g.add_edge('a', 'b')
    with pytest.raises(KeyError):
        g.adjacent('l', 'm')
def test_edge_error():
    """delete non-existant edge"""
    g = SimpleGraph()
    g.add_node('a')
    g.add_node('b')
    g.add_node('c')
    g.add_edge('a', 'c')
    g.add_edge('a', 'b')
    with pytest.raises(KeyError):
        g.del_edge('a', 'z')
def test_del_nodes():
    """nodes are deleted"""
    g = SimpleGraph()
    g.add_node('a')
    g.add_node('b')
    g.add_node('c')
    g.add_edge('a', 'c')
    g.add_edge('a', 'b')
    g.del_node('a')
    assert 'a' not in g.nodes()
    assert g.has_node('a') is False
def test_adjacent():
    """adjacent correctly identify edges, new edge add node"""
    g = SimpleGraph()
    g.add_node('a')
    g.add_node('b')
    g.add_node('c')
    g.add_edge('a', 'd')
    g.add_edge('a', 'f')
    assert 'f' in g.nodes()
    assert g.adjacent('a', 'd')
    assert not g.adjacent('a', 'b')
def test_add_edge():
    """edge added, new node added"""
    g = SimpleGraph()
    g.add_node('a')
    g.add_node('b')
    g.add_node('c')
    g.add_edge('a', 'c')
    g.add_edge('a', 'b')
    g.add_edge('q', 'a')
    assert g.has_node('q')
    assert g.neighbors('q') == {'a': 0}
def test_add_nodes():
    """nodes are added"""
    g = SimpleGraph()
    g.add_node('a')
    g.add_node('b')
    g.add_node('c')
    g.add_edge('a', 'c')
    g.add_edge('a', 'b')
    assert 'a' in g.nodes()
    assert 'b' in g.nodes()
    assert 'c' in g.nodes()
def test_depth():
    g = SimpleGraph()
    g.add_edge('a', 'b')
    g.add_edge('a', 'c')
    g.add_edge('b', 'd')
    g.add_edge('b', 'e')
    g.add_edge('e', 'f')
    g.add_edge('f', 'g')
    assert g.depth_first_traversal('a') == ['a', 'c', 'b', 'e', 'f', 'g', 'd']
def test_depth():
    g = SimpleGraph()
    g.add_edge('a', 'b')
    g.add_edge('a', 'c')
    g.add_edge('b', 'd')
    g.add_edge('b', 'e')
    g.add_edge('e', 'f')
    g.add_edge('f', 'g')
    assert g.depth_first_traversal('a') == ['a', 'c', 'b', 'e', 'f', 'g', 'd']
def test_weighted_edges():
    g = SimpleGraph()
    g.add_edge('a', 'b', 5)
    g.add_edge('a', 'c', 2)
    g.add_edge('b', 'c', 1)
    assert g.dict_graph['a'] == {'b': 5, 'c': 2}
def test_weighted_edges_with_node_delete():
    g = SimpleGraph()
    g.add_edge('a', 'b', 5)
    g.add_edge('a', 'c', 2)
    g.del_node('c')
    assert g.dict_graph['a'] == {'b': 5}
def test_one_loop_depth():
    g = SimpleGraph()
    g.add_edge('a', 'a')
    assert g.depth_first_traversal('a') == ['a']
def test_weighted_edges_with_node_delete():
    g = SimpleGraph()
    g.add_edge('a', 'b', 5)
    g.add_edge('a', 'c', 2)
    g.del_node('c')
    assert g.dict_graph['a'] == {'b': 5}
def test_one_loop_depth():
    g = SimpleGraph()
    g.add_edge('a', 'a')
    assert g.depth_first_traversal('a') == ['a']
Exemple #19
0
class DijkstrasAlgorithmTests(unittest.TestCase):
    def setUp(self):
        self.dg = SimpleGraph()
        self.one = Vertex('one')
        self.two = Vertex('two')
        self.three = Vertex('three')
        self.four = Vertex('four')
        self.five = Vertex('five')
        self.six = Vertex('six')
        self.disconnected = Vertex('disconnected')
        self.dg.add_vertex(self.one)
        self.dg.add_vertex(self.two)
        self.dg.add_vertex(self.three)
        self.dg.add_vertex(self.four)
        self.dg.add_vertex(self.five)
        self.dg.add_vertex(self.six)
        self.dg.add_vertex(self.disconnected)
        self.dg.add_edge(self.one, self.two, 7.0)
        self.dg.add_edge(self.two, self.one, 7.0)
        self.dg.add_edge(self.one, self.six, 14.0)
        self.dg.add_edge(self.six, self.one, 14.0)
        self.dg.add_edge(self.one, self.three, 9.0)
        self.dg.add_edge(self.three, self.one, 9.0)
        self.dg.add_edge(self.two, self.three, 10.0)
        self.dg.add_edge(self.three, self.two, 10.0)
        self.dg.add_edge(self.two, self.four, 15.0)
        self.dg.add_edge(self.four, self.two, 15.0)
        self.dg.add_edge(self.three, self.four, 11.0)
        self.dg.add_edge(self.four, self.three, 11.0)
        self.dg.add_edge(self.three, self.six, 2.0)
        self.dg.add_edge(self.six, self.three, 2.0)
        self.dg.add_edge(self.four, self.five, 6.0)
        self.dg.add_edge(self.five, self.four, 6.0)
        self.dg.add_edge(self.five, self.six, 9.0)
        self.dg.add_edge(self.six, self.five, 9.0)
    def test_dijkstras_algo(self):
        self.assertTrue(
            self.dg.dijkstras_algorithm(self.one, self.five)
            == (20.0, [self.one, self.three, self.six, self.five]))
    def test_dijkstras_unconnected(self):
        self.assertTrue(
            self.dg.dijkstras_algorithm(self.one, self.disconnected)
            == (math.inf, []))
Exemple #20
0
class SimpleGraphTests(unittest.TestCase):
    def setUp(self):
        self.g = SimpleGraph()
        self.a = Vertex('a')
        self.b = Vertex('b')
        self.c = Vertex('c')
        self.d = Vertex('d')
        self.e = Vertex('e')
        self.f = Vertex('f')
        self.g.add_vertex(self.a)
        self.g.add_vertex(self.b)
        self.g.add_vertex(self.c)
        self.g.add_vertex(self.d)
        self.g.add_vertex(self.e)
        self.g.add_edge(self.a, self.b)
        self.g.add_edge(self.b, self.c)
        self.g.add_edge(self.c, self.b)
        self.g.add_edge(self.c, self.d)
    
    def test_is_empty(self):
        self.assertFalse(self.g.is_empty())
        self.g.remove_edge(self.a, self.b)
        self.g.remove_edge(self.b, self.c)
        self.g.remove_edge(self.c, self.b)
        self.g.remove_edge(self.c, self.d)
        self.g.remove_vertex(self.a)
        self.g.remove_vertex(self.b)
        self.g.remove_vertex(self.c)
        self.g.remove_vertex(self.d)
        self.g.remove_vertex(self.e)
        self.assertTrue(self.g.is_empty())
    
    def test_contains_vertex(self):
        self.assertTrue(self.g.contains_vertex(self.a))
        self.assertFalse(self.g.contains_vertex(self.f))
        
    def test_size(self):
        self.assertTrue(self.g.size() == (5, 4))
        self.g.add_edge(self.a, self.e)
        self.assertTrue(self.g.size() == (5, 5))
        self.g.remove_edge(self.a, self.e)
        self.assertTrue(self.g.size() == (5, 4))
        self.g.add_edge(self.a, self.b)
        self.assertTrue(self.g.size() == (5, 4))
        
    def test_get_neighbors(self):
        b_neighbors = self.g.get_neighbors(self.b)
        self.assertTrue(len(b_neighbors) == 2)
        self.assertTrue(self.a in b_neighbors)
        self.assertTrue(self.c in b_neighbors)
        self.assertTrue(self.g.is_neighbor(self.a, self.b))
        self.assertFalse(self.g.is_neighbor(self.a, self.d))
        self.assertTrue(all([not self.g.is_neighbor(self.e, v) for v in self.g.verts]))
        self.g.add_vertex(self.f)
        self.assertTrue(len(self.g.get_neighbors(self.f)) == 0)
        
    def test_is_reachable(self):
        self.assertTrue(self.g.is_reachable(self.a, self.d))
        self.assertTrue(self.g.is_reachable(self.a, self.d))
        self.assertFalse(self.g.is_reachable(self.d, self.a))
        self.assertFalse(self.g.is_reachable(self.a, self.e))
        self.g.remove_vertex(self.b)
        self.assertTrue(self.g.size() == (4, 1))
        self.assertFalse(self.g.is_reachable(self.a, self.d))
def test_weighted_edges():
    g = SimpleGraph()
    g.add_edge('a', 'b', 5)
    g.add_edge('a', 'c', 2)
    g.add_edge('b', 'c', 1)
    assert g.dict_graph['a'] == {'b': 5, 'c': 2}