int main(int argc, char **argv) {
int i;
-
+
/* initialisation of SD */
SD_init(&argc, argv);
-/* xbt_log_control_set("sd_test.thres=debug"); */
-/* xbt_log_control_set("sd.thres=debug"); */
-
if (argc < 2) {
- INFO1("Usage: %s platform_file", argv[0]);
- INFO1("example: %s sd_platform.xml", argv[0]);
- exit(1);
+ INFO1("Usage: %s platform_file", argv[0]);
+ INFO1("example: %s sd_platform.xml", argv[0]);
+ exit(1);
}
/* creation of the environment */
- char * platform_file = argv[1];
+ const char * platform_file = argv[0];
SD_create_environment(platform_file);
- /* test the estimation functions (use small_platform.xml) */
+ /* test the estimation functions */
const SD_workstation_t *workstations = SD_workstation_get_list();
SD_workstation_t w1 = workstations[0];
SD_workstation_t w2 = workstations[1];
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 *\/ */
+ /* SD_task_dependency_add(NULL, NULL, taskA, taskD); /\* deadlock */
+
+ xbt_ex_t ex;
+
+ TRY {
+ SD_task_dependency_add(NULL, NULL, taskA, taskA); /* shouldn't work and must raise an exception */
+ xbt_assert0(0, "Hey, I can add a dependency between Task A and Task A!");
+ }
+ CATCH (ex) {
+ }
+
+ TRY {
+ SD_task_dependency_add(NULL, NULL, taskA, taskB); /* shouldn't work and must raise an exception */
+ xbt_assert0(0, "Oh oh, I can add an already existing dependency!");
+ }
+ CATCH (ex) {
+ }
+
+ SD_task_dependency_remove(taskA, taskB);
+
+ TRY {
+ SD_task_dependency_remove(taskC, taskA); /* shouldn't work and must raise an exception */
+ xbt_assert0(0, "Dude, I can remove an unknown dependency!");
+ }
+ CATCH (ex) {
+ }
+
+ TRY {
+ SD_task_dependency_remove(taskC, taskC); /* shouldn't work and must raise an exception */
+ xbt_assert0(0, "Wow, I can remove a dependency between Task C and itself!");
+ }
+ CATCH (ex) {
+ }
+
+
+ /* if everything is ok, no exception is forwarded or rethrown by main() */
+
+ /* watch points */
+ SD_task_watch(taskD, SD_DONE);
+ SD_task_watch(taskB, SD_DONE);
+ SD_task_unwatch(taskD, SD_DONE);
+
/* scheduling parameters */
const int workstation_number = 2;
- /* const SD_workstation_t *workstation_list = SD_workstation_get_list();*/
const SD_workstation_t workstation_list[] = {w1, w2};
double computation_amount[] = {computation_amount1, computation_amount2};
double communication_amount[] =
SD_task_schedule(taskD, workstation_number, workstation_list,
computation_amount, communication_amount, rate);
- SD_task_watch(taskC, SD_DONE);
-
SD_task_t *changed_tasks;
- changed_tasks = SD_simulate(0.001);
+ changed_tasks = SD_simulate(-1.0);
+ xbt_assert0(changed_tasks[0] == taskD &&
+ changed_tasks[1] == taskB &&
+ changed_tasks[2] == taskC &&
+ changed_tasks[3] == NULL,
+ "Unexpected simulation results");
- while (changed_tasks[0] != NULL) {
- INFO0("Tasks whose state has changed:");
- i = 0;
- while(changed_tasks[i] != NULL) {
- switch (SD_task_get_state(changed_tasks[i])) {
- case SD_SCHEDULED:
- INFO1("%s is scheduled.", SD_task_get_name(changed_tasks[i]));
- break;
- case SD_READY:
- INFO1("%s is ready.", SD_task_get_name(changed_tasks[i]));
- break;
- case SD_RUNNING:
- INFO1("%s is running.", SD_task_get_name(changed_tasks[i]));
- break;
- case SD_DONE:
- INFO1("%s is done.", SD_task_get_name(changed_tasks[i]));
- break;
- case SD_FAILED:
- INFO1("%s is failed.", SD_task_get_name(changed_tasks[i]));
- break;
- default:
- INFO1("Unknown status for %s", SD_task_get_name(changed_tasks[i]));
- break;
- }
- i++;
- }
- xbt_free(changed_tasks);
- changed_tasks = SD_simulate(100);
- }
-
xbt_free(changed_tasks);
DEBUG0("Destroying tasks...");
SD_exit();
return 0;
}
+
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE platform_description SYSTEM "surfxml.dtd">
+<platform_description version="1">
+ <!-- ljlkj -->
+ <cpu name="Tremblay" power="98095000"/>
+ <cpu name="Jupiter" power="76296000"/>
+ <cpu name="Fafard" power="76296000"/>
+ <cpu name="Ginette" power="48492000"/>
+ <cpu name="Bourassa" power="48492000"/>
+ <network_link name="6" bandwidth="41279125" latency="5.9904e-05"/>
+ <network_link name="11" bandwidth="252750" latency="0.00570455"/>
+ <network_link name="3" bandwidth="34285625" latency="0.000514433"/>
+ <network_link name="7" bandwidth="11618875" latency="0.00018998"/>
+ <network_link name="9" bandwidth="7209750" latency="0.001461517"/>
+ <network_link name="12" bandwidth="1792625" latency="0.007877863"/>
+ <network_link name="2" bandwidth="118682500" latency="0.000136931"/>
+ <network_link name="8" bandwidth="8158000" latency="0.000270544"/>
+ <network_link name="1" bandwidth="34285625" latency="0.000514433"/>
+ <network_link name="4" bandwidth="10099625" latency="0.00047978"/>
+ <network_link name="0" bandwidth="41279125" latency="5.9904e-05"/>
+ <network_link name="10" bandwidth="4679750" latency="0.000848712"/>
+ <network_link name="5" bandwidth="27946250" latency="0.000278066"/>
+ <network_link name="loopback_FATPIPE" bandwidth="10000000" latency="0.1" sharing_policy="FATPIPE"/>
+ <network_link name="loopback" bandwidth="498000000" latency="0.000015"/>
+ <route src="Tremblay" dst="Tremblay"><route_element name="loopback"/></route>
+ <route src="Jupiter" dst="Jupiter"><route_element name="loopback"/></route>
+ <route src="Fafard" dst="Fafard"><route_element name="loopback"/></route>
+ <route src="Ginette" dst="Ginette"><route_element name="loopback"/></route>
+ <route src="Bourassa" dst="Bourassa"><route_element name="loopback"/></route>
+ <route src="Tremblay" dst="Jupiter">
+ <route_element name="9"/>
+ </route>
+ <route src="Tremblay" dst="Fafard">
+ <route_element name="4"/><route_element name="3"/><route_element name="2"/><route_element name="0"/><route_element name="1"/><route_element name="8"/>
+ </route>
+ <route src="Tremblay" dst="Ginette">
+ <route_element name="4"/><route_element name="3"/><route_element name="5"/>
+ </route>
+ <route src="Tremblay" dst="Bourassa">
+ <route_element name="4"/><route_element name="3"/><route_element name="2"/><route_element name="0"/><route_element name="1"/><route_element name="6"/><route_element name="7"/>
+ </route>
+ <route src="Jupiter" dst="Tremblay">
+ <route_element name="9"/>
+ </route>
+ <route src="Jupiter" dst="Fafard">
+ <route_element name="9"/><route_element name="4"/><route_element name="3"/><route_element name="2"/><route_element name="0"/><route_element name="1"/><route_element name="8"/>
+ </route>
+ <route src="Jupiter" dst="Ginette">
+ <route_element name="9"/><route_element name="4"/><route_element name="3"/><route_element name="5"/>
+ </route>
+ <route src="Jupiter" dst="Bourassa">
+ <route_element name="9"/><route_element name="4"/><route_element name="3"/><route_element name="2"/><route_element name="0"/><route_element name="1"/><route_element name="6"/><route_element name="7"/>
+ </route>
+ <route src="Fafard" dst="Tremblay">
+ <route_element name="8"/><route_element name="1"/><route_element name="0"/><route_element name="2"/><route_element name="3"/><route_element name="4"/>
+ </route>
+ <route src="Fafard" dst="Jupiter">
+ <route_element name="8"/><route_element name="1"/><route_element name="0"/><route_element name="2"/><route_element name="3"/><route_element name="4"/><route_element name="9"/>
+ </route>
+ <route src="Fafard" dst="Ginette">
+ <route_element name="8"/><route_element name="1"/><route_element name="0"/><route_element name="2"/><route_element name="5"/>
+ </route>
+ <route src="Fafard" dst="Bourassa">
+ <route_element name="8"/><route_element name="6"/><route_element name="7"/>
+ </route>
+ <route src="Ginette" dst="Tremblay">
+ <route_element name="5"/><route_element name="3"/><route_element name="4"/>
+ </route>
+ <route src="Ginette" dst="Jupiter">
+ <route_element name="5"/><route_element name="3"/><route_element name="4"/><route_element name="9"/>
+ </route>
+ <route src="Ginette" dst="Fafard">
+ <route_element name="5"/><route_element name="2"/><route_element name="0"/><route_element name="1"/><route_element name="8"/>
+ </route>
+ <route src="Ginette" dst="Bourassa">
+ <route_element name="5"/><route_element name="2"/><route_element name="0"/><route_element name="1"/><route_element name="6"/><route_element name="7"/>
+ </route>
+ <route src="Bourassa" dst="Tremblay">
+ <route_element name="7"/><route_element name="6"/><route_element name="1"/><route_element name="0"/><route_element name="2"/><route_element name="3"/><route_element name="4"/>
+ </route>
+ <route src="Bourassa" dst="Jupiter">
+ <route_element name="7"/><route_element name="6"/><route_element name="1"/><route_element name="0"/><route_element name="2"/><route_element name="3"/><route_element name="4"/><route_element name="9"/>
+ </route>
+ <route src="Bourassa" dst="Fafard">
+ <route_element name="7"/><route_element name="6"/><route_element name="8"/>
+ </route>
+ <route src="Bourassa" dst="Ginette">
+ <route_element name="7"/><route_element name="6"/><route_element name="1"/><route_element name="0"/><route_element name="2"/><route_element name="5"/>
+ </route>
+</platform_description>