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