From 00d75bd0d94fe7ae57f82a5347d6398f8df04540 Mon Sep 17 00:00:00 2001
From: koehle1u <nicolas.koehle7@etu.univ-lorraine.fr>
Date: Sun, 9 Apr 2023 20:27:47 +0200
Subject: [PATCH] fix

---
 src/algo.c     | 20 +++++++++++---------
 src/schedule.c |  8 +++++---
 src/test.c     | 16 +++++++++-------
 3 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/src/algo.c b/src/algo.c
index 7f1627a..91ad43f 100644
--- a/src/algo.c
+++ b/src/algo.c
@@ -302,7 +302,6 @@ struct schedule_t * create_schedule(Instance I, int num_m, int preemption, int b
 		struct tree_node_t* event_node = tree_min(get_root(event_tree));  // recuperation du node a l instant t le plus petit
 		struct event_key_t* event_key = (struct event_key_t*) get_tree_node_key(event_node);
 		struct task_t* task = (struct task_t*) get_tree_node_data(event_node); //recuperer la data et la cast en tache
-		
 		// Si e concerne la libération d'une tache Tj
 		if (get_event_type(event_key) == EVT_LIBERATION) {
 			int machine = find_empty_machine(ordonnancement, get_event_time(event_key));
@@ -361,15 +360,18 @@ struct schedule_t * create_schedule(Instance I, int num_m, int preemption, int b
 
 				//Affecter Tk a Mi en t dans S
 				int machine = find_empty_machine(ordonnancement, get_event_time(event_key));
-				add_task_to_schedule(ordonnancement, shortest_task, machine, get_event_time(event_key), get_event_time(event_key) + get_event_processing_time(event_key));
-
-				//Ajouter dans E l’ ́evenement fin d’execution de la tache
-				struct event_key_t* end_key = new_event_key(EVT_FIN_EXEC, get_event_time(event_key) + get_event_processing_time(event_key), get_event_processing_time(event_key), get_task_id(task), machine);
-				tree_insert(event_tree, end_key, shortest_task);
-
-				if(get_tree_size(ready_tasks) != 0){
-                	tree_remove(ready_tasks, shortest_task_key);
+				if(machine != -1){
+					add_task_to_schedule(ordonnancement, shortest_task, machine, get_event_time(event_key), get_event_time(event_key) + get_event_processing_time(event_key));
+				
+					//Ajouter dans E l’ ́evenement fin d’execution de la tache
+					struct event_key_t* end_key = new_event_key(EVT_FIN_EXEC, get_event_time(event_key) + get_event_processing_time(event_key), get_event_processing_time(event_key), get_task_id(task), machine);
+					tree_insert(event_tree, end_key, shortest_task);
+
+					if(get_tree_size(ready_tasks) != 0){
+                		tree_remove(ready_tasks, shortest_task_key);
+					}
 				}
+
             }
 
 
diff --git a/src/schedule.c b/src/schedule.c
index 25a9f62..3edf619 100644
--- a/src/schedule.c
+++ b/src/schedule.c
@@ -221,17 +221,19 @@ unsigned long preempt_task(struct schedule_t * S, int machine, unsigned long new
 
 unsigned long get_makespan(struct schedule_t * S) {
     assert(S);
-
     unsigned long makespan = 0;
-
     for(int i = 0; i < get_num_machines(S); i++) {
         struct list_t* machine = get_schedule_of_machine(S, i);
+		assert(machine);
+		struct list_node_t* list_tail = get_list_tail(machine);
+		if(list_tail == 0)
+		continue;
         struct schedule_node_t* last_task = (struct schedule_node_t*) get_list_node_data(get_list_tail(machine));
+		assert(last_task);
         unsigned long end_time = get_schedule_node_end_time(last_task);
         if(end_time > makespan) {
             makespan = end_time;
         }
     }
-
     return makespan;
 }
diff --git a/src/test.c b/src/test.c
index 6df9454..d494272 100644
--- a/src/test.c
+++ b/src/test.c
@@ -207,9 +207,9 @@ void test_schedule_creation_view() {
     Instance I = new_list(view_task, delete_task);
 
     struct task_t* task1 = new_task(strdup("T1"), 5, 3);
-    struct task_t* task2 = new_task(strdup("T2"), 3, 0);
-    struct task_t* task3 = new_task(strdup("T3"), 2, 2);
-    struct task_t* task4 = new_task(strdup("T4"), 1, 0);
+    struct task_t* task2 = new_task(strdup("T2"), 3, 3);
+    struct task_t* task3 = new_task(strdup("T3"), 2, 3);
+    struct task_t* task4 = new_task(strdup("T4"), 8, 3);
 
     list_insert_last(I, task1);
     list_insert_last(I, task2);
@@ -220,24 +220,26 @@ void test_schedule_creation_view() {
     view_instance(I);
 	printf("Instance viewed \n");
 
-    struct schedule_t* S = create_schedule(I, 5, 0, 0);
+    struct schedule_t* S = create_schedule(I, 30, 0, 0);
 	printf("\nView Schedule:\n");
     view_schedule(S);
     delete_schedule(S);
-	printf("debug 1 !\n");
+	printf("schedule deleted !\n");
     delete_instance(I, 0);
-	printf("debug 2 !\n");
-	printf("schedule func finished !\n");
+	printf("instance deleted !\n");
+	printf("schedule function finished !\n");
 
 }
 
 int main() {
 	test_schedule_creation_view();
+	/*
 	test_list_insert_last();
 	test_multiple_list_insert_first();
 	test_multiple_list_insert_after();
 	test_trees_balanced();
 	test_instance();
+	*/
 
 	return EXIT_SUCCESS;
 }
\ No newline at end of file
-- 
GitLab