Ejemplo n.º 1
0
class GrafoTeste(unittest.TestCase):

    def setUp(self):
        self.grafo = Graph()

    def adicionar_vertices(self):
        a = Vertice('a')
        b = Vertice('b')
        c = Vertice('c')
        conj = {'a': a, 'b': b, 'c': c}
        for key in conj:
            self.grafo.adicionar_vertice(conj[key])
        return conj

    def teste_adicionar_vertice_aumenta_tamanho(self):
        self.grafo.adicionar_vertice(Vertice('a'))
        self.assertEqual(self.grafo.ordem(), 1)

    def teste_remover_vertice_diminui_tamanho(self):
        a = Vertice('a')
        self.grafo.adicionar_vertice(a)
        self.grafo.remover_vertice(a)
        self.assertEqual(self.grafo.ordem(), 0)

    def teste_remover_aresta_inexistente(self):
        a = Vertice('a')
        b = Vertice('b')
        self.grafo.adicionar_vertice(a)
        self.grafo.adicionar_vertice(b)
        self.assertRaises(ArestaNaoExisteException, self.grafo.desconectar, a, b)

    def teste_vertice_nao_pode_ser_conectado_com_ele_mesmo(self):
        a = Vertice('a')
        self.grafo.adicionar_vertice(a)
        self.assertRaises(VerticeNaoPodeSeConectarComEleMesmoException, self.grafo.conectar, a,a)

    def teste_remover_vertice_remove_arestas_conectadas_nele(self):
        conj = self.adicionar_vertices()
        self.grafo.conectar(conj['a'], conj['b'])
        self.grafo.conectar(conj['b'], conj['c'])
        self.grafo.remover_vertice(conj['a'])
        self.assertFalse(self.grafo.estao_conectados(conj['a'], conj['b']))
        self.assertTrue(self.grafo.estao_conectados(conj['b'], conj['c']))

    def teste_conectar_dois_vertices(self):
        a = Vertice('a')
        b = Vertice('b')
        self.grafo.adicionar_vertice(a)
        self.grafo.adicionar_vertice(b)
        self.grafo.conectar(a, b)
        self.assertTrue(self.grafo.estao_conectados(a, b))

    def teste_ordem(self):
        self.adicionar_vertices()
        self.assertEqual(self.grafo.ordem(), 3)

    def teste_obter_todos_os_vertices(self):
        conj = self.adicionar_vertices()
        self.assertDictEqual(self.grafo.vertices(), conj)

    def teste_adjacentes(self):
        conj = self.adicionar_vertices()
        a = conj['a']
        b = conj['b']
        c = conj['c']
        self.grafo.conectar(a, b)
        self.grafo.conectar(a, c)
        self.assertSetEqual(self.grafo.adjacentes(a), {b, c})

    def teste_grau_de_vertice(self):
        conj = self.adicionar_vertices()
        a = conj['a']
        b = conj['b']
        c = conj['c']
        self.grafo.conectar(a, b)
        self.grafo.conectar(a, c)
        self.assertEqual(self.grafo.grau(a), 2)

    def teste_grafo_vazio_nao_e_regular(self):
        grafo = Graph()
        self.assertFalse(grafo.e_regular())

    def teste_nao_regular(self):
        conj = self.adicionar_vertices()
        self.grafo.conectar(conj['a'], conj['b'])
        self.grafo.conectar(conj['a'], conj['c'])
        self.assertFalse(self.grafo.e_regular())

    def teste_e_regular(self):
        conj = self.adicionar_vertices()
        self.grafo.conectar(conj['a'], conj['b'])
        self.grafo.conectar(conj['a'], conj['c'])
        self.grafo.conectar(conj['b'], conj['c'])
        self.assertTrue(self.grafo.e_regular())

    def teste_e_completo(self):
        conj = self.adicionar_vertices()
        for v1 in conj:
            for v2 in conj:
                if v1 != v2:
                    self.grafo.conectar(conj[v1], conj[v2])
        self.assertTrue(self.grafo.e_completo())

    def teste_nao_completo(self):
        conj = self.adicionar_vertices()
        for v1 in conj:
            for v2 in conj:
                if v1 != v2:
                    self.grafo.conectar(conj[v1], conj[v2])
        self.grafo.desconectar(conj['a'], conj['b'])
        self.assertFalse(self.grafo.e_completo())

    def teste_fecho_transitivo_com_ciclo(self):
        a = Vertice('a')
        b = Vertice('b')
        c = Vertice('c')
        d = Vertice('d')

        self.grafo.adicionar_vertice(a)
        self.grafo.adicionar_vertice(b)
        self.grafo.adicionar_vertice(c)
        self.grafo.adicionar_vertice(d)
        self.grafo.adicionar_vertice(Vertice('e'))
        self.grafo.adicionar_vertice(Vertice('f'))

        self.grafo.conectar(a, b)
        self.grafo.conectar(a, c)
        self.grafo.conectar(c, b)
        self.grafo.conectar(c, d)
        self.grafo.conectar(Vertice('e'), Vertice('f'))

        self.assertSetEqual(self.grafo.fecho_transitivo(a), {a, b, c, d})

    def teste_fecho_transitivo_sem_ciclo(self):
        a = Vertice('a')
        b = Vertice('b')
        c = Vertice('c')
        d = Vertice('d')

        self.grafo.adicionar_vertice(a)
        self.grafo.adicionar_vertice(b)
        self.grafo.adicionar_vertice(c)
        self.grafo.adicionar_vertice(d)
        self.grafo.adicionar_vertice(Vertice('e'))
        self.grafo.adicionar_vertice(Vertice('f'))

        self.grafo.conectar(a, b)
        self.grafo.conectar(a, c)
        self.grafo.conectar(c, d)
        self.grafo.conectar(Vertice('e'), Vertice('f'))

        self.assertSetEqual(self.grafo.fecho_transitivo(a), {a, b, c, d})

    def teste_e_conexo(self):
        a = Vertice('a')
        b = Vertice('b')
        c = Vertice('c')
        d = Vertice('d')


        for vertice in {a, b, c, d}:
            self.grafo.adicionar_vertice(vertice)

        self.grafo.conectar(a, b)
        self.grafo.conectar(a, c)
        self.grafo.conectar(c, b)
        self.grafo.conectar(c, d)

        self.assertTrue(self.grafo.e_conexo())

    def teste_nao_e_conexo(self):
        a = Vertice('a')
        b = Vertice('b')
        c = Vertice('c')
        d = Vertice('d')
        e = Vertice('e')

        for vertice in {a, b, c, d, e}:
            self.grafo.adicionar_vertice(vertice)

        self.grafo.conectar(a, b)
        self.grafo.conectar(a, c)
        self.grafo.conectar(c, b)
        self.grafo.conectar(c, d)

        self.assertFalse(self.grafo.e_conexo())

    def teste_e_arvore(self):
        a = Vertice('a')
        b = Vertice('b')
        c = Vertice('c')
        d = Vertice('d')
        e = Vertice('e')
        f = Vertice('f')

        for vertice in {a, b, c, d, e, f}:
            self.grafo.adicionar_vertice(vertice)

        self.grafo.conectar(a, b)
        self.grafo.conectar(a, d)
        self.grafo.conectar(d, c)
        self.grafo.conectar(d, f)
        self.grafo.conectar(c, e)

        self.assertTrue(self.grafo.e_arvore())

    def teste_nao_e_arvore(self):
        a = Vertice('a')
        b = Vertice('b')
        c = Vertice('c')
        d = Vertice('d')
        e = Vertice('e')
        f = Vertice('f')

        for vertice in {a, b, c, d, e, f}:
            self.grafo.adicionar_vertice(vertice)

        self.grafo.conectar(a, b)
        self.grafo.conectar(a, c)
        self.grafo.conectar(c, b)
        self.grafo.conectar(c, d)
        self.grafo.conectar(e, f)

        self.assertFalse(self.grafo.e_arvore())

    def teste_obter_vertice_maior_grau(self):
        a = Vertice('a')
        b = Vertice('b')
        c = Vertice('c')
        d = Vertice('d')

        for vertice in {a,b,c,d}:
            self.grafo.adicionar_vertice(vertice)

        self.grafo.conectar(a, b)
        self.grafo.conectar(a, c)
        self.grafo.conectar(a, d)
        self.grafo.conectar(b, d)

        self.assertEqual(self.grafo.vertice_maior_grau().nome, a.nome)

    def teste_colocaracao(self):
        a = Vertice('a')
        b = Vertice('b')
        c = Vertice('c')
        d = Vertice('d')
        e = Vertice('e')
        f = Vertice('f')
        g = Vertice('g')
        h = Vertice('h')

        for vertice in {a, b, c, d, e, f, g, h}:
            self.grafo.adicionar_vertice(vertice)

        self.grafo.conectar(a, b)
        self.grafo.conectar(a, h)
        self.grafo.conectar(b, c)
        self.grafo.conectar(b, h)
        self.grafo.conectar(c, d)
        self.grafo.conectar(d, e)
        self.grafo.conectar(d, f)
        self.grafo.conectar(e, f)
        self.grafo.conectar(f, g)
        self.grafo.conectar(h, d)

        self.assertGreaterEqual(self.grafo.numero_cromatico(), 3)
Ejemplo n.º 2
0
 def teste_grafo_vazio_nao_e_regular(self):
     grafo = Graph()
     self.assertFalse(grafo.e_regular())