Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Optimize SD_simulate and fix bugs
[simgrid.git] / examples / simdag / sd_test.c
index 05cc67079aea03e17589a8450101359cb0c00589..72105d57ddcd6b25beb60ac021ed76accb585aaa 100644 (file)
@@ -24,15 +24,12 @@ int main(int argc, char **argv) {
   SD_task_t taskC = SD_task_create("Task C", NULL, 30.0);
   SD_task_t taskD = SD_task_create("Task D", NULL, 60.0);
   
-
   SD_task_dependency_add(NULL, NULL, taskB, taskA);
   SD_task_dependency_add(NULL, NULL, taskC, taskA);
   SD_task_dependency_add(NULL, NULL, taskD, taskB);
   SD_task_dependency_add(NULL, NULL, taskD, taskC);
   /*  SD_task_dependency_add(NULL, NULL, taskA, taskD); /\* deadlock */
 
-  /* if everything is ok, no exception is forwarded or rethrown by main() */
-
   /* watch points */
   /*  SD_task_watch(taskB, SD_DONE);*/
 
@@ -58,25 +55,43 @@ int main(int argc, char **argv) {
   SD_task_schedule(taskD, workstation_number, workstation_list,
                   computation_amount, communication_amount, rate);
 
-  printf("Launching simulation...\n");
-  SD_task_t *changed_tasks = SD_simulate(100);
-  int i = 0;
+  SD_task_watch(taskC, SD_DONE);
+
+  SD_task_t *changed_tasks;
+  int i;
+
+  changed_tasks = SD_simulate(100);
   
-  printf("Simulation results:\n");
-  while(changed_tasks[i] != NULL) {
-    switch (SD_task_get_state(changed_tasks[i])) {
-    case SD_DONE:
-      printf("%s is done.\n", SD_task_get_name(changed_tasks[i]));
-      break;
-    case SD_FAILED:
-      printf("%s is failed.\n", SD_task_get_name(changed_tasks[i]));
-      break;
-    default:
-      printf("Unknown status for %s\n", SD_task_get_name(changed_tasks[i]));
-      break;
+  while (changed_tasks[0] != NULL) {
+    printf("Tasks whose state has changed:\n");
+    i = 0;
+    while(changed_tasks[i] != NULL) {
+      switch (SD_task_get_state(changed_tasks[i])) {
+      case SD_SCHEDULED:
+       printf("%s is scheduled.\n", SD_task_get_name(changed_tasks[i]));
+       break;
+      case SD_READY:
+       printf("%s is ready.\n", SD_task_get_name(changed_tasks[i]));
+       break;
+      case SD_RUNNING:
+       printf("%s is running.\n", SD_task_get_name(changed_tasks[i]));
+       break;
+      case SD_DONE:
+       printf("%s is done.\n", SD_task_get_name(changed_tasks[i]));
+       break;
+      case SD_FAILED:
+       printf("%s is failed.\n", SD_task_get_name(changed_tasks[i]));
+       break;
+      default:
+       printf("Unknown status for %s\n", SD_task_get_name(changed_tasks[i]));
+       break;
+      }
+      i++;
     }
-    i++;
+    free(changed_tasks);
+    changed_tasks = SD_simulate(100);
   }
+
   free(changed_tasks);
 
   SD_task_destroy(taskA);