|
| 1 | +package com.thealgorithms.scheduling; |
| 2 | + |
| 3 | +import static org.junit.jupiter.api.Assertions.assertEquals; |
| 4 | + |
| 5 | +import java.util.ArrayList; |
| 6 | +import java.util.List; |
| 7 | +import org.junit.jupiter.api.BeforeEach; |
| 8 | +import org.junit.jupiter.api.Test; |
| 9 | + |
| 10 | +public class EDFSchedulingTest { |
| 11 | + |
| 12 | + private List<EDFScheduling.Process> processes; |
| 13 | + |
| 14 | + @BeforeEach |
| 15 | + public void setup() { |
| 16 | + processes = createProcesses(); |
| 17 | + } |
| 18 | + |
| 19 | + @Test |
| 20 | + public void testEDFScheduling() { |
| 21 | + EDFScheduling edfScheduling = new EDFScheduling(processes); |
| 22 | + List<EDFScheduling.Process> executedProcesses = edfScheduling.scheduleProcesses(); |
| 23 | + |
| 24 | + // Assert the correct number of processes |
| 25 | + assertEquals(3, executedProcesses.size()); |
| 26 | + |
| 27 | + // Assert that processes are executed in order of earliest deadline first |
| 28 | + EDFScheduling.Process process1 = executedProcesses.get(0); |
| 29 | + assertEquals("P2", process1.getProcessId()); |
| 30 | + assertEquals(0, process1.getWaitingTime()); |
| 31 | + assertEquals(3, process1.getTurnAroundTime()); |
| 32 | + |
| 33 | + EDFScheduling.Process process2 = executedProcesses.get(1); |
| 34 | + assertEquals("P1", process2.getProcessId()); |
| 35 | + assertEquals(3, process2.getWaitingTime()); |
| 36 | + assertEquals(10, process2.getTurnAroundTime()); |
| 37 | + |
| 38 | + EDFScheduling.Process process3 = executedProcesses.get(2); |
| 39 | + assertEquals("P3", process3.getProcessId()); |
| 40 | + assertEquals(10, process3.getWaitingTime()); |
| 41 | + assertEquals(18, process3.getTurnAroundTime()); |
| 42 | + } |
| 43 | + |
| 44 | + @Test |
| 45 | + public void testProcessMissedDeadline() { |
| 46 | + // Modify the deadline of a process to ensure it will miss its deadline |
| 47 | + processes.get(1).setTurnAroundTime(5); // Set P1's deadline to 5 (which it will miss) |
| 48 | + |
| 49 | + EDFScheduling edfScheduling = new EDFScheduling(processes); |
| 50 | + edfScheduling.scheduleProcesses(); |
| 51 | + |
| 52 | + // Check if the process with ID "P1" missed its deadline |
| 53 | + assertEquals("P1", processes.get(1).getProcessId()); |
| 54 | + } |
| 55 | + |
| 56 | + private List<EDFScheduling.Process> createProcesses() { |
| 57 | + // Process ID, Burst Time, Deadline |
| 58 | + EDFScheduling.Process process1 = new EDFScheduling.Process("P1", 7, 10); // 7 burst time, 10 deadline |
| 59 | + EDFScheduling.Process process2 = new EDFScheduling.Process("P2", 3, 5); // 3 burst time, 5 deadline |
| 60 | + EDFScheduling.Process process3 = new EDFScheduling.Process("P3", 8, 18); // 8 burst time, 18 deadline |
| 61 | + |
| 62 | + List<EDFScheduling.Process> processes = new ArrayList<>(); |
| 63 | + processes.add(process1); |
| 64 | + processes.add(process2); |
| 65 | + processes.add(process3); |
| 66 | + |
| 67 | + return processes; |
| 68 | + } |
| 69 | +} |
0 commit comments