Skip to content
Closed
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions DIRECTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,7 @@
* [ScanScheduling](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/scheduling/diskscheduling/ScanScheduling.java)
* [SSFScheduling](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/scheduling/diskscheduling/SSFScheduling.java)
* [EDFScheduling](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/scheduling/EDFScheduling.java)
* [EnergyAwareScheduling](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/scheduling/EnergyAwareScheduling.java)
* [FCFSScheduling](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/scheduling/FCFSScheduling.java)
* [HighestResponseRatioNextScheduling](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/scheduling/HighestResponseRatioNextScheduling.java)
* [JobSchedulingWithDeadline](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/scheduling/JobSchedulingWithDeadline.java)
Expand Down Expand Up @@ -1063,6 +1064,7 @@
* [ScanSchedulingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/scheduling/diskscheduling/ScanSchedulingTest.java)
* [SSFSchedulingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/scheduling/diskscheduling/SSFSchedulingTest.java)
* [EDFSchedulingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/scheduling/EDFSchedulingTest.java)
* [EnergyAwareSchedulingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/scheduling/EnergyAwareSchedulingTest.java)
* [FCFSSchedulingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/scheduling/FCFSSchedulingTest.java)
* [HighestResponseRatioNextSchedulingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/scheduling/HighestResponseRatioNextSchedulingTest.java)
* [JobSchedulingWithDeadlineTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/scheduling/JobSchedulingWithDeadlineTest.java)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.thealgorithms.scheduling;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

/**
* EnergyAwareScheduling schedules tasks based on their energy consumption profile,
* aiming to minimize the overall energy usage of the system.
*
* Use Case: Mobile devices, embedded systems, and data centers that need to save power
* while maintaining performance.
*
* @author Hardvan
*/
public final class EnergyAwareScheduling {

static class Task {
String name;
int energyConsumption;

Task(String name, int energyConsumption) {
this.name = name;
this.energyConsumption = energyConsumption;
}
}

private final List<Task> tasks;

public EnergyAwareScheduling() {
tasks = new ArrayList<>();
}

public void addTask(String name, int energyConsumption) {
tasks.add(new Task(name, energyConsumption));
}

public List<String> scheduleTasks() {
tasks.sort(Comparator.comparingInt(t -> t.energyConsumption));
List<String> scheduledOrder = new ArrayList<>();
for (Task task : tasks) {
scheduledOrder.add(task.name);
}
return scheduledOrder;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.thealgorithms.scheduling;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

public class EnergyAwareSchedulingTest {

private EnergyAwareScheduling scheduler;

@BeforeEach
public void setup() {
scheduler = new EnergyAwareScheduling();
}

@Test
public void testAddAndScheduleSingleTask() {
scheduler.addTask("Task1", 10);
List<String> expected = List.of("Task1");
assertEquals(expected, scheduler.scheduleTasks());
}

@Test
public void testScheduleMultipleTasks() {
scheduler.addTask("Task1", 10);
scheduler.addTask("Task2", 5);
scheduler.addTask("Task3", 15);
List<String> expected = List.of("Task2", "Task1", "Task3");
assertEquals(expected, scheduler.scheduleTasks());
}

@Test
public void testScheduleTasksWithSameConsumption() {
scheduler.addTask("Task1", 10);
scheduler.addTask("Task2", 10);
scheduler.addTask("Task3", 5);
List<String> expected = List.of("Task3", "Task1", "Task2");
assertEquals(expected, scheduler.scheduleTasks());
}

@Test
public void testEmptyScheduler() {
List<String> expected = List.of();
assertEquals(expected, scheduler.scheduleTasks());
}
}