예제 #1
0
 def test_regular_edges_works_with_three_vertices(self):
     """to build .add_regular_edges,
     we'll need a way tp count a Vertex's 
     number of edges"""
     vertices = [Vertex('a'), Vertex('b'), Vertex('c')]
     g = Graph(vertices, [])
     g.add_regular_edges()
     self.assertTrue(len(g.edges()) == 3)
     self.assertTrue(g.is_regular())
예제 #2
0
    def test_add_all_edges(self):
        """Add edges foe each node"""
        empty_g = Graph()

        letters = ['l', 'm', 'o']
        for l in letters:
            empty_g.add_vertex(Vertex(l))

        empty_g.add_all_edges()
        self.assertTrue(len(empty_g.edges()) == 3)
예제 #3
0
 def test_regular_edges_works_with_six_vertices(self):
     """to build .add_regular_edges,
     we'll need a way tp count a Vertex's 
     number of edges"""
     import string
     six_letters = [c for c in string.ascii_lowercase][:6]
     vertices = [Vertex(l) for l in six_letters]
     g = Graph(vertices, [])
     g.add_regular_edges()
     #pp = pprint.PrettyPrinter()
     #pp.pprint(g)
     self.assertTrue(len(g.edges()) == 6)
     self.assertTrue(g.is_regular())
예제 #4
0
class TestGraph(unittest.TestCase):
    """
    testing graph class from Think Complexity
    """
    def setUp(self):
        logging.basicConfig(
            #filename ="/tmp/python.log",
            format="%(levelname)-10s %(asctime)s %(filename)s %(lineno)d %(message)s",
            level=logging.DEBUG
        )
        self.log = logging.getLogger(sys.argv[0])

        self.v = Vertex('v')
        self.w = Vertex('w')
        self.e = Edge(self.v, self.w)

        self.g = Graph([self.v, self.w], [self.e])
        
    def test_get_edge_returns_edge(self):
        q = Vertex('q')
        e2 = Edge(self.v, q)
        self.g.add_vertex(q)
        self.g.add_edge(e2)

        edge = self.g.get_edge(self.v, self.w)
        self.assertTrue(edge == self.e)

    #this one was giving me trouble
    def test_edges_returns_edges(self):
        expected = [self.e]
        self.assertEqual(self.g.edges(), expected)

    def test_vertices_should_return_vertices(self):
        self.assertTrue(self.v in self.g.vertices() \
                and self.w in self.g.vertices() \
                and len(self.g.vertices()) == 2)

    def test_get_edge_returns_none_for_missing_edge(self):
        """look for an edge that isn't there"""
        x = Vertex('x')
        edge = self.g.get_edge(x, self.w)
        self.assertTrue(edge == None)

    def test_remove_edge_removes_edge(self):
        """delete an edge"""
        self.g.remove_edge(self.e)
        self.assertTrue(self.g.get_edge(self.v, self.w) == None)

    def test_equality_of_edges(self):
        e1 = Edge(self.v, self.w) 
        e2 = Edge(self.w, self.v) 
        self.assertEquals(e1, e2)

    def test_out_edges(self):
        """Test that you get edges attached 
        to a vertex"""
        q = Vertex('q')
        e2 = Edge(self.v, q)
        self.g.add_vertex(q)
        self.g.add_edge(e2)

        self.assertTrue(self.e in self.g.out_edges(self.v), [self.e, e2])
        self.assertTrue(e2 in self.g.out_edges(self.v), [self.e, e2])
        self.assertTrue(len(self.g.out_edges(self.v)) == 2)
    
    def test_out_vertices(self):
        """Need this for the random graph"""
        x = Vertex('x')
        y = Vertex('y')
        z = Vertex('z')
        a = Vertex('a')
        edge_xy = Edge(x, y) 
        edge_ay = Edge(a, y) 
        g = Graph([x, y, z, a])
        g.add_edge(edge_ay)
        g.add_edge(edge_xy)

        self.assertTrue(len(g.out_vertices(y)) == 2)
        self.assertTrue(x in g.out_vertices(y))
        self.assertTrue(a in g.out_vertices(y))

    def test_add_all_edges(self):
        """Add edges foe each node"""
        empty_g = Graph()

        letters = ['l', 'm', 'o']
        for l in letters:
            empty_g.add_vertex(Vertex(l))

        empty_g.add_all_edges()
        self.assertTrue(len(empty_g.edges()) == 3)

    def test_regular_edges_works_with_6_vertices(self):
        """to build .add_regular_edges,
        we'll need a way tp count a Vertex's 
        number of edges"""
        vertices = [Vertex('x'), Vertex('y'), Vertex('z'), Vertex('a'), Vertex('b')]
        g = Graph(vertices, [])
        g.add_regular_edges()
        self.assertTrue(len(g.edges()) == 5)
        self.assertTrue(g.is_regular())

    def test_regular_edges_works_with_three_vertices(self):
        """to build .add_regular_edges,
        we'll need a way tp count a Vertex's 
        number of edges"""
        vertices = [Vertex('a'), Vertex('b'), Vertex('c')]
        g = Graph(vertices, [])
        g.add_regular_edges()
        self.assertTrue(len(g.edges()) == 3)
        self.assertTrue(g.is_regular())

    def test_regular_edges_works_with_six_vertices(self):
        """to build .add_regular_edges,
        we'll need a way tp count a Vertex's 
        number of edges"""
        import string
        six_letters = [c for c in string.ascii_lowercase][:6]
        vertices = [Vertex(l) for l in six_letters]
        g = Graph(vertices, [])
        g.add_regular_edges()
        #pp = pprint.PrettyPrinter()
        #pp.pprint(g)
        self.assertTrue(len(g.edges()) == 6)
        self.assertTrue(g.is_regular())

    def test_regular_edges_fail_when_edges_exist(self):
        """should raise exception when edge exists"""
        vertices = [Vertex('a'), Vertex('b')]
        e = Edge(*vertices)
        g = Graph(vertices)
        g.add_edge(e)

        with self.assertRaises(Exception):
            g.add_regular_edges()

    def test_choose_method(self):
        """The object should choose the righ method
        for populating edges based on graph rules"""
        g = Graph()
        self.assertFalse(g.choose_method(1, 1))
        self.assertEquals(g.choose_method(1, 2), g.add_all_edges)
        with self.assertRaises(Exception):
            g.choose_method(2, 2)
    
    def test_is_regular_should_return_true_for_regular(self):
        """Should return true when each node has the
        same number of edges"""
        vertices = [Vertex('a'), Vertex('b'), Vertex('9')]
        g = Graph(vertices, [])
        g.add_regular_edges()
        self.assertTrue(g.is_regular())

    def test_is_regular_should_return_false_for_nonregular(self):
        """Should return false when each node has the
        same number of edges"""
        vertices = Vertex('a'), Vertex('c')
        g = Graph(vertices, [])
        b = Vertex('b')
        g.add_vertex(b)
        e = Edge(b, vertices[1])
        g.add_edge(e)
        self.assertFalse(g.is_regular())

    def test_is_connected_sees_connected_graph(self):
        """a graph is connected if there is a path
        from every node to every other node"""
        a, b, c, d  = Vertex('a'), Vertex('b'), Vertex('c'), Vertex('d')
        g = Graph([a, b, c, d]) 
        g.add_edge(Edge(a, b))
        g.add_edge(Edge(b, c))
        g.add_edge(Edge(c, d))
        g.add_edge(Edge(d, a))
        self.assertTrue(g.is_connected())

    def test_is_connected_sees_non_connected_graph(self):
        a, b, c, d  = Vertex('a'), Vertex('b'), Vertex('c'), Vertex('d')
        e = Vertex('e')
        g = Graph([a, b, c, d, e]) 
        g.add_edge(Edge(a, b))
        g.add_edge(Edge(b, c))
        g.add_edge(Edge(c, d))
        g.add_edge(Edge(d, a))
        self.assertFalse(g.is_connected())