|
4 | 4 | import static org.junit.jupiter.api.Assertions.assertTrue;
|
5 | 5 |
|
6 | 6 | import com.thealgorithms.devutils.entities.ProcessDetails;
|
7 |
| -import java.util.ArrayList; |
| 7 | +import java.util.Collections; |
| 8 | +import java.util.List; |
| 9 | +import java.util.stream.Stream; |
| 10 | +import org.junit.jupiter.api.DisplayName; |
8 | 11 | import org.junit.jupiter.api.Test;
|
| 12 | +import org.junit.jupiter.params.ParameterizedTest; |
| 13 | +import org.junit.jupiter.params.provider.Arguments; |
| 14 | +import org.junit.jupiter.params.provider.MethodSource; |
9 | 15 |
|
10 | 16 | class SJFSchedulingTest {
|
11 |
| - private ArrayList<ProcessDetails> process; |
12 |
| - void initialisation0() { |
13 | 17 |
|
14 |
| - process = new ArrayList<>(); |
15 |
| - process.add(new ProcessDetails("1", 0, 6)); |
16 |
| - process.add(new ProcessDetails("2", 1, 2)); |
| 18 | + private static Stream<Arguments> schedulingTestData() { |
| 19 | + return Stream.of(Arguments.of(List.of(new ProcessDetails("1", 0, 6), new ProcessDetails("2", 1, 2)), List.of("1", "2")), |
| 20 | + Arguments.of(List.of(new ProcessDetails("1", 0, 6), new ProcessDetails("2", 1, 2), new ProcessDetails("3", 4, 3), new ProcessDetails("4", 3, 1), new ProcessDetails("5", 6, 4), new ProcessDetails("6", 5, 5)), List.of("1", "4", "2", "3", "5", "6")), |
| 21 | + Arguments.of(List.of(new ProcessDetails("1", 0, 3), new ProcessDetails("2", 1, 2), new ProcessDetails("3", 2, 1)), List.of("1", "3", "2")), Arguments.of(List.of(new ProcessDetails("1", 0, 3), new ProcessDetails("2", 5, 2), new ProcessDetails("3", 9, 1)), List.of("1", "2", "3")), |
| 22 | + Arguments.of(Collections.emptyList(), List.of())); |
17 | 23 | }
|
18 |
| - void initialisation1() { |
19 | 24 |
|
20 |
| - process = new ArrayList<>(); |
21 |
| - process.add(new ProcessDetails("1", 0, 6)); |
22 |
| - process.add(new ProcessDetails("2", 1, 2)); |
23 |
| - process.add(new ProcessDetails("3", 4, 3)); |
24 |
| - process.add(new ProcessDetails("4", 3, 1)); |
25 |
| - process.add(new ProcessDetails("5", 6, 4)); |
26 |
| - process.add(new ProcessDetails("6", 5, 5)); |
27 |
| - } |
28 |
| - |
29 |
| - void initialisation2() { |
30 |
| - |
31 |
| - process = new ArrayList<>(); |
32 |
| - process.add(new ProcessDetails("1", 0, 3)); |
33 |
| - process.add(new ProcessDetails("2", 1, 2)); |
34 |
| - process.add(new ProcessDetails("3", 2, 1)); |
35 |
| - } |
36 |
| - void initialisation3() { |
37 |
| - process = new ArrayList<>(); |
38 |
| - process.add(new ProcessDetails("1", 0, 3)); |
39 |
| - process.add(new ProcessDetails("2", 5, 2)); |
40 |
| - process.add(new ProcessDetails("3", 9, 1)); |
41 |
| - } |
42 |
| - @Test |
43 |
| - void constructor() { |
44 |
| - initialisation0(); |
45 |
| - SJFScheduling a = new SJFScheduling(process); |
46 |
| - assertEquals(6, a.processes.get(0).getBurstTime()); |
47 |
| - assertEquals(2, a.processes.get(1).getBurstTime()); |
| 25 | + @ParameterizedTest(name = "Test SJF schedule: {index}") |
| 26 | + @MethodSource("schedulingTestData") |
| 27 | + void testSJFScheduling(List<ProcessDetails> inputProcesses, List<String> expectedSchedule) { |
| 28 | + SJFScheduling scheduler = new SJFScheduling(inputProcesses); |
| 29 | + scheduler.scheduleProcesses(); |
| 30 | + assertEquals(expectedSchedule, scheduler.getSchedule()); |
48 | 31 | }
|
49 | 32 |
|
50 | 33 | @Test
|
51 |
| - void sort() { |
52 |
| - initialisation1(); |
53 |
| - SJFScheduling a = new SJFScheduling(process); |
54 |
| - a.sortByArrivalTime(); |
55 |
| - assertEquals("1", a.processes.get(0).getProcessId()); |
56 |
| - assertEquals("2", a.processes.get(1).getProcessId()); |
57 |
| - assertEquals("3", a.processes.get(3).getProcessId()); |
58 |
| - assertEquals("4", a.processes.get(2).getProcessId()); |
59 |
| - assertEquals("5", a.processes.get(5).getProcessId()); |
60 |
| - assertEquals("6", a.processes.get(4).getProcessId()); |
61 |
| - } |
| 34 | + @DisplayName("Test sorting by arrival order") |
| 35 | + void testProcessArrivalOrderIsSorted() { |
| 36 | + List<ProcessDetails> processes = List.of(new ProcessDetails("1", 0, 6), new ProcessDetails("2", 1, 2), new ProcessDetails("4", 3, 1), new ProcessDetails("3", 4, 3), new ProcessDetails("6", 5, 5), new ProcessDetails("5", 6, 4)); |
| 37 | + SJFScheduling scheduler = new SJFScheduling(processes); |
| 38 | + List<String> actualOrder = scheduler.getProcesses().stream().map(ProcessDetails::getProcessId).toList(); |
62 | 39 |
|
63 |
| - @Test |
64 |
| - void scheduling() { |
65 |
| - initialisation1(); |
66 |
| - SJFScheduling a = new SJFScheduling(process); |
67 |
| - a.scheduleProcesses(); |
68 |
| - assertEquals("1", a.schedule.get(0)); |
69 |
| - assertEquals("4", a.schedule.get(1)); |
70 |
| - assertEquals("2", a.schedule.get(2)); |
71 |
| - assertEquals("3", a.schedule.get(3)); |
72 |
| - assertEquals("5", a.schedule.get(4)); |
73 |
| - assertEquals("6", a.schedule.get(5)); |
| 40 | + assertEquals(List.of("1", "2", "4", "3", "6", "5"), actualOrder); |
74 | 41 | }
|
75 | 42 |
|
76 | 43 | @Test
|
77 |
| - void schedulingOfTwoProcesses() { |
78 |
| - initialisation0(); |
79 |
| - SJFScheduling a = new SJFScheduling(process); |
80 |
| - a.scheduleProcesses(); |
81 |
| - assertEquals("1", a.schedule.get(0)); |
82 |
| - assertEquals("2", a.schedule.get(1)); |
83 |
| - } |
84 |
| - |
85 |
| - @Test |
86 |
| - void schedulingOfAShortestJobArrivingLast() { |
87 |
| - initialisation2(); |
88 |
| - SJFScheduling a = new SJFScheduling(process); |
89 |
| - a.scheduleProcesses(); |
90 |
| - assertEquals("1", a.schedule.get(0)); |
91 |
| - assertEquals("3", a.schedule.get(1)); |
92 |
| - assertEquals("2", a.schedule.get(2)); |
93 |
| - } |
94 |
| - @Test |
95 |
| - void schedulingWithProcessesNotComingBackToBack() { |
96 |
| - initialisation3(); |
97 |
| - SJFScheduling a = new SJFScheduling(process); |
98 |
| - a.scheduleProcesses(); |
99 |
| - assertEquals("1", a.schedule.get(0)); |
100 |
| - assertEquals("2", a.schedule.get(1)); |
101 |
| - assertEquals("3", a.schedule.get(2)); |
102 |
| - } |
103 |
| - @Test |
104 |
| - void schedulingOfNothing() { |
105 |
| - process = new ArrayList<>(); |
106 |
| - SJFScheduling a = new SJFScheduling(process); |
107 |
| - a.scheduleProcesses(); |
108 |
| - assertTrue(a.schedule.isEmpty()); |
| 44 | + void testSchedulingEmptyList() { |
| 45 | + SJFScheduling scheduler = new SJFScheduling(Collections.emptyList()); |
| 46 | + scheduler.scheduleProcesses(); |
| 47 | + assertTrue(scheduler.getSchedule().isEmpty()); |
109 | 48 | }
|
110 | 49 | }
|
0 commit comments