Files
MSCS532_Assignment4/tests/test_task.py
Carlos Gutierrez c1b0fd3aaf Initial commit: Heapsort and Priority Queue Implementation
- Implemented complete Heapsort algorithm with max-heap operations
- Implemented binary heap-based Priority Queue with all core operations
- Created Task class for task scheduling applications
- Implemented Task Scheduler simulation using priority queue
- Added comprehensive test suite (70+ tests, all passing)
- Implemented sorting algorithm comparison utilities (Heapsort vs Quicksort vs Merge Sort)
- Added detailed README with comprehensive analysis and documentation
- Included demonstration scripts for all features
- Generated performance comparison plots
- Modular, well-documented code following academic standards

Author: Carlos Gutierrez
Email: cgutierrez44833@ucumberlands.edu
2025-11-09 21:54:13 -05:00

126 lines
4.5 KiB
Python

"""
Test Suite for Task Class
This module contains tests for the Task class, including comparisons,
priority updates, and deadline checking.
Author: Carlos Gutierrez
Email: cgutierrez44833@ucumberlands.edu
"""
import unittest
import sys
import os
# Add parent directory to path to import src modules
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from src.task import Task
class TestTask(unittest.TestCase):
"""Test cases for Task class."""
def test_task_creation(self):
"""Test creating a task with all parameters."""
task = Task(
task_id="T1",
priority=10,
arrival_time=0.0,
deadline=100.0,
execution_time=5.0,
description="Test task"
)
self.assertEqual(task.task_id, "T1")
self.assertEqual(task.priority, 10)
self.assertEqual(task.arrival_time, 0.0)
self.assertEqual(task.deadline, 100.0)
self.assertEqual(task.execution_time, 5.0)
self.assertEqual(task.description, "Test task")
def test_task_creation_minimal(self):
"""Test creating a task with minimal parameters."""
task = Task("T1", priority=10, arrival_time=0.0)
self.assertEqual(task.task_id, "T1")
self.assertEqual(task.priority, 10)
self.assertEqual(task.arrival_time, 0.0)
self.assertIsNone(task.deadline)
self.assertEqual(task.execution_time, 1.0)
self.assertEqual(task.description, "")
def test_task_comparison_lt(self):
"""Test less than comparison."""
task1 = Task("T1", priority=5, arrival_time=0.0)
task2 = Task("T2", priority=10, arrival_time=1.0)
self.assertTrue(task1 < task2)
self.assertFalse(task2 < task1)
def test_task_comparison_gt(self):
"""Test greater than comparison."""
task1 = Task("T1", priority=10, arrival_time=0.0)
task2 = Task("T2", priority=5, arrival_time=1.0)
self.assertTrue(task1 > task2)
self.assertFalse(task2 > task1)
def test_task_comparison_eq(self):
"""Test equality comparison."""
task1 = Task("T1", priority=10, arrival_time=0.0)
task2 = Task("T2", priority=10, arrival_time=1.0)
task3 = Task("T3", priority=5, arrival_time=2.0)
self.assertTrue(task1 == task2)
self.assertFalse(task1 == task3)
def test_task_comparison_le(self):
"""Test less than or equal comparison."""
task1 = Task("T1", priority=5, arrival_time=0.0)
task2 = Task("T2", priority=10, arrival_time=1.0)
task3 = Task("T3", priority=5, arrival_time=2.0)
self.assertTrue(task1 <= task2)
self.assertTrue(task1 <= task3)
self.assertFalse(task2 <= task1)
def test_task_comparison_ge(self):
"""Test greater than or equal comparison."""
task1 = Task("T1", priority=10, arrival_time=0.0)
task2 = Task("T2", priority=5, arrival_time=1.0)
task3 = Task("T3", priority=10, arrival_time=2.0)
self.assertTrue(task1 >= task2)
self.assertTrue(task1 >= task3)
self.assertFalse(task2 >= task1)
def test_update_priority(self):
"""Test updating task priority."""
task = Task("T1", priority=10, arrival_time=0.0)
self.assertEqual(task.priority, 10)
task.update_priority(20)
self.assertEqual(task.priority, 20)
def test_is_overdue_with_deadline(self):
"""Test checking if task is overdue."""
task = Task("T1", priority=10, arrival_time=0.0, deadline=100.0)
self.assertFalse(task.is_overdue(50.0))
self.assertFalse(task.is_overdue(100.0))
self.assertTrue(task.is_overdue(150.0))
def test_is_overdue_no_deadline(self):
"""Test checking overdue status for task without deadline."""
task = Task("T1", priority=10, arrival_time=0.0)
self.assertFalse(task.is_overdue(1000.0))
def test_time_until_deadline(self):
"""Test calculating time until deadline."""
task = Task("T1", priority=10, arrival_time=0.0, deadline=100.0)
self.assertEqual(task.time_until_deadline(50.0), 50.0)
self.assertEqual(task.time_until_deadline(100.0), 0.0)
self.assertEqual(task.time_until_deadline(150.0), 0.0)
def test_time_until_deadline_no_deadline(self):
"""Test time until deadline for task without deadline."""
task = Task("T1", priority=10, arrival_time=0.0)
self.assertIsNone(task.time_until_deadline(100.0))
if __name__ == '__main__':
unittest.main()