Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Engine should be destroyed through RAII here (fix invalid free).
[simgrid.git] / teshsuite / s4u / comm-pt2pt / comm-pt2pt.cpp
index 68dfbc0..07838b5 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2017. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2010-2019. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "Messages specific for this s4u example");
 
-using namespace simgrid::s4u;
-
 static void usage(const char* binaryName, const char* defaultSend, const char* defaultRecv)
 {
-  std::fprintf(stderr, "Usage: %s examples/platforms/cluster.xml <send_spec> <recv_spec>\n"
+  std::fprintf(stderr, "Usage: %s examples/platforms/cluster_backbone.xml <send_spec> <recv_spec>\n"
                        "where spec is a list of letters giving the kind of tests you want to see.\n"
                        "Existing sender spec:\n"
                        " r regular send\n"
@@ -39,19 +37,18 @@ static void usage(const char* binaryName, const char* defaultSend, const char* d
                        " j irecv on permanent mailbox (after a little delay)\n"
                        " J irecv on permanent mailbox (after a little delay)\n"
                        "\n"
-                       "Example 1: %s examples/platforms/cluster.xml rRiIdD rrrrrr # testing all send functions\n"
+                       "Example 1: %s examples/platforms/cluster_backbone.xml rRiIdD rrrrrr # testing all send functions\n"
                        "Default specs: %s %s (all possible pairs)\n",
                binaryName, binaryName, defaultSend, defaultRecv);
-  exit(1);
 }
 
 static void sender(std::vector<std::string> args)
 {
   XBT_INFO("Sender spec: %s", args[0].c_str());
   for (unsigned int test = 1; test <= args[0].size(); test++) {
-    this_actor::sleep_until(test * 5 - 5);
-    const char* mboxName          = (std::string("Test #") + std::to_string(test)).c_str();
-    simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(mboxName);
+    simgrid::s4u::this_actor::sleep_until(test * 5 - 5);
+    std::string* mboxName         = new std::string("Test #" + std::to_string(test));
+    simgrid::s4u::Mailbox* mbox   = simgrid::s4u::Mailbox::by_name(*mboxName);
 
     switch (args[0][test - 1]) {
       case 'r':
@@ -96,9 +93,9 @@ static void receiver(std::vector<std::string> args)
 {
   XBT_INFO("Receiver spec: %s", args[0].c_str());
   for (unsigned int test = 1; test <= args[0].size(); test++) {
-    this_actor::sleep_until(test * 5 - 5);
-    const char* mboxName          = (std::string("Test #") + std::to_string(test)).c_str();
-    simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(mboxName);
+    simgrid::s4u::this_actor::sleep_until(test * 5 - 5);
+    std::string mboxName          = "Test #" + std::to_string(test);
+    simgrid::s4u::Mailbox* mbox   = simgrid::s4u::Mailbox::by_name(mboxName);
     void* received                = nullptr;
 
     switch (args[0][test - 1]) {
@@ -123,31 +120,32 @@ static void receiver(std::vector<std::string> args)
         break;
       case 'p':
         XBT_INFO("Test %u: p (regular receive on permanent mailbox)", test);
-        mbox->setReceiver(Actor::self());
+        mbox->set_receiver(simgrid::s4u::Actor::self());
         received = mbox->get();
         break;
       case 'P':
         XBT_INFO("Test %u: P (sleep + regular receive on permanent mailbox)", test);
         simgrid::s4u::this_actor::sleep_for(0.5);
-        mbox->setReceiver(Actor::self());
+        mbox->set_receiver(simgrid::s4u::Actor::self());
         received = mbox->get();
         break;
       case 'j':
         XBT_INFO("Test %u: j (irecv on permanent mailbox)", test);
-        mbox->setReceiver(Actor::self());
+        mbox->set_receiver(simgrid::s4u::Actor::self());
         mbox->get_async(&received)->wait();
         break;
       case 'J':
         XBT_INFO("Test %u: J (sleep + irecv on permanent mailbox)", test);
         simgrid::s4u::this_actor::sleep_for(0.5);
-        mbox->setReceiver(Actor::self());
+        mbox->set_receiver(simgrid::s4u::Actor::self());
         mbox->get_async(&received)->wait();
         break;
       default:
         xbt_die("Unknown receiver spec for test %u: '%c'", test, args[0][test - 1]);
     }
-
-    xbt_assert(strcmp(static_cast<char*>(received), mboxName) == 0);
+    std::string* receivedStr = static_cast<std::string*>(received);
+    xbt_assert(*receivedStr == mboxName);
+    delete receivedStr;
     XBT_INFO("Test %u OK", test);
   }
   simgrid::s4u::this_actor::sleep_for(0.5);
@@ -165,11 +163,13 @@ int main(int argc, char* argv[])
   std::vector<std::string> argSend{specSend.c_str()};
   std::vector<std::string> argRecv{specRecv.c_str()};
 
-  simgrid::s4u::Engine* e = new simgrid::s4u::Engine(&argc, argv);
-  if (argc < 2)
+  simgrid::s4u::Engine e(&argc, argv);
+  if (argc < 2) {
     usage(argv[0], specSend.c_str(), specRecv.c_str());
+    return 1;
+  }
 
-  e->loadPlatform(argv[1]);
+  e.load_platform(argv[1]);
 
   if (argc >= 3) {
     argSend.clear();
@@ -181,14 +181,13 @@ int main(int argc, char* argv[])
   }
   xbt_assert(argSend.front().size() == argRecv.front().size(), "Sender and receiver spec must be of the same size");
 
-  simgrid::s4u::Host** hosts = sg_host_list();
-  simgrid::s4u::Actor::createActor("sender", hosts[0], sender, argSend);
-  simgrid::s4u::Actor::createActor("recver", hosts[1], receiver, argRecv);
-  xbt_free(hosts);
+  std::vector<simgrid::s4u::Host*> hosts = e.get_all_hosts();
+
+  simgrid::s4u::Actor::create("sender", hosts[0], sender, argSend);
+  simgrid::s4u::Actor::create("recver", hosts[1], receiver, argRecv);
 
-  e->run();
-  XBT_INFO("Simulation time %g", e->getClock());
+  e.run();
+  XBT_INFO("Simulation time %g", e.get_clock());
 
-  delete e;
   return 0;
 }