|
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