From de64a17fd06ebf78fd371e5a839e43558dd31402 Mon Sep 17 00:00:00 2001
From: Nils Vreman <nils.vreman@gmail.com>
Date: Tue, 21 Aug 2018 16:05:38 +0200
Subject: [PATCH] Fixed EDF hopefully. Not sure but it looks promising

---
 TODO.md           | 9 +++------
 strategy/EDF.java | 5 +++--
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/TODO.md b/TODO.md
index 82a5e7a..94c4bd0 100644
--- a/TODO.md
+++ b/TODO.md
@@ -3,13 +3,12 @@
 
 ## TODO
 1. Write "Help" documentation
-2. Add schedulability checks
+2. Add schedulability checks *Maybe*
 
 ## FIXED
 1. Fix issue with taskset not arranging correctly when tasks are added before scheduling algorithm is choosen. *FIXED*
-2. EDF is implemented poorly. It is wrong when sorting by priority (when time till deadline is equal). *Think it works fine now*
-3. Fix Strategy-based priority assignment *- WORKS CORRECTLY?*
-4. Make space between buttons on left and the taskset-list. *- FIXED BUT NEEDS REVISITING*
+2. Fix Strategy-based priority assignment *FIXED*
+3. Make space between buttons on left and the taskset-list. *FIXED*
 
 ## SUGGESTIONS
 *- Add Task, Change Task, Remove Task på samma rad*
@@ -27,6 +26,4 @@ Bort med alla 3 knapparna, lägg ett "+"-tecken under den task som är längst n
 
 *- File-menyn ändra till "Save As..." och "Open File..." eller "Open Project...". Ta bort Close, det är redundant*
 
-- Hover-funktion på typ allt i guit där det efter 1 sek dyker upp en liten bubbla som förklarar vad det man hoverar är för något. Användarvänligt
-
 *- Påminnelse ifall man inte vill spara projektet innan man stänger ned programmet, ifall man ändrat något. Detta görs enkelt om du håller reda på states med historik*
diff --git a/strategy/EDF.java b/strategy/EDF.java
index 2d4726b..e10316b 100644
--- a/strategy/EDF.java
+++ b/strategy/EDF.java
@@ -19,8 +19,9 @@ public class EDF extends QueueStrategy {
         // (compares distance to deadline first and then priority)
         Comparator<Integer> order = 
             (Integer i1, Integer i2) -> {
-                int res = ts.getTask(i1).get().deadline() - time % ts.getTask(i1).get().deadline() - 
-                            (ts.getTask(i2).get().deadline() - time % ts.getTask(i2).get().deadline());
+                int res = 
+                    (time / ts.getTask(i1).get().period()) * ts.getTask(i1).get().period() + ts.getTask(i1).get().deadline() - time - 
+                    ((time / ts.getTask(i2).get().period()) * ts.getTask(i2).get().period() + ts.getTask(i2).get().deadline() - time);
                 if ( res == 0 ) return i1 - i2;
                 else return res;
             };
-- 
GitLab