Logo AND Algorithmique Numérique Distribuée

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