def test_should_return_true_when_server1_has_longer_tasks_than_server2():
    server1 = lb.Server(1)
    server2 = lb.Server(2)
    server1.add(5)
    server2.add(3)
    server2.add(2)
    assert lb.check_tasks(server1, server2) is True
def test_should_return_false_when_server2_has_longer_tasks_than_server1():
    server1 = lb.Server(1)
    server2 = lb.Server(2)
    server1.add(1)
    server2.add(3)
    server2.add(2)
    assert lb.check_tasks(server1, server2) is False
def test_should_return_the_server_with_longer_tasks_when_both_servers_are_available(
):
    umax = 2
    server1 = lb.Server(umax)
    server2 = lb.Server(umax)
    server1.add(3)
    server2.add(2)
    assert lb.get_best_server([server1, server2], umax) == server1
def test_should_return_the_available_server_when_one_is_available_and_one_is_full(
):
    umax = 2
    server1 = lb.Server(umax)
    server2 = lb.Server(umax)
    server1.add(1)
    server1.add(3)
    server2.add(2)
    assert lb.get_best_server([server1, server2], umax) == server2
def test_should_add_two_users_one_on_each_server_when_both_servers_are_available(
):
    umax = 2
    ttask = 5
    server1 = lb.Server(umax)
    server2 = lb.Server(umax)
    server1.add(3)
    server2.add(2)
    lb.users_to_server([server1, server2], 2, umax, ttask)
    assert server1.users == [3, 5] and server2.users == [2, 5]
def test_should_reduce_one_tick_per_user_on_all_servers_when_a_tick_passes():
    server1 = lb.Server(1)
    server2 = lb.Server(2)
    ttask = 2
    server1.add(ttask)
    server2.add(ttask)
    server2.add(ttask)
    lb.run_tick([server1, server2])
    assert server1.users == [ttask - 1]
    assert server2.users == [ttask - 1] * 2
def test_should_add_new_user_to_server_with_longer_tasks_when_both_servers_are_available(
):
    umax = 2
    ttask = 5
    server1 = lb.Server(umax)
    server2 = lb.Server(umax)
    server1.add(3)
    server2.add(2)
    lb.users_to_server([server1, server2], 1, umax, ttask)
    assert server1.users == [3, 5]
def test_should_reduce_one_tick_per_user_on_the_server_when_a_tick_passes_then_remove_users_with_finished_tasks(
):
    server = lb.Server(2)
    server.add(1)
    server.add(1)
    server.tick()
    assert server.users == []
def test_should_return_false_when_try_to_add_user_after_max_users_reached():
    server = lb.Server(2)
    server.add(1)
    server.add(1)
    assert server.add(1) is False
def test_should_return_new_server_when_both_servers_are_full():
    umax = 2
    server = lb.Server(umax)
    server.add(1)
    server.add(3)
    assert isinstance(lb.get_best_server([server], umax), lb.Server) is True
def test_should_reduce_one_tick_per_user_on_the_server_when_a_tick_passes():
    server = lb.Server(2)
    server.add(2)
    server.add(3)
    server.tick()
    assert server.users == [1, 2]
def test_should_remove_users_with_finished_tasks_on_server():
    server = lb.Server(2)
    server.add(0)
    server.add(1)
    server.clear()
    assert server.users == [1]
def test_should_return_highest_ticks_remaining_on_server():
    server = lb.Server(2)
    server.add(1)
    server.add(10)
    assert server.max_task() == 10
def test_should_return_ticks_remaining_per_task_when_calling_users():
    server = lb.Server(2)
    server.add(1)
    server.add(10)
    assert server.users == [1, 10]
def test_should_return_true_when_server_is_available(umax):
    server = lb.Server(umax)
    assert server.available() is True
def test_should_return_false_when_server_is_not_available():
    server = lb.Server(2)
    server.add(1)
    server.add(1)
    assert server.available() is False
def test_should_return_true_when_user_is_added():
    server = lb.Server(2)
    ttask = 1
    assert server.add(ttask) is True