Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update function SD_simulate.
[simgrid.git] / testsuite / simdag / sd_test.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "simdag/simdag.h"
4 #include "xbt/ex.h"
5
6 int main(int argc, char **argv) {
7   
8   /* No deployment file
9   if (argc < 3) {
10      printf ("Usage: %s platform_file deployment_file\n", argv[0]);
11      printf ("example: %s msg_platform.xml msg_deployment.xml\n", argv[0]);
12      exit(1);
13   }
14   */
15
16   if (argc < 2) {
17      printf ("Usage: %s platform_file\n", argv[0]);
18      printf ("example: %s msg_platform.xml\n", argv[0]);
19      exit(1);
20   }
21
22   /* initialisation of SD */
23   SD_init(&argc, argv);
24
25   /* creation of the environment */
26   char * platform_file = argv[1];
27   SD_create_environment(platform_file);
28
29   /* creation of the tasks and their dependencies */
30   SD_task_t taskA = SD_task_create("Task A", NULL, 10.0);
31   SD_task_t taskB = SD_task_create("Task B", NULL, 40.0);
32   SD_task_t taskC = SD_task_create("Task C", NULL, 30.0);
33   SD_task_t taskD = SD_task_create("Task D", NULL, 60.0);
34   
35
36   SD_task_dependency_add(NULL, NULL, taskB, taskA);
37   SD_task_dependency_add(NULL, NULL, taskC, taskA);
38   SD_task_dependency_add(NULL, NULL, taskD, taskB);
39   SD_task_dependency_add(NULL, NULL, taskD, taskC);
40   /*  SD_task_dependency_add(NULL, NULL, taskA, taskD); /\* deadlock */
41
42 /*   xbt_ex_t ex; */
43
44 /*   TRY { */
45 /*     SD_task_dependency_add(NULL, NULL, taskA, taskA); /\* shouldn't work and must raise an exception *\/ */
46 /*     xbt_assert0(0, "Hey, I can add a dependency between Task A and Task A!"); */
47 /*   } */
48 /*   CATCH (ex) { */
49 /*   } */
50   
51 /*   TRY { */
52 /*     SD_task_dependency_add(NULL, NULL, taskA, taskB); /\* shouldn't work and must raise an exception *\/ */
53 /*     xbt_assert0(0, "Oh oh, I can add an already existing dependency!"); */
54 /*   } */
55 /*   CATCH (ex) { */
56 /*   } */
57
58 /*   SD_task_dependency_remove(taskA, taskB); */
59
60 /*   TRY { */
61 /*     SD_task_dependency_remove(taskC, taskA); /\* shouldn't work and must raise an exception *\/ */
62 /*     xbt_assert0(0, "Dude, I can remove an unknown dependency!"); */
63 /*   } */
64 /*   CATCH (ex) { */
65 /*   } */
66
67 /*   TRY { */
68 /*     SD_task_dependency_remove(taskC, taskC); /\* shouldn't work and must raise an exception *\/ */
69 /*     xbt_assert0(0, "Wow, I can remove a dependency between Task C and itself!"); */
70 /*   } */
71 /*   CATCH (ex) { */
72 /*   } */
73
74
75   /* if everything is ok, no exception is forwarded or rethrown by main() */
76
77   /* watch points */
78   /*  SD_task_watch(taskB, SD_DONE);*/
79
80
81   /* let's launch the simulation! */
82
83   int workstation_number = 2;
84   SD_workstation_t *workstation_list = SD_workstation_get_list();
85   double computation_amount[] = {100, 200};
86   double communication_amount[] =
87     {
88       0, 30,
89       20, 0
90     };
91   double rate = 1;
92
93   SD_task_schedule(taskA, workstation_number, workstation_list,
94                    computation_amount, communication_amount, rate);
95   SD_task_schedule(taskB, workstation_number, workstation_list,
96                    computation_amount, communication_amount, rate);
97   SD_task_schedule(taskC, workstation_number, workstation_list,
98                    computation_amount, communication_amount, rate);
99   SD_task_schedule(taskD, workstation_number, workstation_list,
100                    computation_amount, communication_amount, rate);
101
102   printf("Launching simulation...\n");
103   SD_simulate(100);
104
105   SD_task_destroy(taskA);
106   SD_task_destroy(taskB);
107   SD_task_destroy(taskC);
108   SD_task_destroy(taskD);
109   SD_exit();
110   return 0;
111 }