Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Remove more new/delete, this time for lmm::System in maxmin tests.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Sat, 21 Nov 2020 14:33:46 +0000 (15:33 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Sat, 21 Nov 2020 17:17:03 +0000 (18:17 +0100)
src/kernel/lmm/maxmin_test.cpp
teshsuite/surf/lmm_usage/lmm_usage.cpp
teshsuite/surf/maxmin_bench/maxmin_bench.cpp

index bc26a8e..7e51fb2 100644 (file)
@@ -12,7 +12,7 @@ namespace lmm = simgrid::kernel::lmm;
 
 TEST_CASE("kernel::lmm Single constraint shared systems", "[kernel-lmm-shared-single-sys]")
 {
-  lmm::System* Sys = lmm::make_new_maxmin_system(false);
+  lmm::System Sys(false);
 
   SECTION("Variable penalty")
   {
@@ -29,13 +29,13 @@ TEST_CASE("kernel::lmm Single constraint shared systems", "[kernel-lmm-shared-si
      *   o rho1 + rho2 = C (because all weights are 1)
      */
 
-    lmm::Constraint* sys_cnst = Sys->constraint_new(nullptr, 3);
-    lmm::Variable* rho_1      = Sys->variable_new(nullptr, 1);
-    lmm::Variable* rho_2      = Sys->variable_new(nullptr, 2);
+    lmm::Constraint* sys_cnst = Sys.constraint_new(nullptr, 3);
+    lmm::Variable* rho_1      = Sys.variable_new(nullptr, 1);
+    lmm::Variable* rho_2      = Sys.variable_new(nullptr, 2);
 
-    Sys->expand(sys_cnst, rho_1, 1);
-    Sys->expand(sys_cnst, rho_2, 1);
-    Sys->solve();
+    Sys.expand(sys_cnst, rho_1, 1);
+    Sys.expand(sys_cnst, rho_2, 1);
+    Sys.solve();
 
     REQUIRE(double_equals(rho_1->get_value(), 2, sg_maxmin_precision));
     REQUIRE(double_equals(rho_2->get_value(), 1, sg_maxmin_precision));
@@ -57,13 +57,13 @@ TEST_CASE("kernel::lmm Single constraint shared systems", "[kernel-lmm-shared-si
      *   o so, rho1 = rho2 = 1 (because C is 3)
      */
 
-    lmm::Constraint* sys_cnst = Sys->constraint_new(nullptr, 3);
-    lmm::Variable* rho_1      = Sys->variable_new(nullptr, 1);
-    lmm::Variable* rho_2      = Sys->variable_new(nullptr, 1);
+    lmm::Constraint* sys_cnst = Sys.constraint_new(nullptr, 3);
+    lmm::Variable* rho_1      = Sys.variable_new(nullptr, 1);
+    lmm::Variable* rho_2      = Sys.variable_new(nullptr, 1);
 
-    Sys->expand(sys_cnst, rho_1, 1);
-    Sys->expand(sys_cnst, rho_2, 2);
-    Sys->solve();
+    Sys.expand(sys_cnst, rho_1, 1);
+    Sys.expand(sys_cnst, rho_2, 2);
+    Sys.solve();
 
     REQUIRE(double_equals(rho_1->get_value(), 1, sg_maxmin_precision));
     REQUIRE(double_equals(rho_2->get_value(), 1, sg_maxmin_precision));
@@ -85,13 +85,13 @@ TEST_CASE("kernel::lmm Single constraint shared systems", "[kernel-lmm-shared-si
      *   o rho1 + 2*rho2 = C (because consumption weight of rho2 is 2)
      */
 
-    lmm::Constraint* sys_cnst = Sys->constraint_new(nullptr, 20);
-    lmm::Variable* rho_1      = Sys->variable_new(nullptr, 1);
-    lmm::Variable* rho_2      = Sys->variable_new(nullptr, 2);
+    lmm::Constraint* sys_cnst = Sys.constraint_new(nullptr, 20);
+    lmm::Variable* rho_1      = Sys.variable_new(nullptr, 1);
+    lmm::Variable* rho_2      = Sys.variable_new(nullptr, 2);
 
-    Sys->expand(sys_cnst, rho_1, 1);
-    Sys->expand(sys_cnst, rho_2, 2);
-    Sys->solve();
+    Sys.expand(sys_cnst, rho_1, 1);
+    Sys.expand(sys_cnst, rho_2, 2);
+    Sys.solve();
 
     double rho_1_share = 10;
     REQUIRE(double_equals(rho_1->get_value(), rho_1_share, sg_maxmin_precision));
@@ -117,21 +117,21 @@ TEST_CASE("kernel::lmm Single constraint shared systems", "[kernel-lmm-shared-si
      *   o 2*rho1 + rho3 = C2 (because consumption weight of rho1 is 2)
      */
 
-    lmm::Constraint* sys_cnst_1 = Sys->constraint_new(nullptr, 20);
-    lmm::Constraint* sys_cnst_2 = Sys->constraint_new(nullptr, 60);
+    lmm::Constraint* sys_cnst_1 = Sys.constraint_new(nullptr, 20);
+    lmm::Constraint* sys_cnst_2 = Sys.constraint_new(nullptr, 60);
 
-    lmm::Variable* rho_1 = Sys->variable_new(nullptr, 1, -1, 2);
-    lmm::Variable* rho_2 = Sys->variable_new(nullptr, 2, -1, 1);
-    lmm::Variable* rho_3 = Sys->variable_new(nullptr, 1, -1, 1);
+    lmm::Variable* rho_1 = Sys.variable_new(nullptr, 1, -1, 2);
+    lmm::Variable* rho_2 = Sys.variable_new(nullptr, 2, -1, 1);
+    lmm::Variable* rho_3 = Sys.variable_new(nullptr, 1, -1, 1);
 
     // Constraint 1
-    Sys->expand(sys_cnst_1, rho_1, 1);
-    Sys->expand(sys_cnst_1, rho_2, 2);
+    Sys.expand(sys_cnst_1, rho_1, 1);
+    Sys.expand(sys_cnst_1, rho_2, 2);
 
     // Constraint 2
-    Sys->expand(sys_cnst_2, rho_1, 2);
-    Sys->expand(sys_cnst_2, rho_3, 1);
-    Sys->solve();
+    Sys.expand(sys_cnst_2, rho_1, 2);
+    Sys.expand(sys_cnst_2, rho_3, 1);
+    Sys.solve();
 
     double rho_1_share = 10; // Start by solving the first constraint (results is the same as previous tests)
     REQUIRE(double_equals(rho_1->get_value(), rho_1_share, sg_maxmin_precision));
@@ -139,13 +139,12 @@ TEST_CASE("kernel::lmm Single constraint shared systems", "[kernel-lmm-shared-si
     REQUIRE(double_equals(rho_3->get_value(), 60 - 2 * rho_1_share, sg_maxmin_precision));
   }
 
-  Sys->variable_free_all();
-  delete Sys;
+  Sys.variable_free_all();
 }
 
 TEST_CASE("kernel::lmm Single constraint unshared systems", "[kernel-lmm-unshared-single-sys]")
 {
-  lmm::System* Sys = lmm::make_new_maxmin_system(false);
+  lmm::System Sys(false);
 
   SECTION("Variable penalty")
   {
@@ -163,14 +162,14 @@ TEST_CASE("kernel::lmm Single constraint unshared systems", "[kernel-lmm-unshare
      *   o rho2 = max_share/2 (because penalty of rho2 is 2)
      */
 
-    lmm::Constraint* sys_cnst = Sys->constraint_new(nullptr, 10);
+    lmm::Constraint* sys_cnst = Sys.constraint_new(nullptr, 10);
     sys_cnst->unshare(); // FATPIPE
-    lmm::Variable* rho_1 = Sys->variable_new(nullptr, 1);
-    lmm::Variable* rho_2 = Sys->variable_new(nullptr, 2);
+    lmm::Variable* rho_1 = Sys.variable_new(nullptr, 1);
+    lmm::Variable* rho_2 = Sys.variable_new(nullptr, 2);
 
-    Sys->expand(sys_cnst, rho_1, 1);
-    Sys->expand(sys_cnst, rho_2, 1);
-    Sys->solve();
+    Sys.expand(sys_cnst, rho_1, 1);
+    Sys.expand(sys_cnst, rho_2, 1);
+    Sys.solve();
 
     REQUIRE(double_equals(rho_1->get_value(), 10, sg_maxmin_precision));
     REQUIRE(double_equals(rho_2->get_value(), 10 / 2, sg_maxmin_precision));
@@ -193,14 +192,14 @@ TEST_CASE("kernel::lmm Single constraint unshared systems", "[kernel-lmm-unshare
      *   o rho2 = max_share/2 (because penalty of rho2 is 1)
      */
 
-    lmm::Constraint* sys_cnst = Sys->constraint_new(nullptr, 10);
+    lmm::Constraint* sys_cnst = Sys.constraint_new(nullptr, 10);
     sys_cnst->unshare(); // FATPIPE
-    lmm::Variable* rho_1 = Sys->variable_new(nullptr, 1);
-    lmm::Variable* rho_2 = Sys->variable_new(nullptr, 1);
+    lmm::Variable* rho_1 = Sys.variable_new(nullptr, 1);
+    lmm::Variable* rho_2 = Sys.variable_new(nullptr, 1);
 
-    Sys->expand(sys_cnst, rho_1, 1);
-    Sys->expand(sys_cnst, rho_2, 2);
-    Sys->solve();
+    Sys.expand(sys_cnst, rho_1, 1);
+    Sys.expand(sys_cnst, rho_2, 2);
+    Sys.solve();
 
     REQUIRE(double_equals(rho_1->get_value(), 5, sg_maxmin_precision));
     REQUIRE(double_equals(rho_2->get_value(), 5, sg_maxmin_precision));
@@ -223,14 +222,14 @@ TEST_CASE("kernel::lmm Single constraint unshared systems", "[kernel-lmm-unshare
      *   o rho1 <= C and 2*rho2 <= C
      */
 
-    lmm::Constraint* sys_cnst = Sys->constraint_new(nullptr, 10);
+    lmm::Constraint* sys_cnst = Sys.constraint_new(nullptr, 10);
     sys_cnst->unshare();
-    lmm::Variable* sys_var_1 = Sys->variable_new(nullptr, 1);
-    lmm::Variable* sys_var_2 = Sys->variable_new(nullptr, 2);
+    lmm::Variable* sys_var_1 = Sys.variable_new(nullptr, 1);
+    lmm::Variable* sys_var_2 = Sys.variable_new(nullptr, 2);
 
-    Sys->expand(sys_cnst, sys_var_1, 1);
-    Sys->expand(sys_cnst, sys_var_2, 2);
-    Sys->solve();
+    Sys.expand(sys_cnst, sys_var_1, 1);
+    Sys.expand(sys_cnst, sys_var_2, 2);
+    Sys.solve();
 
     REQUIRE(double_equals(sys_var_1->get_value(), 10, sg_maxmin_precision));
     REQUIRE(double_equals(sys_var_2->get_value(), 5, sg_maxmin_precision));
@@ -255,23 +254,23 @@ TEST_CASE("kernel::lmm Single constraint unshared systems", "[kernel-lmm-unshare
      *   o Each constraint should satisfy max(a_i * rho_i) <= C_r
      */
 
-    lmm::Constraint* sys_cnst_1 = Sys->constraint_new(nullptr, 10);
-    lmm::Constraint* sys_cnst_2 = Sys->constraint_new(nullptr, 60);
+    lmm::Constraint* sys_cnst_1 = Sys.constraint_new(nullptr, 10);
+    lmm::Constraint* sys_cnst_2 = Sys.constraint_new(nullptr, 60);
     sys_cnst_1->unshare(); // FATPIPE
     sys_cnst_2->unshare();
 
-    lmm::Variable* rho_1 = Sys->variable_new(nullptr, 1, -1, 2);
-    lmm::Variable* rho_2 = Sys->variable_new(nullptr, 2, -1, 1);
-    lmm::Variable* rho_3 = Sys->variable_new(nullptr, 1, -1, 1);
+    lmm::Variable* rho_1 = Sys.variable_new(nullptr, 1, -1, 2);
+    lmm::Variable* rho_2 = Sys.variable_new(nullptr, 2, -1, 1);
+    lmm::Variable* rho_3 = Sys.variable_new(nullptr, 1, -1, 1);
 
     // Constraint 1
-    Sys->expand(sys_cnst_1, rho_1, 1);
-    Sys->expand(sys_cnst_1, rho_2, 2);
+    Sys.expand(sys_cnst_1, rho_1, 1);
+    Sys.expand(sys_cnst_1, rho_2, 2);
 
     // Constraint 2
-    Sys->expand(sys_cnst_2, rho_1, 2);
-    Sys->expand(sys_cnst_2, rho_3, 1);
-    Sys->solve();
+    Sys.expand(sys_cnst_2, rho_1, 2);
+    Sys.expand(sys_cnst_2, rho_3, 1);
+    Sys.solve();
 
     double rho_1_share = 10; // Start by solving the first constraint (results is the same as previous tests)
     REQUIRE(double_equals(rho_1->get_value(), rho_1_share, sg_maxmin_precision));
@@ -279,6 +278,5 @@ TEST_CASE("kernel::lmm Single constraint unshared systems", "[kernel-lmm-unshare
     REQUIRE(double_equals(rho_3->get_value(), 60, sg_maxmin_precision));
   }
 
-  Sys->variable_free_all();
-  delete Sys;
+  Sys.variable_free_all();
 }
index 249ddf7..6175cd6 100644 (file)
@@ -31,67 +31,65 @@ static void test1()
   double a = 1.0;
   double b = 10.0;
 
-  lmm::System* Sys    = lmm::make_new_maxmin_system(false);
-  lmm::Constraint* L1 = Sys->constraint_new(nullptr, a);
-  lmm::Constraint* L2 = Sys->constraint_new(nullptr, b);
-  lmm::Constraint* L3 = Sys->constraint_new(nullptr, a);
+  lmm::System Sys(false);
+  lmm::Constraint* L1 = Sys.constraint_new(nullptr, a);
+  lmm::Constraint* L2 = Sys.constraint_new(nullptr, b);
+  lmm::Constraint* L3 = Sys.constraint_new(nullptr, a);
 
-  lmm::Variable* R_1_2_3 = Sys->variable_new(nullptr, 1.0, -1.0, 3);
-  lmm::Variable* R_1     = Sys->variable_new(nullptr, 1.0, -1.0, 1);
-  lmm::Variable* R_2     = Sys->variable_new(nullptr, 1.0, -1.0, 1);
-  lmm::Variable* R_3     = Sys->variable_new(nullptr, 1.0, -1.0, 1);
+  lmm::Variable* R_1_2_3 = Sys.variable_new(nullptr, 1.0, -1.0, 3);
+  lmm::Variable* R_1     = Sys.variable_new(nullptr, 1.0, -1.0, 1);
+  lmm::Variable* R_2     = Sys.variable_new(nullptr, 1.0, -1.0, 1);
+  lmm::Variable* R_3     = Sys.variable_new(nullptr, 1.0, -1.0, 1);
 
-  Sys->update_variable_penalty(R_1_2_3, 1.0);
-  Sys->update_variable_penalty(R_1, 1.0);
-  Sys->update_variable_penalty(R_2, 1.0);
-  Sys->update_variable_penalty(R_3, 1.0);
+  Sys.update_variable_penalty(R_1_2_3, 1.0);
+  Sys.update_variable_penalty(R_1, 1.0);
+  Sys.update_variable_penalty(R_2, 1.0);
+  Sys.update_variable_penalty(R_3, 1.0);
 
-  Sys->expand(L1, R_1_2_3, 1.0);
-  Sys->expand(L2, R_1_2_3, 1.0);
-  Sys->expand(L3, R_1_2_3, 1.0);
+  Sys.expand(L1, R_1_2_3, 1.0);
+  Sys.expand(L2, R_1_2_3, 1.0);
+  Sys.expand(L3, R_1_2_3, 1.0);
 
-  Sys->expand(L1, R_1, 1.0);
-  Sys->expand(L2, R_2, 1.0);
-  Sys->expand(L3, R_3, 1.0);
+  Sys.expand(L1, R_1, 1.0);
+  Sys.expand(L2, R_2, 1.0);
+  Sys.expand(L3, R_3, 1.0);
 
-  Sys->solve();
+  Sys.solve();
 
   PRINT_VAR(R_1_2_3);
   PRINT_VAR(R_1);
   PRINT_VAR(R_2);
   PRINT_VAR(R_3);
 
-  Sys->variable_free(R_1_2_3);
-  Sys->variable_free(R_1);
-  Sys->variable_free(R_2);
-  Sys->variable_free(R_3);
-  delete Sys;
+  Sys.variable_free(R_1_2_3);
+  Sys.variable_free(R_1);
+  Sys.variable_free(R_2);
+  Sys.variable_free(R_3);
 }
 
 static void test2()
 {
-  lmm::System* Sys = lmm::make_new_maxmin_system(false);
+  lmm::System Sys(false);
 
-  lmm::Constraint* CPU1 = Sys->constraint_new(nullptr, 200.0);
-  lmm::Constraint* CPU2 = Sys->constraint_new(nullptr, 100.0);
+  lmm::Constraint* CPU1 = Sys.constraint_new(nullptr, 200.0);
+  lmm::Constraint* CPU2 = Sys.constraint_new(nullptr, 100.0);
 
-  lmm::Variable* T1 = Sys->variable_new(nullptr, 1.0, -1.0, 1);
-  lmm::Variable* T2 = Sys->variable_new(nullptr, 1.0, -1.0, 1);
+  lmm::Variable* T1 = Sys.variable_new(nullptr, 1.0, -1.0, 1);
+  lmm::Variable* T2 = Sys.variable_new(nullptr, 1.0, -1.0, 1);
 
-  Sys->update_variable_penalty(T1, 1.0);
-  Sys->update_variable_penalty(T2, 1.0);
+  Sys.update_variable_penalty(T1, 1.0);
+  Sys.update_variable_penalty(T2, 1.0);
 
-  Sys->expand(CPU1, T1, 1.0);
-  Sys->expand(CPU2, T2, 1.0);
+  Sys.expand(CPU1, T1, 1.0);
+  Sys.expand(CPU2, T2, 1.0);
 
-  Sys->solve();
+  Sys.solve();
 
   PRINT_VAR(T1);
   PRINT_VAR(T2);
 
-  Sys->variable_free(T1);
-  Sys->variable_free(T2);
-  delete Sys;
+  Sys.variable_free(T1);
+  Sys.variable_free(T2);
 }
 
 static void test3()
@@ -129,34 +127,33 @@ static void test3()
   A[13][14] =                                        1.0;
   A[14][15] =                                        1.0;
 
-  lmm::System* Sys = lmm::make_new_maxmin_system(false);
+  lmm::System Sys(false);
 
   /* Creates the constraints */
   std::array<lmm::Constraint*, 15> tmp_cnst;
   for (int i = 0; i < 15; i++)
-    tmp_cnst[i] = Sys->constraint_new(nullptr, B[i]);
+    tmp_cnst[i] = Sys.constraint_new(nullptr, B[i]);
 
   /* Creates the variables */
   std::array<lmm::Variable*, 16> tmp_var;
   for (int j = 0; j < 16; j++) {
-    tmp_var[j] = Sys->variable_new(nullptr, 1.0, -1.0, 15);
-    Sys->update_variable_penalty(tmp_var[j], 1.0);
+    tmp_var[j] = Sys.variable_new(nullptr, 1.0, -1.0, 15);
+    Sys.update_variable_penalty(tmp_var[j], 1.0);
   }
 
   /* Link constraints and variables */
   for (int i = 0; i < 15; i++)
     for (int j = 0; j < 16; j++)
       if (A[i][j] != 0.0)
-        Sys->expand(tmp_cnst[i], tmp_var[j], 1.0);
+        Sys.expand(tmp_cnst[i], tmp_var[j], 1.0);
 
-  Sys->solve();
+  Sys.solve();
 
   for (int j = 0; j < 16; j++)
     PRINT_VAR(tmp_var[j]);
 
   for (int j = 0; j < 16; j++)
-    Sys->variable_free(tmp_var[j]);
-  delete Sys;
+    Sys.variable_free(tmp_var[j]);
 }
 
 int main(int argc, char** argv)
index a8a0086..59bff10 100644 (file)
 static double test(int nb_cnst, int nb_var, int nb_elem, unsigned int pw_base_limit, unsigned int pw_max_limit,
                    double rate_no_limit, int max_share, int mode)
 {
-  auto* cnst = new simgrid::kernel::lmm::Constraint*[nb_cnst];
-  auto* var  = new simgrid::kernel::lmm::Variable*[nb_var];
-  auto* used = new int[nb_cnst];
+  std::vector<simgrid::kernel::lmm::Constraint*> constraints(nb_cnst);
+  std::vector<simgrid::kernel::lmm::Variable*> variables(nb_var);
 
   /* We cannot activate the selective update as we pass nullptr as an Action when creating the variables */
-  auto* Sys = new simgrid::kernel::lmm::System(false);
+  simgrid::kernel::lmm::System Sys(false);
 
-  for (int i = 0; i < nb_cnst; i++) {
-    cnst[i] = Sys->constraint_new(nullptr, simgrid::xbt::random::uniform_real(0.0, 10.0));
+  for (auto& cnst : constraints) {
+    cnst = Sys.constraint_new(nullptr, simgrid::xbt::random::uniform_real(0.0, 10.0));
     int l;
     if (rate_no_limit > simgrid::xbt::random::uniform_real(0.0, 1.0)) {
       // Look at what happens when there is no concurrency limit
@@ -37,59 +36,54 @@ static double test(int nb_cnst, int nb_var, int nb_elem, unsigned int pw_base_li
       // Badly logarithmically random concurrency limit in [2^pw_base_limit+1,2^pw_base_limit+2^pw_max_limit]
       l = (1 << pw_base_limit) + (1 << simgrid::xbt::random::uniform_int(0, pw_max_limit - 1));
     }
-    cnst[i]->set_concurrency_limit(l);
+    cnst->set_concurrency_limit(l);
   }
 
-  for (int i = 0; i < nb_var; i++) {
-    var[i] = Sys->variable_new(nullptr, 1.0, -1.0, nb_elem);
+  for (auto& var : variables) {
+    var = Sys.variable_new(nullptr, 1.0, -1.0, nb_elem);
     //Have a few variables with a concurrency share of two (e.g. cross-traffic in some cases)
     short concurrency_share = 1 + static_cast<short>(simgrid::xbt::random::uniform_int(0, max_share - 1));
-    var[i]->set_concurrency_share(concurrency_share);
+    var->set_concurrency_share(concurrency_share);
 
-    for (int j = 0; j < nb_cnst; j++)
-      used[j] = 0;
+    std::vector<int> used(nb_cnst, 0);
     for (int j = 0; j < nb_elem; j++) {
       int k;
       do {
         k = simgrid::xbt::random::uniform_int(0, nb_cnst - 1);
       } while (used[k] >= concurrency_share);
-      Sys->expand(cnst[k], var[i], simgrid::xbt::random::uniform_real(0.0, 1.5));
-      Sys->expand_add(cnst[k], var[i], simgrid::xbt::random::uniform_real(0.0, 1.5));
+      Sys.expand(constraints[k], var, simgrid::xbt::random::uniform_real(0.0, 1.5));
+      Sys.expand_add(constraints[k], var, simgrid::xbt::random::uniform_real(0.0, 1.5));
       used[k]++;
     }
   }
 
   fprintf(stderr, "Starting to solve(%i)\n", simgrid::xbt::random::uniform_int(0, 999));
   double date = xbt_os_time();
-  Sys->solve();
+  Sys.solve();
   date = (xbt_os_time() - date) * 1e6;
 
   if(mode==2){
     fprintf(stderr,"Max concurrency:\n");
     int l=0;
     for (int i = 0; i < nb_cnst; i++) {
-      int j = cnst[i]->get_concurrency_maximum();
-      int k = cnst[i]->get_concurrency_limit();
+      int j = constraints[i]->get_concurrency_maximum();
+      int k = constraints[i]->get_concurrency_limit();
       xbt_assert(k<0 || j<=k);
       if(j>l)
         l=j;
       fprintf(stderr,"(%i):%i/%i ",i,j,k);
-      cnst[i]->reset_concurrency_maximum();
-      xbt_assert(not cnst[i]->get_concurrency_maximum());
+      constraints[i]->reset_concurrency_maximum();
+      xbt_assert(not constraints[i]->get_concurrency_maximum());
       if(i%10==9)
         fprintf(stderr,"\n");
     }
     fprintf(stderr,"\nTotal maximum concurrency is %i\n",l);
 
-    Sys->print();
+    Sys.print();
   }
 
-  for (int i = 0; i < nb_var; i++)
-    Sys->variable_free(var[i]);
-  delete Sys;
-  delete[] cnst;
-  delete[] var;
-  delete[] used;
+  for (auto const& var : variables)
+    Sys.variable_free(var);
 
   return date;
 }