예제 #1
0
 def color_graph(self):
     """ Metoda kolorujaca graf.
     """
     
     # 1 - pokolorowanie grafu na kolejne kolory
     assignSeqColors(self.sim_nodes)
     
     # 1.5 - root koloruje sie na 0
     root_node = self.sim_nodes[0]
     root_node.memory['color'] = 0
     root_vertex = self.graph.vertex(0)
     
     
     # 2 - 6 rund:
     for counter in range(self.rounds_count):
         
         # 3 - przechodzenie po kazdym wezle z sim_nodes
         for sim_nd in self.sim_nodes:
             
             # 4 - odbieranie wiadomosci przychodzacych
             assert len(sim_nd.inbox) <= 1 # node moze nie dostac wiadomosci wcale albo dostac tylko jedna
             
             if sim_nd.inbox:
                 msg = sim_nd.inbox.pop(0)
                 self._process_message(sim_nd, msg)
                 
             # 5 - dodaj odpowiednie komunikaty do swojej skrzynki nadawczej
             self._update_outbox(sim_nd)
             
         # faktyczne wysylanie informacji
         for sim_nd in self.sim_nodes:
             sim_nd.process_outbox()
                 
 def test_shift_down_v2(self):
     # konstrukcja grafu
     g = Graph(directed=False)
 
     sim_nodes = []
     
     
     # 1 - dodanie pierwszego wierzcholka do grafu
     root_vertex = g.add_vertex()
     root_node = Node(root_vertex, sim_nodes)
     root_node.memory['parent_id'] = 0
     sim_nodes.append(root_node)
     
     # root -> v1
     # v1 -> v2
     # v1 -> v3
     v1 = g.add_vertex()
     v1_node = Node(v1, sim_nodes)
     v1_node.memory['parent_id'] = 0
     sim_nodes.append(v1_node)
     g.add_edge(root_vertex, v1)
     
     v2 = g.add_vertex()
     v2_node = Node(v2, sim_nodes)
     v2_node.memory['parent_id'] = 1
     sim_nodes.append(v2_node)
     g.add_edge(v2, v1)
     
     v3 = g.add_vertex()
     v3_node = Node(v3, sim_nodes)
     v3_node.memory['parent_id'] = 1
     sim_nodes.append(v3_node)
     g.add_edge(v3, v1)
     
     assignSeqColors(sim_nodes)
     
     # kolory odpowiadaja numerom krawedzi
     
     six2three_instance = Six2three(g, sim_nodes)
     
     six2three_instance._shift_down_v2(0)
     
     self.failUnless(v1_node.memory['color'] == 0)
     self.failUnless(v2_node.memory['color'] == 1)
     self.failUnless(v3_node.memory['color'] == 1)