示例#1
0
    def test_connected_components_A(self):
        g = self.generate_graph(7)
        g_algo = GraphAlgo(g)
        g_algo.get_graph().add_edge(0, 1, 1)
        g_algo.get_graph().add_edge(1, 0, 1)
        g_algo.get_graph().add_edge(1, 2, 2)
        g_algo.get_graph().add_edge(2, 1, 3)
        g_algo.get_graph().add_edge(0, 3, 4)
        g_algo.get_graph().add_edge(3, 1, 5)
        g_algo.get_graph().add_edge(0, 4, 2)
        g_algo.get_graph().add_edge(4, 5, 5)
        g_algo.get_graph().add_edge(5, 4, 2)
        self.assertEqual(g_algo.connected_component(0), [0, 1, 2, 3])
        self.assertEqual(g_algo.connected_component(4), [4, 5])
        self.assertEqual(g_algo.connected_component(6), [6])
        # generate a graph with 7 vertices -> init graph algo object -> add multiple edges ->
        # verify connected components -> add another vertex with no edge -> verify connected components for itself

        g1 = GraphAlgo()
        self.assertEqual(g1.connected_component(8), [])
        # verify connected components on a node that does not exists -> suppose to return an empty list

        graph_none = DiGraph()
        graph_none = None
        g2 = GraphAlgo(graph_none)
        self.assertEqual(g1.connected_component(8), [])
示例#2
0
    def test_connected_component(self):
        d1 = DiGraph()
        d1.add_node(0, (1, 2, 0))
        d1.add_node(1, (4, 7, 0))
        d1.add_node(2, (0, 1, 4))
        d1.add_node(3, (0, 9, 8))
        d1.add_node(4, (4, 4, 0))
        d1.add_node(5, (5, 15, 0))
        d1.add_node(6, (21, 2, 0))
        d1.add_node(7, (13, 13, 0))

        d1.add_edge(0, 1, 1)
        d1.add_edge(1, 2, 2)
        d1.add_edge(2, 3, 3)
        d1.add_edge(2, 0, 3)
        d1.add_edge(3, 4, 0.5)
        d1.add_edge(4, 5, 0.5)
        d1.add_edge(4, 7, 0.5)
        d1.add_edge(5, 6, 0.5)
        d1.add_edge(6, 4, 0.5)
        d1.add_edge(6, 7, 0.5)
        d1.add_node(8, (6, 8, 0))
        d1.add_node(9, (7, 8, 0))
        d1.add_edge(8, 9, 1)
        d1.add_edge(9, 8, 1)
        d1.add_edge(8, 0, 1)
        algo = GraphAlgo(d1)
        self.assertTrue([2, 1, 0] == algo.connected_component(2))
        self.assertTrue([9, 8] == algo.connected_component(9))
        self.assertTrue([3] == algo.connected_component(3))
        self.assertTrue([7] == algo.connected_component(7))
        self.assertTrue([5, 4, 6] == algo.connected_component(5))
示例#3
0
    def test_connected_component(self):
        graph = self.build_graph()
        graph_a = GraphAlgo()
        GraphAlgo.__init__(graph_a, graph)

        is_connected = graph_a.connected_component(3)
        y = (len(is_connected))
        self.assertEqual(5, y)
        for i in range(4):
            self.assertTrue(i in is_connected)

        graph.remove_edge(2, 3)
        GraphAlgo.__init__(graph_a, graph)

        is_connected = graph_a.connected_component(3).__getitem__(0)

        self.assertEqual(3, is_connected)

        graph.remove_edge(3, 4)
        graph.add_edge(2, 4, 10)
        GraphAlgo.__init__(graph_a, graph)

        is_connected = graph_a.connected_component(3).__getitem__(0)

        self.assertEqual(3, is_connected)

        graph = self.build_empty_graph()
        GraphAlgo.__init__(graph_a, graph)
        self.assertEqual(0, len(graph_a.connected_components()))
示例#4
0
 def test_connected_component_a(self):
     g = DiGraph()
     k = GraphAlgo(g)
     for i in range(10):
         g.add_node(i)
     g.add_edge(3, 4, 1)
     g.add_edge(3, 7, 1)
     g.add_edge(7, 3, 1)
     g.add_edge(7, 5, 1)
     g.add_edge(5, 0, 1)
     g.add_edge(5, 6, 1)
     g.add_edge(4, 5, 1)
     g.add_edge(6, 4, 1)
     g.add_edge(6, 0, 1)
     g.add_edge(6, 2, 1)
     g.add_edge(0, 1, 1)
     g.add_edge(1, 2, 1)
     g.add_edge(2, 0, 1)
     l0 = k.connected_component(0)
     l1 = k.connected_component(1)
     l2 = k.connected_component(2)
     l3 = k.connected_component(3)
     l4 = k.connected_component(4)
     l5 = k.connected_component(5)
     l6 = k.connected_component(6)
     l7 = k.connected_component(7)
     self.assertEqual(l0, l1, l2)  # one component
     self.assertEqual(l3, l7)  # one component
     self.assertEqual(l4, l5, l6)  # one component
示例#5
0
def time_test(g: DiGraph):
    random.seed(55555)
    algo = GraphAlgo(g)
    src = random.randint(0, g.NumberOfNodes)
    dest = random.randint(0, g.NumberOfNodes)
    startShortest = timer()
    algo.shortest_path(src, dest)
    endShortest = timer()
    startConnected = timer()
    algo.connected_components()
    endConnected = timer()
    component = random.randint(0, g.NumberOfNodes)
    startComponent = timer()
    algo.connected_component(component)
    endComponent = timer()

    print("My DiGraph:", g, " ->", "\n", "Shortest Path:",
          (endShortest - startShortest), "\n", "Connected Components:",
          (endConnected - startConnected), "\n", "Connected Component:",
          (endComponent - startComponent), "\n")
    MyTestCaseForComparison.shortestPathSumDiGraph += (endShortest -
                                                       startShortest)
    MyTestCaseForComparison.connectedComponentsDiGraph += (endConnected -
                                                           startConnected)
    MyTestCaseForComparison.connectedComponenTDiGraph += (endComponent -
                                                          startComponent)
def maincheck_our(s):
    ga = GraphAlgo()
    t = time.time()
    ga.load_from_json(s)

    t = time.time() - t
    print('loaded:', t)
    print()

    t = time.time()
    ga.connected_components()
    t = time.time() - t
    print('sccs:', t)
    print()

    r = rnd(x=0)
    keys = list(ga.get_graph().get_all_v().keys())
    s, e = map(r.choice, [keys, keys])

    t = time.time()
    ga.connected_component(s)
    t = time.time() - t
    print('scc:', t)
    print()

    t = time.time()
    ga.shortest_path(s, e)
    t = time.time() - t
    print('sp:', t)
    print()
    def test_small_graph(self):

        g = DiGraph()
        algo = GraphAlgo(g)

        self.assertTrue(g.add_node(1))
        self.assertTrue(g.add_node(2))
        self.assertTrue(g.add_node(3))
        self.assertTrue(g.add_node(4))
        self.assertTrue(g.add_node(5))
        self.assertTrue(g.add_node(6))
        self.assertTrue(g.add_edge(1, 3, 9))
        self.assertTrue(g.add_edge(1, 2, 3.45))
        self.assertTrue(g.add_edge(1, 6, 14))
        self.assertTrue(g.add_edge(2, 3, 10))
        self.assertTrue(g.add_edge(2, 4, 2.34322))
        self.assertTrue(g.add_edge(3, 6, 2))
        self.assertTrue(g.add_edge(3, 4, 11))
        self.assertTrue(g.add_edge(4, 5, 6))
        self.assertTrue(g.add_edge(6, 5, 9))
        self.assertEqual(algo.connected_components(), [[5], [6], [4], [3], [2], [1]])
        self.assertTrue(g.add_edge(5, 3, 2.1211))
        self.assertTrue(g.add_edge(4, 2, 2.34322))
        self.assertTrue(g.add_edge(2, 1, 3.45))
        self.assertEqual(algo.connected_components(), [[2, 4, 5, 6, 3, 1]])
        self.assertEqual(algo.shortest_path(1, 5), (11.79322, [1, 2, 4, 5]))
        self.assertEqual(algo.shortest_path(4, 6), (10.1211, [4, 5, 3, 6]))
        self.assertTrue(g.add_node(7))
        self.assertEqual(algo.connected_components(), [[2, 4, 5, 6, 3, 1], [7]])
        self.assertEqual(algo.connected_component(7), [7])

        self.assertTrue(g.remove_node(7))
        self.assertEqual(algo.connected_components(), [[2, 4, 5, 6, 3, 1]])
        self.assertEqual(algo.connected_component(6), [1, 2, 4, 3, 5, 6])
示例#8
0
def run_time(file_name: str, src, dest):
    graph_algo = GraphAlgo()
    dt = 0
    for i in range(100):
        start = timeit.default_timer()
        graph_algo.load_from_json(file_name)
        stop = timeit.default_timer()
        dt = dt + (stop - start)
    print(graph_algo.get_graph())
    print("run time of read from json file and build the graph: ", dt / 100)
    dt = 0
    for i in range(100):
        start = timeit.default_timer()
        connecteds = graph_algo.connected_components()
        stop = timeit.default_timer()
        dt = dt + (stop - start)
        # print(connecteds)
    print("run time of connected_components: ", dt / 100)

    dt = 0
    for i in range(100):
        start = timeit.default_timer()
        graph_algo.connected_component(1)
        stop = timeit.default_timer()
        dt = dt + (stop - start)

    print("run time of connected_component: ", dt / 100)

    dt = 0
    for i in range(100):
        start = timeit.default_timer()
        graph_algo.shortest_path(src, dest)
        stop = timeit.default_timer()
        dt = dt + (stop - start)
    print("run time of shortest_path: ", dt / 100)
示例#9
0
class TestGraphAlgo(TestCase):

    def setUp(self):
        self.graph = None
        self.ga = GraphAlgo()

    def test_load_from_json(self):
        self.assertTrue(self.ga.load_from_json("../data/G_10_80_0.json"))
        self.assertTrue(self.ga.load_from_json("../data/G_10_80_1.json"))
        self.assertTrue(self.ga.load_from_json("../data/G_10_80_2.json"))

    def test_save_to_json(self):
        self.ga.load_from_json("../data/G_10_80_0.json")
        self.assertTrue(self.ga.save_to_json("graph1.json"))
        self.ga.load_from_json("../data/G_10_80_1.json")
        self.assertTrue(self.ga.save_to_json("graph2.json"))
        self.ga.load_from_json("../data/G_10_80_2.json")
        self.assertTrue(self.ga.save_to_json("graph3.json"))

    def test_shortest_path(self):
        self.ga.graph = graph_2

        self.assertEqual("(6, [1, 2, 4, 3, 5, 0, 6])", str(self.ga.shortest_path(1, 6)))
        self.assertEqual("(2, [3, 5, 0])", str(self.ga.shortest_path(3, 0)))
        self.assertEqual("(0, [2])", str(self.ga.shortest_path(2, 2)))
        # no path
        no_path = (inf, [])
        self.assertEqual(no_path, self.ga.shortest_path(6, 1))
        # shortest path between nodes that one or more of the nodes does not exist in the graph
        self.assertRaises(Exception, self.ga.shortest_path, (10, 1))
        self.assertRaises(Exception, self.ga.shortest_path, (1, 10))
        self.assertRaises(Exception, self.ga.shortest_path, (9, 10))

    def test_connected_component(self):
        self.ga.graph = graph_3
        for i in range(0, 10):
            for j in range(10):
                if j in range(3):
                    self.assertEqual([0, 1, 2], sorted(self.ga.connected_component(j)))
                if j in range(3, 5):
                    self.assertEqual([3, 4], sorted(self.ga.connected_component(j)))
                if j in range(5, 7):
                    self.assertEqual([j], self.ga.connected_component(j))
                if j in range(8, 11):
                    self.assertEqual([7, 8, 9], sorted(self.ga.connected_component(j)))

    def test_connected_components(self):
        self.ga.graph = graph_2
        self.assertEqual([[1, 2, 4, 3, 5, 0], [6]], self.ga.connected_components())
        self.ga.graph = graph_3
        self.assertEqual([[8, 9, 7], [5], [6], [2, 1, 0], [4, 3]], self.ga.connected_components())

    def test_plot_graph(self):
        # plot graph without positions
        self.ga.graph = graph_2
        self.ga.plot_graph()
        # plot graph with position
        self.ga.graph = graph_3
        self.ga.plot_graph()
示例#10
0
 def test_scc2(self):
     g = graph_builder(100)
     algo = GraphAlgo(g)
     for n in g.get_all_v().keys():
         self.assertEqual(1, len(algo.connected_component(n)))
     self.assertEqual(0,
                      len(algo.connected_component(200)))  # un-existed node
     self.assertEqual(100, len(algo.connected_components()))
示例#11
0
 def test_connected_component(self):
     g1 = create_graph()
     g2 = GraphAlgo()
     g2.init(g1)
     self.assertEqual([1, 2, 4, 0], g2.connected_component(1))
     g1.remove_edge(4, 0)
     g2.init(g1)
     self.assertEqual([1, 2, 4], g2.connected_component(1))
 def test_connected_component(self):
     g = create_graph(2, 6, 7)
     ga = GraphAlgo(g)
     for i in [3, 4, 2, 5]:
         self.assertEqual({3, 4, 2, 5}, set(ga.connected_component(i)))
     self.assertEqual([1], ga.connected_component(1))
     self.assertEqual([0], ga.connected_component(0))
     self.assertEqual([], ga.connected_component(12))
示例#13
0
    def test_connected_component(self):

        graph = GraphAlgo(create_small_graph())

        self.assertEqual(graph.connected_component(3), [2, 3])
        self.assertEqual(graph.connected_component(0), [0, 1])
        self.assertEqual(graph.connected_component(1), [0, 1])
        self.assertEqual(graph.connected_component(9), [])
def check_functions(file_path) -> bool:
    with open(file_path) as f:
        json_data = json.loads(f.read())

    nx_graph = nx.DiGraph()

    nx_graph.add_nodes_from(elem['id'] for elem in json_data['Nodes'])
    nx_graph.add_weighted_edges_from(
        (elem['src'], elem['dest'], elem['w']) for elem in json_data['Edges'])

    dg_algo = GraphAlgo()
    dg_algo.load_from_json(file_path)

    # nx.draw(nx_graph, with_labels=True)
    # plt.show()

    print("JSON file: " + file_path)

    start_time = time.time_ns()
    dg_algo.shortest_path(0, 5)
    end_time = time.time_ns()
    resultTime = end_time - start_time
    print("Running time Python shortest_path: " + str(resultTime / 1000000) +
          " ms")

    start_time = time.time_ns()
    print("Shortest Path (0,5) (NetworkX Graph):\n" +
          str(nx.shortest_path(nx_graph, source=0, target=5, weight='weight')))
    end_time = time.time_ns()
    resultTime = end_time - start_time
    print("Running time NetworkX shortest_path: " + str(resultTime / 1000000) +
          " ms")

    start_time = time.time_ns()
    print(dg_algo.connected_components())
    end_time = time.time_ns()
    resultTime = end_time - start_time
    print("Running time Python connected_components: " +
          str(resultTime / 1000000) + " ms")

    start_time = time.time_ns()
    connected_components_graph = nx.strongly_connected_components(nx_graph)
    end_time = time.time_ns()
    # for elem in connected_components_graph:
    #     print(elem)
    resultTime = end_time - start_time
    print("Running time NetworkX connected_components: " +
          str(resultTime / 1000000) + " ms")

    start_time = time.time_ns()
    dg_algo.connected_component(9)
    # for elem in connected_components_graph:
    #     print(elem)
    end_time = time.time_ns()
    resultTime = end_time - start_time
    print("Running time Python connected_component: " +
          str(resultTime / 1000000) + " ms")
示例#15
0
    def test_connected_component(self):
        ga = GraphAlgo(simpleGraphGenerator())

        self.assertEqual(
            ga.connected_component(1).sort(), [0, 1, 2].sort(), "worng SCC")
        self.assertEqual(ga.connected_component(3), [3], "worng SCC")

        self.assertIsNone(ga.connected_component(7),
                          "node 7 is not in the graph")
示例#16
0
 def test_connected_component(self):
     # _________________ Test My DiGraph component _________________
     my_graph_algo = GraphAlgo()
     my_graph_algo.load_from_json("../Graphs_no_pos/G_30000_240000_0.json")
     my_graph = my_graph_algo.g
     start = time.time()
     my_graph_algo.connected_component(5)
     end = time.time()
     print("Component - My DiGraph time: " + str(end - start))
示例#17
0
class MyTestCase(unittest.TestCase):
    def setUp(
        self
    ) -> None:  # loads the file to GraphAlgo object ga and networkx DiGraph object nxg
        nxr = NXJsonReader()
        file = "C:\\Users\\User\\PycharmProjects\\Ex3\\data\\G_30000_240000_1.json"
        nxr.read(file)
        self.nxg = nxr.get_graph()
        self.ga = GraphAlgo()
        self.ga.load_from_json(file)

    def test_nx_shortest(
        self
    ):  # calculate the shortest path and distance 10 times and return average runtime
        start = time.time()
        for i in range(10):
            nx.shortest_path(self.nxg, 1, 25468, weight="weight")
            nx.shortest_path_length(self.nxg, 1, 25468, weight="weight")
        end = time.time()
        print((end - start) / 10)

    def test_nx_CCS(
        self
    ):  # finds all the connected components 10 times and return average runtime
        start = time.time()
        for i in range(10):
            nx.strongly_connected_components(self.nxg)
        end = time.time()
        print((end - start) / 10)

    def test_GA_shortest(
        self
    ):  # calculate the shortest path and distance 10 times and return average runtime
        start = time.time()
        for i in range(10):
            self.ga.shortest_path(1, 25468)
        end = time.time()
        print((end - start) / 10)

    def test_GA_CCS(
        self
    ):  # finds all the connected components 10 times and return average runtime
        start = time.time()
        for i in range(10):
            self.ga.connected_components()
        end = time.time()
        print((end - start) / 10)

    def test_GA_CC(
        self
    ):  # finds the nodes that are part of 456 component 10 times and return average runtime
        start = time.time()
        for i in range(10):
            self.ga.connected_component(456)
        end = time.time()
        print((end - start) / 10)
 def test_connected_component(self):
     g = self.graphForTest1()
     ga = GraphAlgo(g)
     print(ga.connected_components())
     assert ga.connected_component(5) == [5, 6]
     assert 0 in ga.connected_component(2)
     assert 9 in ga.connected_component(8)
     assert 0 not in ga.connected_component(3)
     g.add_edge(3, 0, 1)
     assert 0 in ga.connected_component(3)
     assert len(ga.connected_component(3)) == 5
示例#19
0
 def test_scc3(self):
     g = graph_builder(20)
     algo = GraphAlgo(g)
     for i in range(20):
         g.add_edge(0, i, i)
     self.assertEqual(1, len(algo.connected_component(0)))
     for i in range(2, 20, 2):
         g.add_edge(i, i - 2, i)
     # print("scc of node 0:", algo.connected_component(0))
     # print(algo.connected_component(0))
     self.assertEqual(10, len(algo.connected_component(0)))
示例#20
0
 def test_big_dfs(self):
     # Checking if there is an exception at some scenario
     algo = GraphAlgo()
     algo.load_from_json("data/A5")
     random.seed(55555)
     for i in range(1000):
         b = random.randint(0, 47)
         c = random.randint(0, 47)
         algo.graph.remove_edge(b, c)
         algo.graph.remove_edge(c, b)
     for i in algo.graph.nodes.keys():
         algo.connected_component(i)
示例#21
0
class MyTestCase(unittest.TestCase):
    def setUp(self) -> None:
        graph = DiGraph()
        for i in range(10):
            graph.add_node(i)
        for i in range(9):
            graph.add_edge(i, i + 1, 3)

        self.ga = GraphAlgo(graph)

    def test_Save_and_load(self):
        file_name = "ga.json"
        self.ga.save_to_json(file_name)
        la = GraphAlgo()
        la.load_from_json("ga.json")
        self.assertEqual(self.ga.Graph, la.Graph)

    def test_shortest_path(self):
        self.assertEqual(self.ga.shortest_path(0, 1), [3.0, [0, 1]])
        self.assertEqual(self.ga.shortest_path(0, 0), [inf, []])
        self.assertEqual(self.ga.shortest_path(0, 9), [27.0, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
        self.ga.Graph.add_edge(0, 9, 5)
        self.assertEqual(self.ga.shortest_path(0, 9), [5.0, [0, 9]])

    def test_connected_components(self):
        self.assertEqual(self.ga.connected_components(), [[0], [1], [2], [3], [4], [5], [6], [7], [8], [9]])
        self.ga.Graph.add_edge(1, 0, 5)
        self.assertEqual(self.ga.connected_components(), [[0, 1], [2], [3], [4], [5], [6], [7], [8], [9]])
        self.assertEqual(self.ga.connected_component(0), [0, 1])
        empty_graph = GraphAlgo()
        self.assertEqual(empty_graph.connected_components(), [])
示例#22
0
 def test_connected_component_none_graph(self):
     ga1 = GraphAlgo(None)
     self.assertEqual(
         "[]",
         ga1.connected_component(0).__str__(),
         "connected_component returns "
         "uncorrected list for none graph")
示例#23
0
def compares_run_time_cc_of_node_json(node_id: int, file_name: str) -> list:
    """
    Compares the running time of the Connected component method in GraphAlgo  and Networkx
    The graph is created from json file
    :param file_name:
    :return:
    """
    graph_algo = GraphAlgo()
    graph_algo.load_from_json(file_name)
    g = nx.Graph()
    nx_graph = g.to_directed()
    for node in graph_algo.get_graph().get_all_v().values():
        nx_graph.add_node(node.key, pos=node.pos)
    for edges in graph_algo.get_graph().Edges.values():
        for edge in edges.values():
            nx_graph.add_edge(edge.src, edge.dest, weight=edge.weight)
    start_time = datetime.now()
    for cc_of_node in nx.strongly_connected_components(nx_graph):
        if node_id in cc_of_node:
            nx_results = list(cc_of_node)
    end_time = datetime.now()
    run_time_nx = end_time - start_time
    print("run time of networkx graph:", run_time_nx)
    start_time = datetime.now()
    my_results = graph_algo.connected_component(node_id)
    end_time = datetime.now()
    cc = list()
    i = 0
    for node in my_results:
        cc.append(node.key)
        i += 1
    cc.sort()
    run_time_graph_algo = end_time - start_time
    print("run time of GraphAlgo :", run_time_graph_algo)
    return [nx_results, cc]
示例#24
0
 def test_connected_component(self):
     graph = DiGraph()
     graph.add_node(0)
     graph.add_node(1)
     graph.add_node(2)
     graph.add_node(3)
     graph.add_node(4)
     graph.add_node(5)
     graph.add_node(6)
     graph.add_node(7)
     graph.add_edge(0, 1, 2)
     graph.add_edge(1, 2, 2)
     graph.add_edge(2, 0, 2)
     graph.add_edge(5, 0, 2)
     graph.add_edge(5, 6, 2)
     graph.add_edge(6, 2, 2)
     graph.add_edge(6, 0, 2)
     graph.add_edge(6, 4, 2)
     graph.add_edge(4, 5, 2)
     graph.add_edge(3, 4, 2)
     graph.add_edge(3, 7, 2)
     graph.add_edge(7, 3, 2)
     graph.add_edge(7, 5, 2)
     g_algo = GraphAlgo(graph)
     answer = [0, 1, 2]
     self.assertEqual(g_algo.connected_component(1), answer)
示例#25
0
def check2():
    """ This function tests the naming, basic testing over A5 json file.
      :return:
    """

    g_algo = GraphAlgo()
    file = 'data/A5'

    g_algo.load_from_json(file)
    g_algo.get_graph().remove_edge(13, 14)
    g_algo.save_to_json(file + "_edited")

    dist, path = g_algo.shortest_path(1, 7)
    print(dist, path)
    dist, path = g_algo.shortest_path(47, 19)
    print(dist, path)
    dist, path = g_algo.shortest_path(20, 2)
    print(dist, path)
    dist, path = g_algo.shortest_path(2, 20)

    print(dist, path)
    print(g_algo.connected_component(0))
    print(g_algo.connected_components())

    g_algo.plot_graph()
示例#26
0
class TestGraphAlgo(unittest.TestCase):
    def setUp(self) -> None:
        self.g = DiGraph()
        self.g.add_node(1)
        self.g.add_node(2)
        self.g.add_node(3)
        self.g.add_node(4)
        self.g.add_node(5)
        self.g.add_node(6)
        self.g.add_edge(1, 2, 3)
        self.g.add_edge(1, 3, 2)
        self.g.add_edge(2, 5, 3)
        self.g.add_edge(3, 1, 1)
        self.g.add_edge(3, 4, 2)
        self.g.add_edge(4, 3, 1)
        self.g.add_edge(4, 5, 1)
        self.g.add_edge(6, 2, 1)
        self.ga = GraphAlgo(self.g)

    def tearDown(self) -> None:
        return None

    def test_get_graph(self):
        self.assertEqual(True, self.ga.save_to_json('testgraph.json'))
        self.assertEqual(True, self.ga.load_from_json('testgraph.json'))
        self.assertEqual(False, self.ga.load_from_json('noname.json'))

    def test_load_save_json(self):
        self.assertEqual(self.g, self.ga.get_graph())

    def test_shortest_path(self):
        self.assertEqual((5, [1, 3, 4, 5]), self.ga.shortest_path(1, 5))
        self.assertEqual((inf, []), self.ga.shortest_path(1, 7))
        self.assertEqual((inf, []), self.ga.shortest_path(1, 6))

    def test_connected_component(self):
        self.assertEqual([1, 3, 4], self.ga.connected_component(1))
        self.ga.get_graph().remove_node(1)
        self.assertEqual([], self.ga.connected_component(1))
        self.ga = GraphAlgo(None)
        self.assertEqual([], self.ga.connected_component(1))

    def test_connected_components(self):
        self.assertEqual([[1, 3, 4], [2], [5], [6]],
                         self.ga.connected_components())
        self.ga = GraphAlgo(None)
        self.assertEqual([], self.ga.connected_components())
示例#27
0
def check5():
    ga = GraphAlgo()
    file = '../data/G_20000_160000_1.json'
    ga.load_from_json(file)
    start1 = time.time()
    dist, path = ga.shortest_path(25, 300)
    # print(dist, path)
    end1 = time.time()
    print(end1 - start1)
    start2 = time.time()
    ga.connected_component(900)
    end2 = time.time()
    print(end2 - start2)
    start3 = time.time()
    ga.connected_components()
    end3 = time.time()
    print(end3 - start3)
示例#28
0
def my_scc(file_path: str, id1: int, ) -> float:
    algo = GraphAlgo(None)
    algo.load_from_json(file_path)
    start_time = time.perf_counter()
    sccs = algo.connected_component(id1)
    end_time = time.perf_counter()
    # print("scc in g for specific node:", scc, "\n")
    return end_time-start_time
示例#29
0
 def test_connected_component(self):
     self.graph = DiGraph()
     galg = GraphAlgo(self.graph)
     self.assertEqual((float('inf'), []), galg.shortest_path(0, 1))
     for i in range(7):
         self.graph.add_node(i, (1, 5, 7))
     self.graph.add_edge(5, 6, 4)
     self.graph.add_edge(3, 4, 3)
     self.graph.add_edge(4, 5, 2)
     self.graph.add_edge(4, 6, 5)
     self.graph.add_edge(4, 3, 2)
     self.graph.add_edge(6, 3, 2)
     self.assertEqual([1], galg.connected_component(1))
     self.assertEqual([4, 3, 6, 5], galg.connected_component(4))
     self.assertEqual([5, 4, 3, 6], galg.connected_component(5))
     self.assertEqual([2], galg.connected_component(2))
     self.assertEqual([1], galg.connected_component(1))
示例#30
0
 def test_connected_component_time():
     """
        checks the time for the connected_component on a big graph
     """
     v, e = 10**6, 10**5
     seed(2)
     g = graphCreator(v)
     for i in range(e):
         w = random.uniform(0, 30)
         n1 = random.randint(0, v - 1)
         n2 = random.randint(0, v - 1)
         g.add_edge(n1, n2, w)
     ga1 = GraphAlgo(g)
     n1 = random.randint(0, v - 1)
     start = timeit.default_timer()
     ga1.connected_component(n1)
     end = timeit.default_timer()
     print("time for connected_component-> " + str(end - start))