def test_place_in_multiple_servers(self):
     """
     Each client placed in a server, with multiplicative_factor one.
     For each server, the used capacity equals the sum of its clients' demands.
     """
     number_servers = 30
     number_clients = 1000
     server_manager = ServerManager()
     client_manager = ClientManager()
     servers = [
         server_manager.create_server() for i in range(number_servers)
     ]
     clients = [
         client_manager.create_client(random.randint(10, 30))
         for i in range(number_clients)
     ]
     placement_manager = PlacementManager(servers)
     server = 0
     for client in clients:
         placement_manager.place_client(client, servers[server])
         server = (server + 1) % number_servers
     for i in range(number_clients):
         self.assertEqual(placement_manager.get_servers(clients[i]),
                          [(servers[i % number_servers], 1.0)])
     for i in range(number_servers):
         served_clients = [
             clients[j] for j in range(i, number_clients, number_servers)
         ]
         self.assertEqual(
             placement_manager.get_clients_served_by(servers[i]),
             {client: 1.0
              for client in served_clients})
         self.assertEqual(servers[i].used_capacity,
                          sum(client.demand for client in served_clients))
def placement(clients, servers):
    """
    Greedy algorithm.
    Sort clients in descending order of their demand.
    For each client, place it into the server that has the lowest used_capacity.
    """
    placement_manager = PlacementManager(servers)
    clients.sort(reverse=True)
    for client in clients:
        server = heapq.heappop(servers)
        placement_manager.place_client(client, server)
        heapq.heappush(servers, server)
    return placement_manager
def placement(clients, servers):
    """
    Greedy algorithm.
    Sort clients in descending order of their demand.
    For each client, place it into the server that has the lowest used_capacity.
    """
    placement_manager = PlacementManager(servers)
    clients.sort(reverse=True)
    for client in clients:
        server = heapq.heappop(servers)
        placement_manager.place_client(client, server)
        heapq.heappush(servers, server)
    return placement_manager
 def test_place_in_single_server(self):
     """
     All clients served by a single server.
     Its used capacity equals the total client demand.
     """
     server_manager = ServerManager()
     client_manager = ClientManager()
     server = server_manager.create_server()
     number_clients = 100
     demands = [random.randint(10, 30) for i in range(number_clients)]
     clients = [client_manager.create_client(demand) for demand in demands]
     placement_manager = PlacementManager([server])
     for client in clients:
         placement_manager.place_client(client, server)
     for client in clients:
         self.assertEqual(placement_manager.get_servers(client), [(server, 1.0)])
     self.assertEqual(placement_manager.get_clients_served_by(server),
                       {client : 1.0 for client in clients})
     self.assertEqual(server.used_capacity, sum(demands))
 def test_place_in_single_server(self):
     """
     All clients served by a single server.
     Its used capacity equals the total client demand.
     """
     server_manager = ServerManager()
     client_manager = ClientManager()
     server = server_manager.create_server()
     number_clients = 100
     demands = [random.randint(10, 30) for i in range(number_clients)]
     clients = [client_manager.create_client(demand) for demand in demands]
     placement_manager = PlacementManager([server])
     for client in clients:
         placement_manager.place_client(client, server)
     for client in clients:
         self.assertEqual(placement_manager.get_servers(client),
                          [(server, 1.0)])
     self.assertEqual(placement_manager.get_clients_served_by(server),
                      {client: 1.0
                       for client in clients})
     self.assertEqual(server.used_capacity, sum(demands))
 def test_place_in_multiple_servers(self):
     """
     Each client placed in a server, with multiplicative_factor one.
     For each server, the used capacity equals the sum of its clients' demands.
     """
     number_servers = 30
     number_clients = 1000
     server_manager = ServerManager()
     client_manager = ClientManager()
     servers = [server_manager.create_server() for i in range(number_servers)]
     clients = [client_manager.create_client(random.randint(10, 30)) for i in range(number_clients)]
     placement_manager = PlacementManager(servers)
     server = 0
     for client in clients:
         placement_manager.place_client(client, servers[server])
         server = (server+1)%number_servers
     for i in range(number_clients):
         self.assertEqual(placement_manager.get_servers(clients[i]), [(servers[i%number_servers], 1.0)])
     for i in range(number_servers):
         served_clients = [clients[j] for j in range(i, number_clients, number_servers)]
         self.assertEqual(placement_manager.get_clients_served_by(servers[i]),
                          {client : 1.0 for client in served_clients})
         self.assertEqual(servers[i].used_capacity,
                          sum(client.demand for client in served_clients))