Skip to content

Commit f3a555e

Browse files
committed
feat: Add EnergyAwareScheduling new algorithm with Junit tests
1 parent bcf4034 commit f3a555e

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.thealgorithms.scheduling;
2+
3+
import java.util.ArrayList;
4+
import java.util.Comparator;
5+
import java.util.List;
6+
7+
/**
8+
* EnergyAwareScheduling schedules tasks based on their energy consumption profile,
9+
* aiming to minimize the overall energy usage of the system.
10+
*
11+
* Use Case: Mobile devices, embedded systems, and data centers that need to save power
12+
* while maintaining performance.
13+
*
14+
* @author Hardvan
15+
*/
16+
public final class EnergyAwareScheduling {
17+
18+
static class Task {
19+
String name;
20+
int energyConsumption;
21+
22+
Task(String name, int energyConsumption) {
23+
this.name = name;
24+
this.energyConsumption = energyConsumption;
25+
}
26+
}
27+
28+
private final List<Task> tasks;
29+
30+
public EnergyAwareScheduling() {
31+
tasks = new ArrayList<>();
32+
}
33+
34+
public void addTask(String name, int energyConsumption) {
35+
tasks.add(new Task(name, energyConsumption));
36+
}
37+
38+
public List<String> scheduleTasks() {
39+
tasks.sort(Comparator.comparingInt(t -> t.energyConsumption));
40+
List<String> scheduledOrder = new ArrayList<>();
41+
for (Task task : tasks) {
42+
scheduledOrder.add(task.name);
43+
}
44+
return scheduledOrder;
45+
}
46+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.thealgorithms.scheduling;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import org.junit.jupiter.api.BeforeEach;
6+
import org.junit.jupiter.api.Test;
7+
8+
import java.util.List;
9+
10+
public class EnergyAwareSchedulingTest {
11+
12+
private EnergyAwareScheduling scheduler;
13+
14+
@BeforeEach
15+
public void setup() {
16+
scheduler = new EnergyAwareScheduling();
17+
}
18+
19+
@Test
20+
public void testAddAndScheduleSingleTask() {
21+
scheduler.addTask("Task1", 10);
22+
List<String> expected = List.of("Task1");
23+
assertEquals(expected, scheduler.scheduleTasks());
24+
}
25+
26+
@Test
27+
public void testScheduleMultipleTasks() {
28+
scheduler.addTask("Task1", 10);
29+
scheduler.addTask("Task2", 5);
30+
scheduler.addTask("Task3", 15);
31+
List<String> expected = List.of("Task2", "Task1", "Task3");
32+
assertEquals(expected, scheduler.scheduleTasks());
33+
}
34+
35+
@Test
36+
public void testScheduleTasksWithSameConsumption() {
37+
scheduler.addTask("Task1", 10);
38+
scheduler.addTask("Task2", 10);
39+
scheduler.addTask("Task3", 5);
40+
List<String> expected = List.of("Task3", "Task1", "Task2");
41+
assertEquals(expected, scheduler.scheduleTasks());
42+
}
43+
44+
@Test
45+
public void testEmptyScheduler() {
46+
List<String> expected = List.of();
47+
assertEquals(expected, scheduler.scheduleTasks());
48+
}
49+
}

0 commit comments

Comments
 (0)