3 /* A few tests for the maxmin library */
5 /* Copyright (c) 2004 Arnaud Legrand. All rights reserved. */
7 /* This program is free software; you can redistribute it and/or modify it
8 * under the terms of the license (GNU LGPL) which comes with this package. */
14 #include "xbt/sysdep.h"
15 #include "surf/maxmin.h"
16 #include "surf/maxmin_private.h"
19 #include "xbt/module.h"
22 XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test,"Messages specific for surf example");
24 #define PRINT_VAR(var) DEBUG1(#var " = %g",lmm_variable_getvalue(var));
28 /* ==l1== L2 ==L3== */
39 void test1(method_t method);
40 void test1(method_t method)
42 lmm_system_t Sys = NULL ;
43 lmm_constraint_t L1 = NULL;
44 lmm_constraint_t L2 = NULL;
45 lmm_constraint_t L3 = NULL;
47 lmm_variable_t R_1_2_3 = NULL;
48 lmm_variable_t R_1 = NULL;
49 lmm_variable_t R_2 = NULL;
50 lmm_variable_t R_3 = NULL;
52 if(method==LAGRANGE_VEGAS){
53 //set default functions for TCP Vegas
54 lmm_set_default_protocol_function(func_vegas_fpi);
55 }else if(method==LAGRANGE_RENO){
56 //set default functions for TCP Reno
57 lmm_set_default_protocol_function(func_reno_fpi);
61 Sys = lmm_system_new();
62 L1 = lmm_constraint_new(Sys, (void *) "L1", 1.0);
63 L2 = lmm_constraint_new(Sys, (void *) "L2", 10.0);
64 L3 = lmm_constraint_new(Sys, (void *) "L3", 1.0);
66 R_1_2_3 = lmm_variable_new(Sys, (void *) "R 1->2->3", 1.0 , -1.0 , 3);
67 R_1 = lmm_variable_new(Sys, (void *) "R 1", 1.0 , -1.0 , 1);
68 R_2 = lmm_variable_new(Sys, (void *) "R 2", 1.0 , -1.0 , 1);
69 R_3 = lmm_variable_new(Sys, (void *) "R 3", 1.0 , -1.0 , 1);
71 lmm_update_variable_latency(Sys, R_1_2_3, 1.0);
72 lmm_update_variable_latency(Sys,R_1, 1.0);
73 lmm_update_variable_latency(Sys,R_2, 1.0);
74 lmm_update_variable_latency(Sys,R_3, 1.0);
77 lmm_expand(Sys, L1, R_1_2_3, 1.0);
78 lmm_expand(Sys, L2, R_1_2_3, 1.0);
79 lmm_expand(Sys, L3, R_1_2_3, 1.0);
81 lmm_expand(Sys, L1, R_1, 1.0);
83 lmm_expand(Sys, L2, R_2, 1.0);
85 lmm_expand(Sys, L3, R_3, 1.0);
91 }else if(method==SDP){
94 }else if(method==LAGRANGE_VEGAS){
95 //set default functions for TCP Vegas
97 }else if(method==LAGRANGE_RENO){
98 //set default functions for TCP Reno
101 xbt_assert0(0,"Invalid method");
109 lmm_system_free(Sys);
112 void test2(method_t method);
113 void test2(method_t method)
115 lmm_system_t Sys = NULL ;
116 lmm_constraint_t CPU1 = NULL;
117 lmm_constraint_t CPU2 = NULL;
119 lmm_variable_t T1 = NULL;
120 lmm_variable_t T2 = NULL;
123 if(method==LAGRANGE_VEGAS){
124 //set default functions for TCP Vegas
125 lmm_set_default_protocol_function(func_vegas_fpi);
126 }else if(method==LAGRANGE_RENO){
127 //set default functions for TCP Reno
128 lmm_set_default_protocol_function(func_reno_fpi);
131 Sys = lmm_system_new();
132 CPU1 = lmm_constraint_new(Sys, (void *) "CPU1", 200.0);
133 CPU2 = lmm_constraint_new(Sys, (void *) "CPU2", 100.0);
135 T1 = lmm_variable_new(Sys, (void *) "T1", 1.0 , -1.0 , 1);
136 T2 = lmm_variable_new(Sys, (void *) "T2", 1.0 , -1.0 , 1);
138 lmm_update_variable_latency(Sys, T1, 1.0);
139 lmm_update_variable_latency(Sys, T2, 1.0);
142 lmm_expand(Sys, CPU1, T1, 1.0);
143 lmm_expand(Sys, CPU2, T2, 1.0);
150 }else if(method==SDP){
153 }else if(method==LAGRANGE_VEGAS){
154 //set default functions for TCP Vegas
156 }else if(method==LAGRANGE_RENO){
157 //set default functions for TCP Reno
160 xbt_assert0(0,"Invalid method");
168 lmm_system_free(Sys);
171 void test3(method_t method);
172 void test3(method_t method)
174 int flows=11; //flows and conexions are synonnims ?
175 int links=10; //topology info
177 //just to be carefull
183 lmm_system_t Sys = NULL ;
184 lmm_constraint_t *tmp_cnst = NULL;
185 lmm_variable_t *tmp_var = NULL;
189 /*array to add the the constraints of fictiv variables */
190 double B[15] = {10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
194 A = (double **)calloc(links+5, sizeof(double));
196 for(i=0 ; i< links+5; i++){
197 A[i] = (double *)calloc(flows+5, sizeof(double));
199 for(j=0 ; j< flows+5; j++){
202 if(i >= links || j >= flows){
208 /*matrix that store the constraints/topollogy*/
210 {{0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
211 {0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
212 {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
213 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
214 {1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
215 {1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
216 {1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
217 {0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0},
218 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
219 {0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0},
221 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
222 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
223 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
224 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
225 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}
278 if(method==LAGRANGE_VEGAS){
279 //set default functions for TCP Vegas
280 lmm_set_default_protocol_function(func_vegas_fpi);
281 }else if(method==LAGRANGE_RENO){
282 //set default functions for TCP Reno
283 lmm_set_default_protocol_function(func_reno_fpi);
286 Sys = lmm_system_new();
290 tmp_name = (char **) calloc(31, sizeof(char *));
292 tmp_name[i] = (char *) calloc(10, sizeof(char));
296 * Creates the constraints
298 tmp_cnst = calloc(15, sizeof(lmm_constraint_t));
300 sprintf(tmp_name[i], "C_%03d", i);
301 tmp_cnst[i] = lmm_constraint_new(Sys, (void *) tmp_name[i], B[i]);
306 * Creates the variables
308 tmp_var = calloc(16, sizeof(lmm_variable_t));
310 sprintf(tmp_name[i+j], "X_%03d", j);
311 tmp_var[j] = lmm_variable_new(Sys, (void *) tmp_name[i+j], 1.0, -1.0 , 15);
312 lmm_update_variable_latency(Sys, tmp_var[j], 1.0);
316 * Link constraints and variables
321 lmm_expand(Sys, tmp_cnst[i], tmp_var[j], 1.0);
331 }else if(method==SDP){
334 }else if(method==LAGRANGE_VEGAS){
335 //set default functions for TCP Vegas
337 }else if(method==LAGRANGE_RENO){
338 //set default functions for TCP Reno
341 xbt_assert0(0,"Invalid method");
345 PRINT_VAR(tmp_var[j]);
351 lmm_system_free(Sys);
358 int main(int argc, char **argv)
360 xbt_init(&argc,argv);
363 DEBUG0("**************************** \n");
364 DEBUG0("***** ***** \n");
365 DEBUG0("***** TEST 1 ***** \n");
366 DEBUG0("***** ***** \n");
367 DEBUG0("**************************** \n");
370 DEBUG0("***** Test 1 (Max-Min) ***** \n");
373 DEBUG0("***** Test 1 (SDP) ***** \n");
376 DEBUG0("***** Test 1 (Lagrange - Vegas) ***** \n");
377 test1(LAGRANGE_VEGAS);
378 DEBUG0("***** Test 1 (Lagrange - Reno) ***** \n");
379 test1(LAGRANGE_RENO);
382 DEBUG0("**************************** \n");
383 DEBUG0("***** ***** \n");
384 DEBUG0("***** TEST 2 ***** \n");
385 DEBUG0("***** ***** \n");
386 DEBUG0("**************************** \n");
389 DEBUG0("***** Test 2 (Max-Min) ***** \n");
392 DEBUG0("***** Test 2 (SDP) ***** \n");
395 DEBUG0("***** Test 2 (Lagrange - Vegas) ***** \n");
396 test2(LAGRANGE_VEGAS);
397 DEBUG0("***** Test 2 (Lagrange - Reno) ***** \n");
398 test2(LAGRANGE_RENO);
402 DEBUG0("**************************** \n");
403 DEBUG0("***** ***** \n");
404 DEBUG0("***** TEST 3 ***** \n");
405 DEBUG0("***** ***** \n");
406 DEBUG0("**************************** \n");
409 DEBUG0("***** Test 3 (Max-Min) ***** \n");
412 DEBUG0("***** Test 3 (SDP) ***** \n");
415 DEBUG0("***** Test 3 (Lagrange - Vegas) ***** \n");
416 test3(LAGRANGE_VEGAS);
417 DEBUG0("***** Test 3 (Lagrange - Reno) ***** \n");
418 test3(LAGRANGE_RENO);