def test_check_for_overlap_positive(): """ Test for task overlap when overlap is present. """ schedule = Schedule("test", []) task1 = Task( "task1", priority=1.0, start_time=datetime(2020, 5, 1, hour=12), end_time=datetime(2020, 5, 1, hour=13, minute=30), ) task2 = Task( "task2", priority=1.0, start_time=datetime(2020, 5, 1, hour=13), end_time=datetime(2020, 5, 1, hour=14), ) schedule.tasks = [task1, task2] try: schedule.check_for_overlap() # If we made it here, no error was thrown. assert False except ValueError: # We're good in this case! pass except: # Something else went wrong. assert False
def test_points_empty(): """ Test Schedule.points() for an empty schedule. """ schedule = Schedule("test", []) assert schedule.points() == 0.0
def test_interval_points_small(): """ Test Schedule.interval_points() for a small example. """ task1 = Task( "task1", priority=1.5, start_time=datetime(2020, 5, 1, hour=12), end_time=datetime(2020, 5, 1, hour=13, minute=30), ) task2 = Task( "task2", priority=2.0, start_time=datetime(2020, 5, 1, hour=13, minute=30), end_time=datetime(2020, 5, 1, hour=14, minute=30), ) task3 = Task( "task3", priority=2.0, start_time=datetime(2020, 5, 8, hour=13, minute=30), end_time=datetime(2020, 5, 8, hour=14, minute=30), ) schedule = Schedule("test", [task1, task2, task3]) start_time = datetime(2020, 5, 1) end_time = datetime(2020, 5, 8) assert schedule.interval_points(start_time, end_time) == 4.25
def test_add_task_incompatible(): """ Test adding an incompatible task. """ task1 = Task( "task1", priority=1.0, start_time=datetime(2020, 5, 1, hour=12), end_time=datetime(2020, 5, 1, hour=13, minute=30), ) schedule = Schedule("test", [task1]) task2 = Task( "task2", priority=1.0, start_time=datetime(2020, 5, 1, hour=13), end_time=datetime(2020, 5, 1, hour=14), ) # Check that add_task throws ValueError. try: schedule.add_task(task2) # If we made it here, no error was thrown. assert False except ValueError: # We're good in this case! pass except: # Something else went wrong. assert False
def test_tasks_in_interval_empty(): """ Test Schedule.tasks_in_interval() for an empty example. """ task1 = Task( "task1", priority=1.5, start_time=datetime(2020, 5, 1, hour=12), end_time=datetime(2020, 5, 1, hour=13, minute=30), ) task2 = Task( "task2", priority=2.0, start_time=datetime(2020, 5, 1, hour=13, minute=30), end_time=datetime(2020, 5, 1, hour=14, minute=30), ) task3 = Task( "task3", priority=2.0, start_time=datetime(2020, 5, 8, hour=13, minute=30), end_time=datetime(2020, 5, 8, hour=14, minute=30), ) schedule = Schedule("test", [task1, task2, task3]) start_time = datetime(2020, 4, 1) end_time = datetime(2020, 4, 8) assert schedule.tasks_in_interval(start_time, end_time) == []
def test_get_task_index_valid(): """ Test getting task index with valid queries. """ # Construct schedule. tasks = [ Task( "task1", priority=1.0, start_time=datetime(2020, 5, 1, hour=12), end_time=datetime(2020, 5, 1, hour=13, minute=30), ), Task( "task2", priority=1.0, start_time=datetime(2020, 5, 1, hour=13, minute=30), end_time=datetime(2020, 5, 1, hour=14, minute=30), ), Task( "task3", priority=2.0, start_time=datetime(2020, 5, 2, hour=12), end_time=datetime(2020, 5, 2, hour=13, minute=30), ), Task( "task4", priority=2.0, start_time=datetime(2020, 5, 2, hour=23), end_time=datetime(2020, 5, 2, hour=23, minute=30), ), Task( "task5", priority=1.0, start_time=datetime(2020, 5, 3, hour=1, minute=30), end_time=datetime(2020, 5, 3, hour=1, minute=59), ), Task( "task6", priority=1.0, start_time=datetime(2020, 6, 3, hour=1, minute=30), end_time=datetime(2020, 6, 3, hour=1, minute=59), ), ] schedule = Schedule("test", tasks) # Get task indices for each task. task_indices = [ schedule.get_task_index(date(2020, 5, 1), 0), schedule.get_task_index(date(2020, 5, 1), 1), schedule.get_task_index(date(2020, 5, 2), 0), schedule.get_task_index(date(2020, 5, 2), 1), schedule.get_task_index(date(2020, 5, 3), 0), schedule.get_task_index(date(2020, 6, 3), 0), ] # Test task indices. assert task_indices == list(range(len(tasks)))
def test_add_task_empty(): """ Test add task which to empty schedule. """ schedule = Schedule("test", []) task1 = Task( "task1", priority=1.0, start_time=datetime(2020, 5, 1, hour=12), end_time=datetime(2020, 5, 1, hour=13, minute=30), ) schedule.add_task(task1) assert schedule.tasks == [task1]
def test_check_for_overlap_negative(): """ Test for task overlap when overlap is not present. """ task1 = Task( "task1", priority=1.0, start_time=datetime(2020, 5, 1, hour=12), end_time=datetime(2020, 5, 1, hour=13, minute=30), ) task2 = Task( "task2", priority=1.0, start_time=datetime(2020, 5, 1, hour=13, minute=30), end_time=datetime(2020, 5, 1, hour=14, minute=30), ) schedule = Schedule("test", [task1, task2]) schedule.check_for_overlap()
def test_add_task_one(): """ Test add task which to schedule with one task. """ task1 = Task( "task1", priority=1.0, start_time=datetime(2020, 5, 1, hour=12), end_time=datetime(2020, 5, 1, hour=13, minute=30), ) schedule = Schedule("test", [task1]) task2 = Task( "task2", priority=1.0, start_time=datetime(2020, 5, 1, hour=13, minute=30), end_time=datetime(2020, 5, 1, hour=14, minute=30), ) schedule.add_task(task2) assert schedule.tasks == [task1, task2]
def test_remove_task(): """ Test Schedule.remove_task() for a small case. """ task1 = Task( "task1", priority=1.0, start_time=datetime(2020, 5, 1, hour=12), end_time=datetime(2020, 5, 1, hour=13, minute=30), ) task2 = Task( "task2", priority=1.0, start_time=datetime(2020, 5, 1, hour=13, minute=30), end_time=datetime(2020, 5, 1, hour=14, minute=30), ) schedule = Schedule("test", [task1, task2]) removed_task = schedule.remove_task(1) assert removed_task == task2 assert schedule.tasks == [task1]
def test_tasks_in_interval_surround(): """ Test Schedule.tasks_in_interval() when a target task is surrounding the interval. """ task1 = Task( "task1", priority=1.5, start_time=datetime(2020, 5, 1, hour=12), end_time=datetime(2020, 5, 1, hour=13, minute=30), ) task2 = Task( "task2", priority=2.0, start_time=datetime(2020, 5, 1, hour=13, minute=30), end_time=datetime(2020, 5, 1, hour=14, minute=30), ) schedule = Schedule("test", [task1, task2]) start_time = datetime(2020, 5, 1, hour=12) end_time = datetime(2020, 5, 1, hour=14) assert schedule.tasks_in_interval(start_time, end_time) == [task1, task2]
def test_set_new_schedules_1(): """ Call `set_new_schedules()` in the first case of edit history (cases listed in docstring of `set_new_schedules()`). """ # Construct session. session = Session("test") # Construct planned and new schedules. planned_task = Task( "planned_task", priority=1.0, start_time=datetime(2020, 5, 1, hour=12), end_time=datetime(2020, 5, 1, hour=13, minute=30), ) actual_task = Task( "actual_task", priority=1.0, start_time=datetime(2020, 5, 1, hour=13), end_time=datetime(2020, 5, 1, hour=14, minute=30), ) planned = Schedule("planned", [planned_task]) actual = Schedule("actual", [actual_task]) # Set new schedules in session. session.set_new_schedules(planned, actual) # Test session values. assert session.history_pos == 1 assert len(session.edit_history) == 2 assert len(session.edit_history[0][0].tasks) == 0 assert len(session.edit_history[0][1].tasks) == 0 assert len(session.edit_history[1][0].tasks) == 1 assert len(session.edit_history[1][1].tasks) == 1 assert session.edit_history[1][0].tasks[0] == planned_task assert session.edit_history[1][1].tasks[0] == actual_task
def test_sort_tasks(): """ Test for correct task sorting. """ tasks = [ Task( "task_%d" % i, start_time=datetime(2020, 5, 1, hour=i), end_time=datetime(2020, 5, 1, hour=i + 1), ) for i in range(10) ] schedule = Schedule("test", tasks) for i in range(len(schedule.tasks) - 1): assert schedule.tasks[i].start_time < schedule.tasks[i + 1].start_time
def test_get_task_index_invalid(): """ Test getting task index with invalid queries. """ # Construct schedule. tasks = [ Task( "task1", priority=1.0, start_time=datetime(2020, 5, 1, hour=12), end_time=datetime(2020, 5, 1, hour=13, minute=30), ), Task( "task2", priority=1.0, start_time=datetime(2020, 5, 1, hour=13, minute=30), end_time=datetime(2020, 5, 1, hour=14, minute=30), ), Task( "task3", priority=2.0, start_time=datetime(2020, 5, 2, hour=12), end_time=datetime(2020, 5, 2, hour=13, minute=30), ), Task( "task4", priority=2.0, start_time=datetime(2020, 5, 2, hour=23), end_time=datetime(2020, 5, 2, hour=23, minute=30), ), Task( "task5", priority=1.0, start_time=datetime(2020, 5, 3, hour=1, minute=30), end_time=datetime(2020, 5, 3, hour=1, minute=59), ), Task( "task6", priority=1.0, start_time=datetime(2020, 6, 3, hour=1, minute=30), end_time=datetime(2020, 6, 3, hour=1, minute=59), ), ] schedule = Schedule("test", tasks) # Execute queries and check for errors. queries = [ (date(2020, 5, 1), 2), (date(2020, 5, 2), 2), (date(2020, 5, 3), 1), (date(2020, 6, 3), 1), (date(2020, 5, 4), 0), ] for query in queries: failed = False try: task_index = schedule.get_task_index(query[0], query[1]) except: failed = True assert failed
def test_set_new_schedules_2(): """ Call `set_new_schedules()` in the second case of edit history (cases listed in docstring of `set_new_schedules()`). """ # Construct session. session = Session("test") # Construct planned and new schedules. planned_tasks = [ Task( "planned_task_1", priority=1.0, start_time=datetime(2020, 5, 1, hour=12), end_time=datetime(2020, 5, 1, hour=13, minute=30), ), Task( "planned_task_2", priority=1.0, start_time=datetime(2020, 5, 1, hour=12, minute=30), end_time=datetime(2020, 5, 1, hour=14), ), ] actual_tasks = [ Task( "actual_task_1", priority=1.0, start_time=datetime(2020, 5, 1, hour=13), end_time=datetime(2020, 5, 1, hour=14, minute=30), ), Task( "actual_task_2", priority=1.0, start_time=datetime(2020, 5, 1, hour=13, minute=30), end_time=datetime(2020, 5, 1, hour=15), ), ] planned = [ Schedule("planned_1", [planned_tasks[0]]), Schedule("planned_2", [planned_tasks[1]]), ] actual = [ Schedule("actual_1", [actual_tasks[0]]), Schedule("actual_2", [actual_tasks[1]]), ] # Set new schedules in session, undo, then redo with new versions. session.set_new_schedules(planned[0], actual[0]) session.undo() session.set_new_schedules(planned[1], actual[1]) # Test session values. assert session.history_pos == 1 assert len(session.edit_history) == 2 assert len(session.edit_history[0][0].tasks) == 0 assert len(session.edit_history[0][1].tasks) == 0 assert len(session.edit_history[1][0].tasks) == 1 assert len(session.edit_history[1][1].tasks) == 1 assert session.edit_history[1][0].tasks[0] == planned_tasks[1] assert session.edit_history[1][1].tasks[0] == actual_tasks[1]