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
This commit is contained in:
125
tests/test_task.py
Normal file
125
tests/test_task.py
Normal file
@@ -0,0 +1,125 @@
|
||||
"""
|
||||
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()
|
||||
|
||||
Reference in New Issue
Block a user