Exemplo n.º 1
0
class GraphTest (unittest.TestCase):

    def setUp(self):
        self.sample_graph = DirectedGraph()

    def test_graph_init(self):
        self.assertEqual(self.sample_graph.graph, {})

    def test_add_edge(self):
        self.sample_graph.add_edge("A", "B")
        self.assertIn("A", self.sample_graph.graph)
        self.assertIn("B", self.sample_graph.graph["A"])

        self.sample_graph.add_edge("A", "D")
        self.assertIn("A", self.sample_graph.graph)
        self.assertIn("D", self.sample_graph.graph["A"])

        self.sample_graph.add_edge("B", "C")
        self.assertIn("A", self.sample_graph.graph)
        self.assertIn("B", self.sample_graph.graph["A"])
        self.assertIn("B", self.sample_graph.graph)
        self.assertIn("C", self.sample_graph.graph["B"])

    def test_get_neighbours_for(self):
        self.sample_graph.add_edge("A", "B")
        self.sample_graph.add_edge("A", "D")
        self.assertEqual(["B", "D"], self.sample_graph.get_neighbours_for("A"))

    def test_path_between(self):
        self.sample_graph.add_edge("A", "B")
        self.sample_graph.add_edge("B", "C")
        self.assertTrue(self.sample_graph.path_between("A", "C"))
        self.assertFalse(self.sample_graph.path_between("A", "D"))
        self.assertFalse(self.sample_graph.path_between("A", "E"))

    def test_to_str(self):
        self.sample_graph.add_edge("A", "B")
        self.assertEqual(self.sample_graph.to_str(), "A ---> ['B']")
Exemplo n.º 2
0
class DirectedGraphTests(unittest.TestCase):
    def setUp(self):
        self.graph = DirectedGraph()

    def test_add_edge_non_existing_nodes(self):
        self.graph.add_edge("Ionko", "Dingo")
        self.assertEqual(self.graph.nodes, {"Ionko": ["Dingo"], "Dingo": []})

    def test_add_edge_only_one_existing_node(self):
        self.graph.add_edge("Ionko", "Dingo")
        self.graph.add_edge("Dingo", "Penka")
        self.assertEqual(self.graph.nodes, {
            "Ionko": ["Dingo"],
            "Dingo": ["Penka"],
            "Penka": []
        })

    def test_add_edge_existing_nodes(self):
        self.graph.add_edge("Ionko", "Dingo")
        self.graph.add_edge("Dingo", "Ionko")
        self.assertEqual(self.graph.nodes, {
            "Ionko": ["Dingo"],
            "Dingo": ["Ionko"]
        })

    def test_get_neighbours_for_existing_nodes(self):
        self.graph.add_edge("Ionko", "Dingo")
        self.assertEqual(self.graph.get_neighbours_for("Ionko"), ["Dingo"])

    def test_get_neighbours_for_non_existing_nodes(self):
        self.assertEqual(self.graph.get_neighbours_for("ASDF"), [])

    def test_path_between_direct_neighbours(self):
        self.graph.add_edge("Ionko", "Dingo")
        self.assertTrue(self.graph.path_between("Ionko", "Dingo"))
        self.assertFalse(self.graph.path_between("Dingo", "Ionko"))

    def test_path_between_cyclic_neighbours(self):
        self.graph.add_edge("1", "2")
        self.graph.add_edge("2", "3")
        self.graph.add_edge("2", "4")
        self.graph.add_edge("4", "5")
        self.graph.add_edge("4", "6")

        self.graph.add_edge("3", "2")

        self.assertTrue(self.graph.path_between("2", "6"))
        self.assertFalse(self.graph.path_between("6", "2"))

    def test_path_between_indirect_neighbours(self):
        self.graph.add_edge("1", "2")
        self.graph.add_edge("2", "3")
        self.graph.add_edge("2", "4")
        self.graph.add_edge("4", "5")
        self.graph.add_edge("4", "6")

        self.assertTrue(self.graph.path_between("1", "6"))
        self.assertFalse(self.graph.path_between("6", "5"))
Exemplo n.º 3
0
class GraphTests(unittest.TestCase):
    def setUp(self):
        self.graph = DirectedGraph()

    def test_add_node(self):
        self.graph.add_node("Rado")
        self.assertTrue(self.graph.has_node("Rado"))

    def test_add_edge(self):
        self.graph.add_edge("Rado", "Ivo")
        self.assertEqual(self.graph.info, {"Rado": ["Ivo"], "Ivo": []})

    def test_get_neighbors_for(self):
        self.graph.add_edge("Rado", "Gosho")
        self.assertEqual(self.graph.get_neighbors_for("Rado"), ["Gosho"])

    def test_path_between(self):
        self.graph.add_edge("Rado", "Gosho")
        self.graph.add_edge("Rado", "Ani")
        self.graph.add_edge("Gosho", "Ivo")
        self.assertTrue(self.graph.path_between("Rado", "Ani"))
        self.assertFalse(self.graph.path_between("Ani", "Ivo"))
        self.assertTrue(self.graph.path_between("Rado", "Ivo"))
Exemplo n.º 4
0
class TestGraph(unittest.TestCase):
    def setUp(self):
        self.my_graph = DirectedGraph()

    def test_init(self):
        self.assertEqual(self.my_graph.nodes, {})

    def test_add_edge(self):
        self.my_graph.add_edge("modzozo", "RadoRado")
        self.assertEqual(self.my_graph.nodes, {"modzozo": ["RadoRado"], "RadoRado": []})

    def test_get_neighbours(self):
        self.my_graph.add_edge("modzozo", "RadoRado")
        self.my_graph.add_edge("modzozo", "mod")
        self.assertEqual(self.my_graph.get_neighbours_for("modzozo"), ["RadoRado", "mod"])

    def test_path_between_true(self):
        self.my_graph.add_edge("modzozo", "RadoRado")
        self.my_graph.add_edge("modzozo", "mod")
        self.my_graph.add_edge("RadoRado", "Rado")
        self.my_graph.add_edge("Rado", "zozo")
        self.assertTrue(self.my_graph.path_between("modzozo", "zozo"))

    def test_path_between_false(self):
        self.my_graph.add_edge("modzozo", "RadoRado")
        self.my_graph.add_edge("modzozo", "mod")
        self.my_graph.add_edge("RadoRado", "Rado")
        self.my_graph.add_edge("Rado", "zozo")
        self.assertFalse(self.my_graph.path_between("Rado", "modzozo"))

    def test_path_between_cycle(self):
        self.my_graph.add_edge("modzozo", "RadoRado")
        self.my_graph.add_edge("modzozo", "mod")
        self.my_graph.add_edge("RadoRado", "Rado")
        self.my_graph.add_edge("Rado", "zozo")
        self.my_graph.add_edge("zozo", "modzozo")
        self.assertTrue(self.my_graph.path_between("modzozo", "zozo"))
Exemplo n.º 5
0
class GraphTest(unittest.TestCase):
    def setUp(self):
        self.sample_graph = DirectedGraph()

    def test_graph_init(self):
        self.assertEqual(self.sample_graph.graph, {})

    def test_add_edge(self):
        self.sample_graph.add_edge("A", "B")
        self.assertIn("A", self.sample_graph.graph)
        self.assertIn("B", self.sample_graph.graph["A"])

        self.sample_graph.add_edge("A", "D")
        self.assertIn("A", self.sample_graph.graph)
        self.assertIn("D", self.sample_graph.graph["A"])

        self.sample_graph.add_edge("B", "C")
        self.assertIn("A", self.sample_graph.graph)
        self.assertIn("B", self.sample_graph.graph["A"])
        self.assertIn("B", self.sample_graph.graph)
        self.assertIn("C", self.sample_graph.graph["B"])

    def test_get_neighbours_for(self):
        self.sample_graph.add_edge("A", "B")
        self.sample_graph.add_edge("A", "D")
        self.assertEqual(["B", "D"], self.sample_graph.get_neighbours_for("A"))

    def test_path_between(self):
        self.sample_graph.add_edge("A", "B")
        self.sample_graph.add_edge("B", "C")
        self.assertTrue(self.sample_graph.path_between("A", "C"))
        self.assertFalse(self.sample_graph.path_between("A", "D"))
        self.assertFalse(self.sample_graph.path_between("A", "E"))

    def test_to_str(self):
        self.sample_graph.add_edge("A", "B")
        self.assertEqual(self.sample_graph.to_str(), "A ---> ['B']")
Exemplo n.º 6
0
class DirectedGraphTests(unittest.TestCase):

    def setUp(self):
        self.graph = DirectedGraph()

    def test_add_edge_non_existing_nodes(self):
        self.graph.add_edge("Ionko", "Dingo")
        self.assertEqual(self.graph.nodes, {"Ionko": ["Dingo"], "Dingo": []})

    def test_add_edge_only_one_existing_node(self):
        self.graph.add_edge("Ionko", "Dingo")
        self.graph.add_edge("Dingo", "Penka")
        self.assertEqual(self.graph.nodes,
                         {"Ionko": ["Dingo"], "Dingo": ["Penka"], "Penka": []})

    def test_add_edge_existing_nodes(self):
        self.graph.add_edge("Ionko", "Dingo")
        self.graph.add_edge("Dingo", "Ionko")
        self.assertEqual(self.graph.nodes,
                         {"Ionko": ["Dingo"], "Dingo": ["Ionko"]})

    def test_get_neighbours_for_existing_nodes(self):
        self.graph.add_edge("Ionko", "Dingo")
        self.assertEqual(self.graph.get_neighbours_for("Ionko"),
                         ["Dingo"])

    def test_get_neighbours_for_non_existing_nodes(self):
        self.assertEqual(self.graph.get_neighbours_for("ASDF"), [])

    def test_path_between_direct_neighbours(self):
        self.graph.add_edge("Ionko", "Dingo")
        self.assertTrue(self.graph.path_between("Ionko", "Dingo"))
        self.assertFalse(self.graph.path_between("Dingo", "Ionko"))

    def test_path_between_cyclic_neighbours(self):
        self.graph.add_edge("1", "2")
        self.graph.add_edge("2", "3")
        self.graph.add_edge("2", "4")
        self.graph.add_edge("4", "5")
        self.graph.add_edge("4", "6")

        self.graph.add_edge("3", "2")

        self.assertTrue(self.graph.path_between("2", "6"))
        self.assertFalse(self.graph.path_between("6", "2"))

    def test_path_between_indirect_neighbours(self):
        self.graph.add_edge("1", "2")
        self.graph.add_edge("2", "3")
        self.graph.add_edge("2", "4")
        self.graph.add_edge("4", "5")
        self.graph.add_edge("4", "6")

        self.assertTrue(self.graph.path_between("1", "6"))
        self.assertFalse(self.graph.path_between("6", "5"))
class GraphTest(unittest.TestCase):
    def setUp(self):
        self.graph = DirectedGraph()

    def test_add_edge(self):
        self.graph.add_edge('A', 'B')
        self.assertTrue(('A', 'B') in self.graph.edges)

    def test_get_neighbours(self):
        self.graph.add_edge('A', 'B')
        self.graph.add_edge('A', 'C')
        self.graph.add_edge('D', 'A')
        self.assertEqual(self.graph.get_neighbours('A'), {'B', 'C'})

    def test_path_between(self):
        self.graph.add_edge('A', 'B')
        self.graph.add_edge('C', 'B')
        self.graph.add_edge('D', 'A')
        self.assertEqual(self.graph.path_between('D', 'B'), (True, 2))
        self.assertEqual(self.graph.path_between('D', 'C'), (False, 0))
Exemplo n.º 8
0
class TestGraph(unittest.TestCase):

    def setUp(self):

        self.my_graph = DirectedGraph("My Graph")

    def test_init(self):

        self.assertEqual(self.my_graph.name, "My Graph")
        self.assertEqual(self.my_graph.edges, {})

    def test_add_edge(self):

        self.my_graph.add_edge("Ivo", "Boqn")
        self.assertIn("Ivo", self.my_graph.edges.keys())
        self.assertIn("Boqn", self.my_graph.edges["Ivo"])

    def test_get_neighbors_for(self):

        self.my_graph.add_edge("Ivo", "Djihad")
        self.my_graph.add_edge("Ivo", "Ahmed")
        self.assertEqual(["Djihad", "Ahmed"], self.my_graph.get_neighbors_for("Ivo"))


    def test_str(self):

        self.my_graph.add_edge("Ivo", "Djihad")
        self.my_graph.add_edge("Ivo", "Ahmed")
        self.my_graph.__str__()

    def test_path_between(self):

        self.my_graph.add_edge("misho", 'pesho')
        self.my_graph.add_edge("pesho", 'mitko')
        self.my_graph.add_edge("mitko", 'stefcho')

        self.assertTrue(self.my_graph.path_between("misho", "stefcho"))
Exemplo n.º 9
0
class GitHubNetwork:

    def __init__(self, username, depth):
        self.username = username
        self.depth = depth
        self.request = requests.get(
            'https://api.github.com/users/' + self.username + '/followers')
        self.social_graph = DirectedGraph()

    def following(self):

        request_json = self.request.json()
        for each_person in request_json:
            self.social_graph.add_edge(self.username, each_person['login'])

        return self.social_graph.nodes

    def is_following(self, user):
        if self.social_graph.path_between(self.username, user):
            return True
        return False

    def steps_to(self, username):
        pass
Exemplo n.º 10
0
 def test_path_between_true(self):
     newGraph = DirectedGraph()
     newGraph.add_edge("1", "2")
     newGraph.add_edge("2", "3")
     newGraph.add_edge("3", "4")
     self.assertTrue(newGraph.path_between("1", "4"))