def test_should_prefer_tasks_with_higher_priority_from_same_contest(self): contest = create_contest_info() task_1 = create_task_info(contest=contest, priority=1) task_2 = create_task_info(contest=contest, priority=100) queues = prioritizing.TasksQueues(random.Random()) queues.addTask(task_1) queues.addTask(task_2) self.assertEqual(queues.chooseTask(), task_2) queues.delTask(task_2) self.assertEqual(queues.chooseTask(), task_1)
def test_should_prefer_tasks_from_higher_priority_contests(self): contest_1 = create_contest_info(id=1, priority=5) contest_2 = create_contest_info(id=2, priority=10) task_1 = create_task_info(contest=contest_1, priority=100) task_2 = create_task_info(contest=contest_2, priority=1) queues = prioritizing.TasksQueues(random.Random()) queues.addTask(task_1) queues.addTask(task_2) self.assertEqual(queues.chooseTask(), task_2) queues.delTask(task_2) self.assertEqual(queues.chooseTask(), task_1)
def test_should_respect_contest_weights_if_same_priority(self): contest_1 = create_contest_info(id=1, priority=10, weight=2) contest_2 = create_contest_info(id=2, priority=10, weight=8) queues = prioritizing.TasksQueues(random.Random()) # Add an equal amount of tasks. for _ in range(100): queues.addTask(create_task_info(contest=contest_1)) queues.addTask(create_task_info(contest=contest_2)) def choose_and_remove(): task = queues.chooseTask() queues.delTask(task) return task chosen_tasks = [choose_and_remove() for _ in range(100)] tasks_from_1 = sum(task.contest.uid == 1 for task in chosen_tasks) tasks_from_2 = sum(task.contest.uid == 2 for task in chosen_tasks) self.assertGreater(tasks_from_1, 0) self.assertGreater(tasks_from_2, 0) self.assertGreater(tasks_from_2, 2 * tasks_from_1)